BASIC Referenz‎ > ‎

Verzweigungen

Unter Verzweigungen versteht man die Unterbrechnung des linearen Programflusses und das Fortsetzen der Programausführung an einer anderen Stelle. Es gibt die unbedingten Verzweigungen GOTO und GOSUB, und die bedingte Verzweigung IF.

SPRUNGMARKE (LABEL)

Sprungmarken werden entweder als Zahl oder als "String" gefolgt von einem Doppelpunkt angegeben.

1964:
...
"Hell":
...
GOTO 1964
...
GOTO "Hell"

GOTO

GOTO "label"

Springt zum angegeben Sprungziel "label", d.h. die Programmausführung wird nach der Sprungmarke fortgesetzt, wobei diese Sprungziel auch als Variable oder Berechnungsausdruck angegeben werden kann, dadurch ist es möglich das Sprungziel zu berechnen:

choice = 3
GOTO 100+choice
END
101:
PRINT "ZIEL 101"
END
102:
PRINT "ZIEL 102"
END
103:
PRINT "ZIEL 103"
END

ACHTUNG! Das Sprungziel wird nur einmalig berechnet und dieses Ergebnis bis zum Ende des Skripts gespeichert, d.h. ein innerhalb des Skripts veränderliches Sprungziel ist derzeit nicht möglich (gilt auch für GOSUB).


FOR i = 1 TO 4
GOSUB i * 100 ! wird nur beim 1. Aufruf berechnet (Ergebnis=100) und bis zum Ende des Skripts gespeichert
NEXT i
END

100: ! wird 4x aufgerufen
TEXT2 0 , 1 , "i=1"
RETURN

200: ! wird nie aufgerufen
TEXT2 0 , 2 , "i=2"
RETURN

300: ! wird nie aufgerufen
TEXT2 0 , 3 , "i=3"
RETURN

400: ! wird nie aufgerufen
TEXT2 0 , 4 , "i=4"
RETURN

Dieser Codeabschnitt ruft nicht wie erwartet, die Subroutinen 100, 200, 300 und 400 auf, sondern, da das Sprungziel nur einmal berechnet wird, 4x die Subroutine 100.

GOSUB

GOSUB "label"

Springt zum angegebene Sprungziel "label", legt aber den Absprungpunkt auf den Returnstack. Mit RETURN kann man an die aufrufende Stelle zurückspringen. Durch die Verwendung eines Stacks können GOSUB-Befehle verschachtelt werden. Wie bei GOTO ist es auch bei GOSUB möglich das Sprungziel als Variable oder Berechnungsausdruck anzugeben.


profil = "I100"
GOSUB profil
END

"I100":
PRINT "PROFIL I100"
RETURN
"I110":
PRINT "PROFIL I110"
RETURN
"I120":
PRINT "PROFIL I120"
RETURN

RETURN

Nimmt die oberste Rücksprungadresse vom Returnstack und sprint an den Aufrufpunkt zurück. Ab hier ist der Absprungpunkt des vorangegangenen GOSUB-Befehls die oberste Adresse auf dem Returnstack.

GOSUB "Setup"
GOSUB "Main"
GOSUB "CleanUp"
END

"Setup":
...
RETURN

"Main":
...
GOSUB "SubRoutine"
...
RETURN

"CleanUp":
...
RETURN

"SubRoutine":
...
RETURN

IF ... THEN ... ELSE ... ENDIF

Die Programausführung ist abhängig von condition, ist condition wahr wird der THEN-Block aufgeführt, sonst der ELSE-Block.

IF condition THEN
...
ELSE
...
ENDIF

Für das bedingte  Verzweigen im Programmablauf gibt es 2 Spezialfälle:

IF condition GOTO target

IF condition GOSUB target

Vergleichsoperatoren