• Keine Ergebnisse gefunden

2 Einführung in BASIC++

2.4 Selektive Programmierung

Oft ist es erforderlich, auf bestimmte Ereignisse zu reagieren. Mit Variablen ha-ben Sie die Möglichkeit, Zustände und Werte zu speichern. Sie können aber auch Variablen nach ihrem Zustand oder Wert abfragen. Wie Sie später feststellen wer-den, ist die Abfrage von Variablen ein ungemein wichtiger Bestandteil von Pro-grammen. Das Ziel ist es, den Code flexibel zu gestalten, sodass er auf bestimmte Ereignisse reagieren kann. Das passende Werkzeug hierfür sind die Befehle der selektiven Programmierung.

2.4.1 IF-Bedingung

Der wohl einfachste aber auch wichtigste Befehl in diesem Bereich ist der IF...THEN-Befehl. Sicher werden Sie diesen Befehl schon in anderen Program-miersprachen kennengelernt haben. Andernfalls liegt der Herleitung des Befehls recht nahe.

2 Einführung in BASIC++

33

PRINT „a ist kleiner 5“

ELSE

PRINT „a ist größer/gleich 5“

END IF

Beispiel 2.4:Beispiel des IF...THEN-Schlüsselworts

Wie Sie im Beispiel 2.4 sehen, kann der IF-Befehl sowohl einzeilig als auch als Block verwendet werden. Optional ist jedoch bei beiden Schreibweisen der ELSE-Zweig, der nur dann ausgeführt wird, wenn der Ausdruck (hier: „a < 5“) nicht er-füllt ist. Im Beispiel wird der ELSE-Zweig jedoch nie ausgeführt werden, da die Variable a mit dem Wert zwei belegt wurde.

Die einzeilige Schreibweise bietet sich bei einfachen IF-Abfragen an, wo nur ein Befehl ausgeführt werden soll. Wollen Sie aber mehrere Befehle ausführen oder mehrere IF-Abfragen verschachteln, müssen Sie die Block-Schreibweise verwen-den.

Analog zu CCBasic können Sie einzelne Ausdrücke zwischen IF und THEN mit Operatoren wie AND, OR und XOR verknüpfen. Achten Sie dabei auf die korrekte Klammerung der Ausdrücke.

2.4.2 SELECT-CASE-Anweisung

Beim IF-Befehl unterscheiden Sie zwei Fälle: Ausdruck erfüllt oder Ausdruck nicht erfüllt. Wenn Sie aber mehrere Fälle unterscheiden wollen, können Sie SE-LECT CASEverwenden. Dieser Befehl ist immer in der Block-Schreibweise anzu-wenden. Ähnlich wie beim IF-Befehl gibt es auch hier einen ELSE-Zweig, der nur ausgeführt wird, wenn keiner der anderen Zweige erfüllt war.

2.4 Selektive Programmierung

34

Beispiel 2.5:Selektive Programmierung mit SELECT CASE

Nach der Abarbeitung eines CASE-Zweigs springt das Programm zum Ende des SELECT-CASE-Blocks. In einen CASE-Zweig können Sie keine Anweisung, eine oder mehr als eine Anweisung schreiben. Natürlich können Sie in jeden Zweig auch einen weiteren SELECT-CASE- oder IF-Block einfügen.

Sie werden feststellen, dass Sie besonders von IF-Abfragen regen Gebrauch ma-chen werden. Es kann durchaus vorkommen, dass Sie eine ganze Reihe von IF-Abfragen miteinander verschachteln. Hier müssen Sie jedoch besonders darauf achten, dass Sie zu jedem IF-Block auch ein passendes END IF am Ende des Blocks schreiben. Andernfalls meldet der Kompiler einen Fehler.

2.5 Schleifen

Sich wiederholende Programmteile immer wieder neu zu programmieren ist zeitaufwendig, unübersichtlich und platzverschwendend. Da liegt es nahe, diese Codeabschnitte durch den Controller wiederholen zu lassen.

