Kontrollierte Sprünge
Standard Pascal
Es sind keine speziellen Anweisungen vorgesehen.
Extended Pascal
Es gibt folgende Möglichkeiten:
Delphi
Zusätzlich zu den Prozeduren von Turbo Pascal gibt es:
Es gibt folgende zusätzlichen Befehle:
Extended Pascal schreibt die folgende Prozedur vor:
Es gibt folgende zusätzlichen Prozeduren gegenüber Extended Pascal:
Es gibt folgende zusätzlichen Prozeduren gegenüber Extended Pascal:
Direkte Sprungbefehle
Pascal erlaubt - entgegen den Regeln des strukturierten Programmierens -
die Ausführung direkter Sprungbefehle.
Dazu sind zwei syntaktische Konstruktionen erforderlich:
LABEL marke_1, ..., marke_n;marke ist eine vorzeichenlose ganze Zahl.
Gnu Pascal, Pascal++
marke darf ein Bezeichner sein, der aus Buchstaben und Ziffern gebildet wird.
Beispiel:
PROGRAM jump(OUTPUT);
LABEL negativ, positiv, ende;
VAR i : INTEGER;
BEGIN
FOR i:=-1 TO 1 DO BEGIN
Write('i = ', i:5);
IF i < 0 THEN
GOTO negativ
ELSE IF i > 0 THEN
GOTO positiv
ELSE
GOTO ende;
negativ :
Write('Negativ':10);
goto ende;
positiv :
Write('Positiv':10);
goto ende;
ende :
Writeln;
END;
END.
Die Deklaration einer Marke ist nur in Programm- und Unterprogrammblöcken
erlaubt, nicht jedoch in einfachen Blöcken. XL Pascal
Im VS-Modus darf marke ein Bezeichner sein, der aus Buchstaben und Ziffern gebildet wird.
Sprungbefehl

GOTO marke;Die Programmabarbeitung wird nicht mit dem nachfolgenden Befehl fortgesetzt, sondern mit dem Befehl, der durch marke markiert wird.
Sprungziel
marke: befehl;Das Sprungziel darf nur innerhalb des Gültigkeitsbereiches der Marke liegen.
Ferner gilt:
LABEL 1;
...
WHILE ( TRUE ) DO BEGIN
aktionsfolge_1;
IF ( bedingung ) THEN GOTO 1;
aktionsfolge_2;
END;
1: aktionsfolge_3;
...
Das obige Beispiel kann ohne GOTO realisiert werden: Standard Pascal, Extended Pascal
VAR go_on : BOOLEAN;
...
go_on := TRUE;
WHILE ( go_on ) DO BEGIN
aktionsfolge_1;
IF ( bedingung ) THEN
go_on := False
ELSE
aktionsfolge_2;
END;
aktionsfolge_3;
...
Borland Pascal 7.0, Delphi, Gnu Pascal, Pascal++
...
WHILE ( TRUE ) DO BEGIN
aktionsfolge_1;
IF ( bedingung ) THEN Break;
aktionsfolge_2;
END;
aktionsfolge_3;
...