www.vorhilfe.de
- Förderverein -
Der Förderverein.

Gemeinnütziger Verein zur Finanzierung des Projekts Vorhilfe.de.
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Impressum
Navigation
 Startseite...
 Suchen
 Impressum
Forenbaum
^ Forenbaum
Status VH e.V.
  Status Vereinsforum

Gezeigt werden alle Foren bis zur Tiefe 2

Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Maxima" - Programm in Maxima schreiben
Programm in Maxima schreiben < Maxima < Mathe-Software < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Maxima"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Programm in Maxima schreiben: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 14:05 Sa 23.05.2020
Autor: kuyaykim

Aufgabe
(a) Schreiben Sie eine Funktion  p r i m z a h l i
n f o  zu folgendem Flussdiagramm; dabei soll x
eine nicht-negative ganze Zahl sein dürfen:
[imp]
(b) Überprüfen Sie, ob Ihre Befehlsumgebung
aus (a) auch dann "richtig" reagiert, wenn für x
die Zahl 0 oder 1 eingesetzt wird;
falls in diesem Fall eine Fehlermeldung
erscheint, finden Sie heraus, woran das liegt.

(c) Formulieren Sie nun eine
Mehrfach-Verzweigung, um zusätzlich die Fälle
x=0 und x=1 korrekt zu behandeln.
Die Grundstruktur für eine solche
Mehrfach-Verzweigung lautet:

if  BEDINGUNG1 then AUSDRUCK1
elseif  BEDINGUNG2  then
AUSDRUCK2
elseif  BEDINGUNG3  then
AUSDRUCK3
...
else  AUSDRUCKn

Hallo!
Ich komme mit dieser Frage nicht weiter.
Ich habe es so geschrieben, aber Maxima erkennt keine Primzahl

prim(x):=block(
if (integerp(x) and x>0) then
    (if integerp(primep(x)) then sconcat(x, " ist eine Primzahl")
     else sconcat(x," ist keine Primzahl"))    
else return(" Als Argument muss eine natürliche Zahl eingegeben werden.")    
)$

Wenn ich es wie folgt teste:

prim(1);
prim(2);
prim(3);
prim(4);
prim(-1);
prim(5);
prim(0);

gibt Maxima das raus:

"1 ist keine Primzahl"
"2 ist keine Primzahl"
"3 ist keine Primzahl"
"4 ist keine Primzahl"
" Als Argument muss eine natürliche Zahl eingegeben werden."
"5 ist keine Primzahl"
" Als Argument muss eine natürliche Zahl eingegeben werden."

Was habe ich da falsch gemacht?
Wie muss der Befehl sonst heißen?
Auch die 0 und die 1 muss erkannt werden.

Was ist da falsch?

Ich danke euch schonmal für eure Hilfe.
LG
Nicole
Ich habe diese Frage auch in folgenden Foren auf anderen Internetseiten gestellt:
[https://matheplanet.com/default3.html?call=viewtopic.php?topic=235877&ref=https%3A%2F%2Fwww.google.com%2F]

Dateianhänge:
Anhang Nr. 1 (Typ: png) [nicht öffentlich]
        
Bezug
Programm in Maxima schreiben: Antwort
Status: (Antwort) fertig Status 
Datum: 15:09 Sa 23.05.2020
Autor: HJKweseleit

Du hast nichts falsch, sondern eigentlich gar nichts gemacht.
Maxima weiß eher, ob heute schönes Wetter ist, als dass es weiß, was eine Primzahl ist. Das sollst du doch gerade programmieren!

Wie geht das?

Bei 0 und 1 gibst du "ist keine PZ" aus und verlässt das Programm (Nein, nicht "muss eine nat. Z. eingegeben werden", 0 ist ausdrücklich erlaubt).

Jetzt setzt du t=2 (das ist ein möglicher Teiler)
Solange (t<x) und (x mod t [mm] \ne [/mm] 0) wiederhole t:=t+1
falls t=x schreibe "PZ" sonst "keine PZ".

Erklärung:
x mod t ist eine Funktion aus der Computersprache Pascal. (weiteres für Maxima s.u.) Sie gibt den Rest an, der beim Teilen von x durch t entsteht. 20 mod 7 ist 6, weil 20:7=2 Rest 6 ist. 20 mod 5 ist 0, weil 20:5=4 Rest 0 ist. Wenn also 0 herauskommt, ist x durch t teilbar, und du hast einen Teiler gefunden, und x ist keine PZ. Wenn nicht, erhöhst du den Teiler um 1 und probierst es weiter, bis es klappt.


Spätestens bei t=x klappt es natürlich, und du müsstest nun nur noch nachfragen, ob t bis x gelaufen ist oder vorher schon einen Teiler gefunden hat. Wenn t=x der erste Teiler ist, gibt es außer 1 keinen weiteren, und du hast eine PZ.

Falls du die mod-Funktion nicht findest: Sie kann auch "remainder" oder "reminder" heißen. Falls es so etwas in Maxima auch nicht gibt, kannst du dich mit einer Ganzzahldivision behelfen. Die heißt in Pascal div und lässt den Rest weg: 20 div 7 ist 2, 20 div 5 ist 4. Dann gibt x-(x div t)*t den Rest an: 20-(20 div 7)*7 =20-2*7=6 bzw. 20-(20 div 5)*5=20-4*5=0.

Falls es auch keine Ganzzahldivision gibt, kann ich dir nicht weiterhelfen.

Das obige Programm ist übrigens sehr ineffektiv, weil man bei einer PZ von t=2 bis t=x alles durchprobiert, obwohl man schon bei der Wurzel von x aufhören kann. Aber das ist eine andere Geschichte...



Bezug
        
Bezug
Programm in Maxima schreiben: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 20:59 Sa 23.05.2020
Autor: kuyaykim

Ich habe es jetzt ein wenig geändert und damit klappt es.

prim(x):=block(
if (integerp(x) and x>=0) then
    (if (primep(x)) then sconcat(x, " ist eine Primzahl")
     else sconcat(x," ist keine Primzahl"))    
else return(" Als Argument muss eine ganze Zahl eingegeben werden.")    
)$

prim(2);
prim(3);
prim(4);
prim(-1);
prim(5);

"2 ist eine Primzahl"
"3 ist eine Primzahl"
"4 ist keine Primzahl"
" Als Argument muss eine ganze Zahl eingegeben werden."
"5 ist eine Primzahl"

Das ich Maxima dazu nehme ist eine Vorgabe. Da kann ich nichts dran ändern.

Bezug
                
Bezug
Programm in Maxima schreiben: Funktion "primep"
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 14:44 So 24.05.2020
Autor: Al-Chwarizmi

Damit hast du natürlich, was die Primzahleigenschaft betrifft, eigentlich gar nichts selber programmiert, sondern du stützt dich einfach auf eine in Maxima offenbar eingebaute Funktion "primep" , welche mittels einer äußerst raffinierten zahlentheoretischen Methode mit großer Sicherheit über die Primzahleigenschaft entscheidet - und für alle gängigen (nicht zu riesengroßen) Zahlenwerte auch das richtige Ergebnis liefert.

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Maxima"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
ev.vorhilfe.de
[ Startseite | Mitglieder | Impressum ]