If logische Bedingung
Anweisung |
Boolscher Term | Wahrheitswert |
4 < 15 | WAHR / TRUE |
5 = 5 | WAHR / TRUE |
2 > 17 | FALSCH / FALSE |
x < 5 | hängt von x ab |
Boolsche Terme können auch miteinander
verknüpft werden. So besitzt der folgende Term 5 < 10 AND 7
> 2 den Wahrheitswert TRUE, wie du aus der folgenden Tabelle
entnehmen kannst:
Operator | Wahr, wenn: |
a AND b | sowohl a als auch b wahr ist |
a OR b | entweder a oder b oder beide wahr sind (= nicht ausschließendes ODER) |
a XOR b | entweder a oder b aber nicht beide wahr sind (= ausschließendes ODER) |
NOT a | a falsch ist |
Nachdem der Benutzer eine natürliche Zahl eingegeben hat, soll das Programm ausgeben ob es sich dabei um eine Primzahl handelt. |
Wir verwenden die Variable:
n für die natürliche
Zahl,
i als Laufvariable und prim als die Variable in der gespeichert wird, ob es sich um eine Primzahl handelt oder nicht. |
Alle Variablen sollen lokale Variablen
sein.
|
prim()
Prgm Local prim, n, i ClrIO Request "natürliche Zahl: (>1)", n expr(n) ® n EndPrgm |
Wir gehen nun von folgender Überlegung
aus: n ist genau dann eine Primzahl, wenn sich bei Division von
n
durch alle möglichen Primzahlen bis zur Wurzel aus n niemals
der Rest 0 ergibt. Um den Algorithmus möglichst einfach zu halten,
nehmen wir als Divisoren nicht alle Primzahlen bis zur Wurzel aus n
sondern zuerst die Primzahl 2 und dann alle ungeraden Zahlen bis zur Wurzel
aus n.
Zunächst setzten wir die Variable
prim
auf
true;
d.h. wir tun so, als wäre n eine Primzahl. Danach führen
wir den eben erklärten Test durch und sollte dabei einer der Divisionsreste,
die sich mit dem Befehl mod ermitteln lassen,
Null sein, setzen wir die Variable prim auf false. In Abhängigkeit
von
prim kann dann am Ende das gewünschte Ergebnis ausgegeben
werden:
Beachte, dass die Anweisung false
®
prim
nicht in derselben Zeile mit der IF-Abfrage stehen darf, sondern wirklich
in der nächsten Zeile stehen muss, da es ansonsten zu folgender Fehlermeldung
kommt:
|
If logische BedingungThen
Anweisungen EndIf |
Im obigen Primzahltest wird die FOR-Schleife immer bis zum Ende durchlaufen, auch wenn die zu untersuchende Zahl bereits durch 2, 3 oder eine andere kleine Primzahl teilbar ist. Das Programm soll nun so abgeändert werden, dass die FOR-Schleife beim ersten Auftreten eines Teilers verlassen wird. |
Der Befehl, mit dem einem FOR-Schleife
sofort beendet werden kann, ist der Befehl Exit.
|
...
true ® prim Test für alle ungeraden Zahlen If prim Then For i, 3, iPart(Ö(n)), 2 If mod(n, i) = 0 Then false ® prim Exit EndIf EndFor EndIf Ausgabe in Abhängigkeit von prim ... |
If logische BedingungThen
Anweisungsblock1 Else Anweisungsblock2 EndIf |
bewirkt, dass der Anweisungsblock1
durchgeführt wird sofern die logische Bedingung wahr ist. Andernfalls,
wird der Anweisungsblock2 durchgeführt. Damit hätten wir die
Ausgabe unseres Primzahltests so prägnanter formulieren können:
If prim
Then
Disp string(n)&" ist eine Primzahl" Else Disp string(n)&" ist keine Primzahl" EndIf |
Beachte, dass hier nur eine Auswertung für die korrekte Anzeige notwendig ist, nämlich ob prim = true ist. |
[Lösungsvorschlag]
|
|