Aus RN-Wissen.de
Wechseln zu: Navigation, Suche


Verzweigungen im Bascom

Was den Programmablauf betrifft, zeigen weder irgendein Controller noch Bascom eine besonders phantasievolles Verhalten: Es wird mit der (Programmspeicher-) Adresse 0000 begonnen, und dann wird mit aufsteigender Adresse ein Befehl nach dem anderen ausgeführt. Wenn dieser Adresszähler überläuft, springt er wieder auf null, und alles geht von wieder vorne los.
Das ist natürlich nicht das, was man sich unter einem "Programm" vorstellt. Bei einem Programm werden diese oder jene Dinge geprüft, und je nachdem wird entschieden, ob dieses oder jenes zu tun ist. Das heißt, im Programmablauf sollen bedingte Verzweigungen stattfinden, was technisch soviel heißt, daß bei Bedarf in den oben genannten Adress-Zähler einfach die Adresse reingeschrieben wird, wo es weitergehen soll. Das kann natürlich genausogut ein Sprung zurück sein, sprich, die letzten Befehle werden wiederholt. Der Fachmann bezeichnet letzteres als "Programmschleife" und der Über-Fachmann als "Iteration"

Bei den Schleifen gibt es einen großen Unterschied:

  • Soll die Bedingung VOR den enthaltenen Anweisungen geprüft werden,
  • oder sollen die Anweisungen auf jeden Fall mal gemacht werden und erst danach entschieden werden, ob das Ganze vielleicht wiederholt werden soll.

Zu dieser letzen Variante gehört der:

Verzweigung: Do-Loop

Struktur:

 Do

   ..Anweisung

 Loop [Until Bedingung]


Beispiel:

Do

 Print A                    ‘Gib Variable A aus
 Incr A                     ‘ Erhöhe Variable A um 1

Loop Until A=10            ‘ Wenn A = 10 , verlasse Schleife

Die Schleife geht so lang zwischen Do und Loop, bis die Bedingung die hinter Until kommt, richtig ist (= True). Die Schleife kann auch vorzeitig mit dem Befehl „ Exit Do“ verlassen werden.

Do-Loop Schleifen können ineinander geschachtelt werden.




Hier erfolgt die Bedingungsprüfung vorher:

Verzweigung: While-Wend

Struktur:

While  Bedingung

   ..Anweisung

Wend


Beispiel:

While  A < 10           ‘ Wenn A kleiner als 10 ist, dann springe in die Schleife
  Print A               ‘ Variable A ausgeben
  Incr  A               ‘ Variable A um 1 erhöen
Wend

Wenn die Bedingung hinter ‘While’ richtig ist(=True), dann springe in die Schleife. „Wend“ springt dann wieder zu While, um dort wieder zu überprüfen, ob die Bedingung True ist. Wenn sie True ist, dann Schleife wiederholen. Wenn nicht, dann setze Programm hinter „Wend“ fort.

While-Wend Schleifen können ineinander verschachtelt werden. Im Vergleich zur Do-Loop Schleife wird die While-Wend Schleife erst ausgeführt, wenn die Bedingung richtig ist.



Die klassische Entweder-oder-Konstruktion:

Verzweigung: If-Then-Else

Struktur:

If  Bedingung Then
  [Elseif  Bedingung  Then]
  [Else]
End if


Einfachstes Beispiel:

If  A= 10 Then  A=100

Wenn A=10 dann weise A den Wert 100 zu. Wenn die If-Then Anweisung in eine Zeile geht, dann kann man das so wie obiges Beispiel schreiben. Mann kann auch hinter dem Then, mehrere Anweisungen schreiben. Die müssen aber untereinander durch Doppelpunkt getrennt werden und noch immer in eine Zeile passen.


Für mehrere Anweisung schreibt man aber besser einen IF-Block:

IF-Block Beispiel:

If  A= 10 Then 
  A = 100
  Print A
  Print A
End if

Hier kann man dann unter “Then”, mehrere Anweisung schreiben. Muss diese aber dann mit „End if“ abschließen. (Das einrücken dient nur zum besserem lesen der Schleife, und trägt nichts zur Funktion bei.) Ein IF-Block, ist übersichtlicher und leichter lesbar.


Oft sind mehr als zwei Möglichkeiten zu bearbeiten

Verzweigung: select

Struktur:

SELECT CASE Variable
  CASE wert1:
  CASE wert2:
  CASE ELSE
END SELECT

Ist eine numerische Variable mit Inhalt [ 0 - nn] zu prüfen, gibt es auch

Verzweigung: ON

Struktur:

ON Variable GOTO Label-0, Label-2, ...... Label-n
End if

Es gibt natürlich auch Verzweigungen, die nicht an eine Bedingung geknüpft sind

Verzweigung: GOTO

Struktur:

GOTO Label-0

Und es können auch Befehle gewissermaßen "eingeschoben" werden

Verzweigung: GOSUB/RETURN

Struktur:

...Anweisung
GOSUB Label-0
...Anweisung

Label-0:
    ...Anweisung
    RETURN 

Autor

Siehe auch