If-Anweisung


Bedingte Anweisungen

Das mit der Unterbrechung mit Hilfe der TAB-Taste geht schon, ist aber unbequem. Spätestens beim Mondlandungsspiel kommt die drängende Frage auf: "Wie kann ich es einrichten, dass der Computer anhält, wenn die Oberfläche erreicht ist?". Man sollte dem C16 sagen können: "Wenn der Wert XY negativ ist, dann höre auf". Oder allgemeiner: "Wenn die und die Bedingung eintritt, dann tue das und das." Auch das geht. Man kann einer Anweisung eine Bedingung voranstellen und sagen: "Führe die Anweisung nur dann aus, wenn die Bedingung erfüllt ist". Das ist die IF-Anweisung. Eigentlich ist IF keine Anweisung sondern der Zusatz zu einer anderen, beliebigen Anweisung. Wenn das Programm nur dann A ausgeben soll, wenn A grösser als 2 ist, dann schreibt man

IF A>2 THEN PRINT A
. (Das ">"-Zeichen finden Sie unter ":" auf dem PC, das "<"-Zeichen unter ";". ) Hinter IF kommt also die Bedingung und hinter THEN die Anweisung.

Als Beispiel unser Pythagoras-Programm:

10 INPUT A
20 INPUT B
30 PRINT SQR(A^2+B^2)
40 LET A=A+10
50 IF A<60 THEN GOTO 30

Hier werden also für A alle Werte von 10 bis 50 durchlaufen. Wenn A 60 erreicht hat, ist die Bedingung in Zeile 50 nicht mehr erfüllt und das Programm endet.

Übungsaufgabe:

Erweitern Sie das Pythagoras-Programm so, dass für das Wertepaar A,B alle Werte zwischen 10 und 50 (in 10er-Schritten) durchlaufen werden, wie in der anfangs erstellten Tabelle gezeigt.

Vergleichsoperatoren

Wir haben eben eine neue Verknüpfung (einen neuen Operator) verwendet: Nicht +,-,* oder /, sondern "<". Das gibt's auch auf keinem Taschenrechner. Weil das nur im Zusammenhang mit IF einen Sinn macht und weil es IF nur beim Programmieren gibt. A < B und A > B sind mögliche Bedingungen. Es gibt noch zwei andere:

Zeichen Beispiel Bedeutung
= A=B Ist gleich
<> A <> B Ist ungleich

Manchmal soll bei IF nicht nur eine Bedingung überprüft werden, sondern derer zwei oder mehr. Beispiel: Es soll gesprungen werden, wenn A < B und A < C. Dazu gibt's den Operator AND:

IF A < B AND A < C THEN GOTO 220

Manchmal soll auch dann gesprungen, wenn nur eine von zwei Bedingungen zutrifft. Dann verknüpft man die beiden Bedingungen mit einem OR-Operator:

IF A < B OR A < C THEN GOTO 220

Der dritte Operator schliesslich bezieht sich nur auf eine Bedingung. Er kehrt die Bedingung um. Die IF-Anweisung wird genau dann ausgeführt, wenn die Bedingungen nicht zutrifft. Der Operator heisst NOT

IF NOT (A < B) THEN GOTO 220

Sie sehen, dass hier die Bedingung A < B in Klammern gesetzt wurde. An sich wäre das nicht notwendig gewesen. Aber Klammern sind nützlich, um sicherzustellen, was das Programm zuerst und was zuletzt prüfen soll. In diesem Fall prüft es zuerst (A < B) und dann dreht es das Ergebnis davon herum: NOT. Wenn wir drei Bedingungen bilden, wird das Verwenden von Klammern unverzichtbar.

Bei IF A < B OR A < C AND A < D THEN ... weiss das Programm nicht, ob zuerst die vorderen zwei Vergleiche geprüft und das OR-Ergebnis dann mit dem dritten Vergleich verknüpft werden soll oder andersherum: Zuerst die letzten beiden Bedingungen auswerten und nur dann, wenn diese beiden zutreffen, das Ergebnis mit der ersten Bedingung OR-verknüpfen. Schauen wir uns dazu ein Beispiel an:

310 INPUT A
320 INPUT B
330 INPUT C
340 IF (A < B OR A < C) AND (A < 2) THEN PRINT A+B+C
350 IF (A < B) OR (A < C AND A < 2) THEN PRINT A-B-C
360 IF A < > 99 THEN GOTO 310

Dieses Programm nimmt 3 Zahlen entgegen. Wenn die Zahlen der Bedingung von Zeile 340 entsprechen, dann wird die Summe ausgegeben. Wenn die Zahlen der Bedingung von Zeile 350 entsprechen, dann soll A-B-C ausgegeben werden. Im Normalfall werden dann die nächsten drei Zahlen entgegengenommen, es sei denn, in A ist die 99. Das erlaubt dem Benutzer, durch die Eingabe von 99 das Programm zu beenden.

Die beiden Bedingungen in 340 und 350 unterscheiden sich nur in der Klammersetzung.

Nun ein kleines Spiel: Finden Sie durch Probieren mal eine Zahlenkombination, für die nur EINE Zahl ausgegeben wird! Sie werden bald eine finden. Welche ist es, A+B+C oder A-B-C? Versuchen Sie, herauszufinden, warum die eine Bedingung zutrifft und die andere nicht!

Lösung: Bei A=4, B=7 und C=2 wird nur A-B-C ausgegeben.

Übung

Erweitern Sie das Mondlandungsspiel so, dass es die folgenden Bedingungen überprüft:

  • Ist S0>1000? Dann ist die Fähre in den Weltraum abgehauen ==> Spiel zuende und verloren.
  • Ist S0<0? Dann ist die Fähre auf dem Boden. Prüfe: Ist V0<=VMAX ==> Gewonnen, ansonsten zerschellt.
  • TR muss auf TS begrenzt werden. Wie kann man das mittels IF formulieren?