Programmiersprache Pascal

Sprünge

Sprünge existieren in Programmiersprachen in zwei Grundformen: Einige moderne Programmiersprachen (Modula, Oberon, Java) lassen direkte Sprünge nicht zu, Pascal erlaubt sie dagegen wie die meisten älteren Sprachen.


Kontrollierte Sprünge

Standard Pascal

Es sind keine speziellen Anweisungen vorgesehen.

Extended Pascal

Turbo Pascal

Es gibt folgende Möglichkeiten:

Halt, Exit, Break und Continue werden als Prozeduren behandelt.

Delphi

Zusätzlich zu den Prozeduren von Turbo Pascal gibt es:

XL Pascal

Es gibt folgende zusätzlichen Befehle:

Darüberhinaus gibt es die folgende Prozedur: Extended Pascal

Extended Pascal schreibt die folgende Prozedur vor:

Gnu Pascal

Es gibt folgende zusätzlichen Prozeduren gegenüber Extended Pascal:

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:

Deklaration von Marken

  LABEL marke_1, ..., marke_n;
marke ist eine vorzeichenlose ganze Zahl.
Standard und Extende Pascal siehen für Marken Zahlen zwischen 0 und 9999 vor.

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:

Beispiel:
   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;
   ...


P. Böhme, 06.09.1996