Programmablauf
case of
Eine Case-Anweisung besteht aus zwei Teilen, dem Anweisungskopf mit dem Selektor (case Ausdruck of
) und dem Verzweigungsteil, in dem die einzelnen Werte behandelt werden (select Wert:
). In Abhängigkeit von dem Wert des Selektors springt der Interpreter zu den verschiedenen Verzweigungen. Die letzte Verzweigung kann ein else
sein, sie wird immer ausgeführt wenn kein voriger Selektor passte. Die Case-Anweisung wird mit end case
abgeschlossen.
Sie können eine Case Anweisung z.B. auch verwenden, um abzufragen, welche Schaltfläche der Benutzer bei Verwendung des „UserButton“-Befehls angeklickt hat.
case UserButtons of select "1x": TextOut(Text: "Eins"); select "2x": TextOut(Text: "Zwei"); ... end case;
Anmerkung
Im Gegensatz zu anderen Sprachen, erlaubt Winguard die Eingabe von Ausdrücken in den Selektoren. Es wird jedoch immer nur der erste passende Zweig ausgeführt.
if then else
Mit diesem Befehl werden andere Befehle abhängig von einer Bedingung ausgeführt oder nicht ausgeführt. Die Befehlszeilen unter if Bedingung then
werden ausgeführt, wenn die Bedingung zutrifft, andernfalls wird der Bereich unterhalb von else
ausgeführt. Die Zeile else
ist optional und kann gelöscht werden, wenn keine Befehle ausgeführt werden sollen, wenn die Bedingung nicht zutrifft. end if
beendet die Verzweigung.
Eine Bedingung ist erfüllt, wenn sie einen wahrer logischer Ausdruck, ein nicht-leerer String oder eine Zahl ungleich 0 ist.
if True then // immer erfüllt. if "" then // nie erfüllt. if messwert > 10 then // Wenn der in 'Messwert' gespeicherte Wert größer als // 10 ist, ist die Bedingung erfüllt if b = 1 then // Die Bedingung ist erfüllt, wenn 'b' den Wert 1 hat if b - 1 then // Die Bedingung ist erfüllt, wenn 'b' einen Wert // ungleich 1 hat
Steht zwischen if … then
und end if
die Anweisung else
, so werden alle Zeilen über else
ausgeführt, falls die Bedingung erfüllt ist, alle darunterstehenden falls die Bedingung nicht erfüllt ist.
if messwert > 10 then TextOut(Text: "Messwert ist größer als 10!"); else TextOut(Text: "Messwert ist zu klein!"); end if
Schleifen
Es werden drei verschiedene Arten von Schleifen unterstützt: For-Schleife, While-Do-Schleife und Repeat-Until-Schleife.
For-Schleife
Eine For-Schleife wird verwendet um den Wert einer Zahlenvariablen hochzuzählen. Die Variable muss zuvor deklariert worden sein. Eine For-Schleife hat die Form for Variable := Startwert to Abbruchwert do
, der auszuführende Block wird mit end for
abgeschlossen.
Bei Ausführung wird der Variablen der Startwert zugewiesen. Dieser wird solange um eins erhöht, bis der Abbruchwert erreicht ist. Vor jeder Erhöhung wird der Schleifenrumpf oder Block ausgeführt. Der Wert der Schleifenvariable ist nach dem Durchlauf gleich Startwert + 1
.
for i := 1 to 10 do TextOut(Text: i); end for
Das Beispiel gibt zeilenweise die Zahlen 1 bis 10 aus. Der Wert von i
ist nach dem Durchlauf 11.
While-Do-Schleife
Bei While-Do-Schleifen wird der Schleifenrumpf solange ausgeführt, solange eine gegebene Bedingung wahr (Nichtnull) ist. Sie wird in Winguard durch folgendes Konstrukt eingeleitet while Bedingung do
und beendet mit end while
.
while a < b do a := a + 1 b := b / 2 end while; // erhöhe a um 1, teile b durch 2 bis a >= b ist while True do end while; // diese Schleife wird nicht verlassen (Programm hängt!) while False do end while; // diese Schleife wird nicht durchlaufen
Repeat-Until-Schleife
Repeat-Until-Schleifen werden mindestens einmal durchlaufen. Die Abbruchbedingung steht am Ende der Schleife, die Schleife wird solange ausgeführt, solange diese Bedingung nach falsch auswertet. Der Schleifenkopf besteht aus einem einfachen repeat
, das Schleifenende enthält die Abbruchbedingung: until Bedingung;
.
repeat a := a + 1 b := b / 2 until a >= b; // diese Schleife ist nicht identisch mit der obigen // while-Schleife!
goto
Dieses Modul erzeugt bedingte oder unbedingte Programmsprünge. Im oberen Feld wird das Label eingegeben, zu dem gesprungen werden soll. Ist die Checkbox Bedingung angeklickt, wird der Sprung nur ausgeführt, wenn die eingegebene Bedingung zutrifft.
In den meisten Fällen sind die anderen Kontrollstrukturen besser lesbar.
Label
Label sind so genannte Sprungmarken. Damit der Interpreter von einer Skriptzeile zu einer anderen springen kann, muss diese durch ein Label benannt werden (vgl. goto).
HALT
Mit diesem Befehl wird die Ausführung des Prüfprogrammes beendet und der Testlauf ordnungsgemäß abgeschlossen. Die Zeilen in der Unit FINALIZATION werden allerdings noch ausgeführt, um Hardware ggf. zurückzusetzen.
Pause
Dieser Befehl fügt Wartezeiten in den Testlauf ein. Wenn Sie die Option visible aktivieren, erscheint während der Verzögerung ein Countdown in der Mitte des Bildschirms.
Kommentarzeile
Dieser Befehl hat keinen Effekt auf die Ausführung des Programms. Er ermöglicht Ihnen das Einfügen von Kommentaren in Ihren Quelltext, damit dieser besser verständlich ist.