Einleitung | Einführungsbeispiel | Eingabe, Ausgabe, Variablen | Datentypen | Stukturen | For...EndFor | If...EndIf | Loop...EndLoop | While...EndWhile | Felder | Funktionen | Unterprogramme | Grafikprogrammierung | Index
Programmierkurs 

Die If...EndIf-Abfragen

Der If-Befehl

Soll eine Anweisung nur dann ausgeführt werden, wenn die Bedingungsprüfung WAHR ergibt, verwendet man folgende Struktur:
 
If logische Bedingung
  Anweisung 

Logische Bedingungen

Eine logische Bedingung, auch Boolscher Term genannt, ist ein mathematischer Ausdruck, der entweder WAHR oder FALSCH sein kann. Die folgene Tabelle enthält einige Beispiele für Boolsche Terme:
 
Boolscher Term Wahrheitswert
4 < 15 WAHR / TRUE
5 = 5 WAHR / TRUE
2 > 17 FALSCH / FALSE
x < 5 hängt von x ab

 
Die Relationszeichen ">", "=", etc. bezeichnet man als relationale Operatoren. Du findest eine Liste aller möglichen relationaler Operatoren im Handbuch im Kapitel "Programmierung" unter dem Begriff "Bedingungsprüfungen".

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

 
 
Beispiel 7 ("Primzahltest")
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.
 

  1. Erzeuge eine neue Programmvariable mit Namen prim.
  2. Füge den rechts abgebildeten "Standard"-Rahmencode ein.
Beachte, dass eine Variable im Programm denselben Namen haben kann, wie das Programm selbst.
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:

  1. Füge die fehlenden Zeilen, wie rechts abgebildet, in dein Programm ein.
Bei längeren Programmen erweist es sich als sinnvoll die wichtigsten Programmteile zu kommentieren. Am TI-92 steht dafür das Zeichen , welches im Programmeditor mit der Tastenkombination , X eingefügt wird. Alle Zeichen rechts von  werden bei der Programmausführung ignoriert.
Die Zeichenfolge Ö(n) steht für die Wurzel aus n.
Mit dem Befehl iPart können die Nachkommastellen einer Dezimalzahl abgeschnitten werden, d.h., iPart(4,23) = 4.
  1. Führe das Programm aus und teste, ob es auch funktioniert.
  2. Notiere dir, wie lange das Programm ungefähr braucht, um festzustellen, ob 66666 bzw. 333333 eine Primzahl ist.
...
expr(n) ® n
prim auf true setzen
true ® prim
teste, ob n gerade und ¹ 2 ist
If mod(n, 2) = 0 and n ¹ 2
  false ® prim
Test für alle ungeraden Zahlen
For i, 3, iPart(Ö(n)), 2
  If mod(n, i) = 0
    false ® prim
EndFor
Ausgabe in Abhängigkeit von prim
If prim
  Disp string(n)&" ist eine Primzahl"
If not prim
  Disp string(n)&" ist keine Primzahl"
EndPrgm

 
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:

Die If...Then...EndIf-Struktur

Will man mehrere Anweisung ausführen, wenn die Bedingungsprüfung WAHR ergibt, kommt folgende Struktur zur Anwendung:
 
If logische BedingungThen
  Anweisungen
EndIf

 
 
Beispiel 8 ("Verbesserung des Primzahltests")
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.
 

  1. Ergänze das Programm prim, wie rechts abgebildet.
  2. Vergleiche nun, wie lange dieses Programm benötigt, um festzustellen, ob 66666 bzw. 333333 eine Primzahl ist.
Beachte, die Abfrage If prim Then . Sie bewirkt, dass die FOR-Schleife nur durchlaufen wird, wenn die Testzahl nicht gerade ist. Weiters wird die Schleife sofort verlassen, wenn ein echter Teiler für die Testzahl gefunden wird.
...
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
...

Die If...Then...Else...EndIf-Struktur

Die Struktur
 
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.

Übungsaufgaben

 
  1. Die Zahlen 1 bis 45 sollen, mit Hilfe einer FOR-Schleife, wie in folgender Abildung ausgegeben werden:
[Lösungsvorschlag]
  1. Zahlenraten. Der Rechner erzeugt eine Zufallszahl zwischen 0 und 99. Der Benutzer darf sieben mal eine Zahl raten. Wenn die Zahl größer oder kleiner ist als die Zufallszahl, dann wird dies dem Benutzer mitgeteilt. Bei richtiger Zahl beglückwünscht der Rechner den Benutzer.
Das Erzeugen von Zufallszahlen geschieht am TI-92 mit dem Befehl rand(). Im Anhang A des Handbuches kannst du nachsehen, wie man diesen Befehl verwendet.
    [Lösungsvorschlag]

 
 



Mail an den Autor, Karl.Weinstich@theresianum.ac.at