Auf diesem Prinzip bauen Schleifen auf, wobei eine Schleife im Allgemeinen aus drei Teilen besteht: einer Startbedingung, dem auszuführenden Programmblock und einer Endbedingung. Mit der ZählerschleifeFOR, derDO- und der While-Schleife verfügt BASIC++ über drei verschiedene While-Schleifentypen.

2 Einführung in BASIC++

35

Abb. 2.4:Schematische Darstellung einer Programmschleife

2.5.1 DO-Schleife

Die DO-Schleife ist die vom System her einfachere Schleifenart. Ein Programm-block wird so oft wiederholt ausgeführt, bis eine bestimmte Bedingung erfüllt ist.

Das Beispiel 2.6 zeigt eine einfache DO-Schleife. Dabei soll die Schleife so lange einen Text an die serielle Schnittstelle senden, bis die Bitvariableiden WertON (wahr, bzw.TRUE) hat. Die Abbruchbedingung einer DO-Schleife wird gemäß dem Beispiel mit demLOOP-Schlüsselwort gebildet.

’ **********************************

’ BASIC++ Beispiele

’ Beispiel einer DO-Schleife

’ **********************************

DEFINE i AS PORT[1]

DO

PRINT „Port 1 ist OFF.“

LOOP UNTIL i = ON

Beispiel 2.6:Eine DO-Schleife wartet, bis der Digitalport 1 ON ist.

Die DO-Schleife bietet sich immer dann an, wenn Sie in Ihrem Programm auf be-stimmte Ereignisse warten wollen. Beispielsweise kann der Programmablauf mit einfachen DO-Schleifen so verändert werden, dass die Abarbeitung des Codes durch Benutzereingaben über ein Terminal-Programm oder eine Tastaturmatrix gesteuert wird.

2.5 Schleifen

36

Für einfache Zählvorgänge dagegen sollten Sie aber besser nicht die DO-Schleife verwenden. Hierfür ist die For-Schleife viel handlicher. Diese Schleife ist nämlich als Zählerschleife aufgebaut und nimmt Ihnen die Arbeit ab, einer Variablen einen Wert vorher zuzuweisen und sie bei jedem Schleifendurchgang zu erhöhen.

2.5.2 FOR-Schleife

Zählvorgänge sind dadurch viel einfacher mit der For-Schleife zu lösen. Ein Nach-teil dieses Schleifentyps ist aber, dass er viel unflexibeler als die DO-Schleife ist.

’ **********************************

’ BASIC++ Beispiele

’ Beispiel einer For-Schleife

’ **********************************

DEFINE i AS BYTE FOR i = 1 TO 4

PRINT i NEXT i

Beispiel 2.7:Eine For-Schleife zählt bis vier.

Die For-Schleife erzwingt, wie man im Beispiel 2.7 erkennen kann, eine Startbe-dingung (i = 1) und eine AbbruchbeStartbe-dingung (i = 4). Die DO-Schleife dagegen kommt zumindest ohne eine Startbedingung aus. Aus diesem Grund kommt es oft zu sogenanntenEndlosschleifen. Der Controller kommt nie aus der Schleife heraus, da die Abbruchbedingung nie erfüllt wird. Dies kann im Verlauf des Pro-gramms natürlich zu unabsehbaren Folgen führen. Achten Sie also stets auf Ihre Start- und Abbruchbedingung.

2.5.3 WHILE-Schleife

Die WHILE-Schleife ist ein Pendant zur Schleife. Im Unterschied zur DO-Schleife findet die Überprüfung der Terminationsbedingung allerdings am An-fang der Schleife statt.

2 Einführung in BASIC++

37

’ Warte, bis Taste wieder losgelassen

’ wurde

WHILE (i = OFF) WEND

END IF LOOP

Beispiel 2.8:Eine WHILE-Schleife wartet, bis der Digitalport nach einem Tastendruck 1 OFF ist.