BASIC-Tutorial
IF-Anweisung, SELECT/CASE-Anweisung
6.1. Einleitung: Kontrollstrukturen in BASIC
Sie haben gelernt, den Benutzer Eingaben machen zu lassen, doch auswerten konnten Sie sie bisher noch nicht. Was hier fehlt, sind sog. Kontrollstrukturen. Sie überprüfen einen bestimmten Ausdruck auf deren Wahrheit (trifft die Bedingung zu oder nicht) und führen je nach Ergebnis verschiedene Programmierzeilen aus. Zu den Kontrollstrukturen gehören auch sog. Schleifen. Diese dienen dazu, Anweisungen kontrolliert oft zu wiederholen. Auch hier sind wieder Bedingungen wichtig. Beispiel: Addiere solange den Wert einer Variable und gib ihn danach aus, bis die Bedingung Variablenwert = 100 erfüllt ist. Also: +1 addieren, Wert ausgeben, +1 addieren, Wert ausgeben, ... bis so oft +1 addiert wurde, dass der Wert der Variable, 100 beträgt. Schleifen folgen in Kapitel 7.
6.2. IF-Anweisung
Eine IF-Anweisung führt einen Anweisungsblock (dieser besteht aus einzelnen Programmierzeilen) nur unter einer bestimmten Bedingung aus. Nehmen wir einmal an, es sollte ein Anweisungsblock nur dann ausgeführt werden, wenn zwei eingegebene Zahlen gleich sind. Also gibt der Benutzer zwei Zahlen ein, angenommen 2 und 2. Danach zeigt das Programm Zahlen gleich auf dem Bildschirm an. Die Ursache dafür ist, dass im Anweisungsblock die Zeile PRINT "Zahlen gleich" steht. Wären die eingegeben Zahlen ungleich gewesen, wäre die Zeile nicht ausgeführt worden.
Nehmen wir noch einmal das Beispiel des Euroumrechners her. Ich habe den Quellcode so geschrieben, dass nur eine Umrechnung von Schilling (bzw. im zweiten Beispiel DM) nach Euro möglich ist und nicht in umgekehrter Richtung (Euro nach Schilling bzw. DM). Um die Umrechnung in beide Richtungen möglich zu machen, benötigen wir eine Kontrollanweisung, um die Eingabe des Benutzers (oder einen Shell-Parameter) auswerten zu können. Der Benutzer soll dann wählen können, welche Art von Umrechnung er durchführen möchte.
Tippen Sie das nächste Beispiel ab und lassen Sie es laufen:
CLS PRINT "Geben Sie eine Zahl ein: "; INPUT zahl IF zahl = 2 THEN PRINT "Der Wert der Eingabe betraegt 2."
Lautet Ihre Eingabe nun 2, so zeigt das Programm Der Wert der Eingabe beträgt 2. an. Der Grund dafür liegt in der letzten Anweisung. Schauen wir uns gleich die Syntax der IF-Anweisung im einfachsten Fall (dem gerade gezeigten) an:
IF Bedingung THEN Anweisung
Die Bedingung ist hierbei ein boolescher Ausdruck. Ein boolescher Ausdruck ist entweder wahr (true) oder falsch (false). Betrachten wir das obere Beispiel: Hier steht als Bedingung zahl = 2. Dies können wir als Ganzes betrachtet als den Ausdruck bezeichnen. Ist der Wert der Variable zahl tatsächlich 2, so ist die Bedingung erfüllt (true). Wäre jedoch der Wert der Variable zahl ein anderer (in dem Fall egal ob kleiner oder größer), so wäre die Bedinung nicht erfüllt und der Anwendungsblock würde nicht ausgeführt werden.
Bitte bedenken Sie, dass sich die IF-Anweisung nicht auf den restlichen Quellcode auswirkt. Die Anweisungen, die nach der IF-Anweisung folgen, werden auf jeden Fall ausgeführt. Egal, ob die Bedingung der IF-Anweisung erfüllt ist oder nicht.
Wollen Sie mehrere als nur eine Anweisung ausführen lassen, müssen Sie folgendermaßen vorgehen:
IF Bedingung THEN
Anweisung 1
Anweisung 2
Anweisung 3
...
END IF
Es muss nach den Anweisungen lediglich ein END IF folgen.
Hängt man an die bisher beschriebene IF-Anweisung zusätzlich einen ELSE-Block an, so erreicht man, dass ein anderer Anweisungsblock ausgeführt wird, sollte die Bedingung nicht erfüllt sein. Ändern wir das obere Beispiel folgendermaßen ab:
CLS PRINT "Geben Sie eine Zahl ein: "; INPUT zahl IF zahl = 2 THEN PRINT "Der Wert der Eingabe betraegt 2." ELSE PRINT "Der Wert der Eingabe betraegt NICHT 2!" END IF
Je nachdem ob Sie 2 oder etwas anderes eingeben, werden unterschiedliche Texte angezeigt. Es gibt mehrere Möglichkeiten, den ELSE-Block anzuhängen. Die minimalste Version:
IF Bedingung THEN Anweisung ELSE Andere Anweisung
Wird die Bedingung erfüllt, so wird die Anweisung (oben so bezeichnet) ausgeführt, andernfalls Andere Anweisung. Beachten Sie, dass alles in einer Zeile steht! Wollen Sie alles auf mehrere Zeilen aufteilen (was ich empfehle), so ist folgende Form (also ein END IF am Ende!) nötig:
IF Bedingung THEN
Anweisung
ELSE
Andere Anweisung
END IF
Sie können natürlich auch mehrere Zeilen angeben, wie hier:
IF Bedingung THEN
Anweisung 1
Anweisung 2
Anweisung 3
...
ELSE
Andere Anweisung 1
Andere Anweisung 2
Andere Anweisung 3
...
END IF
In BASIC gibt es neben dem IF- und dem ELSE- auch noch einen ELSEIF-Zweig. Diese Möglichkeit gibt es in vielen anderen Programmiersprachen nicht:
IF Bedingung 1 THEN
Anweisung (wenn Bedingung 1 erfüllt ist)
ELSEIF Bedingung 2 THEN
Anweisung (wenn Bedingung 2 erfüllt ist)
ELSE
Andere Anweisung
END IF
Der Einfachheit halber habe ich jeweils nur eine Anweisung angegeben (natürlich beliebig viele möglich). Der Vorgang läuft nun so ab: Ist die Bedingung 1 (oben als solche bezeichnet) erfüllt, wird der erste Anweisungsblock ausgeführt. Danach werden die Zeilen ausgeführt, die unter END IF folgen. Ist die Bedingung 1 allerdings nicht erfüllt, wird die Bedingung 2 überprüft. Wenn diese erfüllt ist, wird der zweite Anweisungsblock ausgeführt. Ist auch Bedingung 2 nicht erfüllt, wird der Anweisungsblock nach ELSE ausgeführt.
6.3. SELECT/CASE-Anweisung
Als eine Art erweiterte IF-Anweisung könnte man die CASE-Anweisung bezeichnen, deren Syntax folgendermaßen aussieht:
SELECT CASE Testausdruck (Selektorvariable)
CASE Ausdruck 1
Anweisung 1
CASE Ausdruck 2
Anweisung 2
CASE Ausdruck 3
Anweisung 3
...
END SELECT
Statt je einer Anweisung können auch mehrere angegeben werden, genauso dürfen beliebig viele CASE-Zweige vorhanden sein. Doch wozu benötigen wir nun die SELECT/CASE-Anweisung? Mit SELECT/CASE lassen sich Mehrfachverzweigungen (Fallunterscheidungen) definieren. Statt unzähliger einzelner IF-Anweisungen reicht in vielen Fällen ein SELECT/CASE-Konstrukt.
Es wird zunächst überprüft, ob die sog. Selektorvariable (der Testausdruck) mit dem 1. Fall übereinstimmt. Wenn ja, werden die zugehörigen Anweisungen ausgeführt. Gibt es keine Übereinstimmung, wird die Überprüfung beim nächsten CASE-Zweig fortgesetzt. Beispiel:
CLS INPUT "Geben Sie eine Zahl von 1 bis 10 ein: ", eingabe SELECT CASE eingabe CASE 1 PRINT "Ihre Eingabe war eins." CASE 2 PRINT "Ihre Eingabe war zwei." CASE 3,4 PRINT "Der Wert Ihrer Eingabe war entweder drei oder vier." CASE 5 TO 10 PRINT "Die eingegebene Zahl ist im Bereich von fuenf bis zehn (inklusive Grenzen)." END SELECT
Der Ablauft sieht nun so aus: Ist der Wert der Eingabe 1, so wird Ihre Eingabe war eins. angezeigt, ist der Wert 2, dann Ihre Eingabe war zwei.. Interessant ist der nächste Fall: Wenn eingabe 3 oder 4 ist, wird Der Wert Ihrer Eingabe war entweder drei oder vier. angezeigt. Der nächste Fall bezeichnet einen ganzen Bereich, der sich von 5 (5 mit eingeschlossen; inklusive) bis 10 (inklusive) erstreckt. Liegt eingabe im angegebenen Bereich, wird Die eingegebene Zahl ist im Bereich von fuenf bis zehn (inklusive Grenzen). angezeigt.
Was jedoch, wenn Sie eine andere Zahl (0 oder größer als 10) oder gar ein nicht-numerisches Zeichen eingeben? In einem solchen Fall würde gar nichts angezeigt werden (weil kein zutreffender Zweig gefunden wurde). Dem nächsten Beispiel wurde ein CASE ELSE-Block hinzugefügt, dessen Anweisungen ausgeführt werden, wenn nichts anderes zutrifft.
CLS INPUT "Geben Sie eine Zahl von 1 bis 10 ein: ", eingabe SELECT CASE eingabe CASE 1 PRINT "Ihre Eingabe war eins." CASE 2 PRINT "Ihre Eingabe war zwei." CASE 3,4 PRINT "Der Wert Ihrer Eingabe war entweder drei oder vier." CASE 5 TO 10 PRINT "Die eingegebene Zahl ist im Bereich von fuenf bis zehn (inklusive Grenzen)." CASE ELSE PRINT "Verzeihung, haben Sie sich vertippt?" END SELECT
Vorheriges Kapitel | Nächstes Kapitel |