Programmiersprache Pascal

Fallauswahl

Struktogramm

Die alternativ auszuführenden Aktionen hängen von der Auswertung eines einzigen Ausdrucks ab. Kriterium ist der Wert, den dieser Ausdruck liefert.
Die Fallauswahl ist eine spezielle Form der Mehrfachverzweigung. Die für sie in vielen Programmiersprachen vorgesehene spezielle Notationsform ist jedoch einfacher und übersichtlicher: Alle Bedingungen der Mehrfachverzweigung lassen sich auf die Auswertung nur eines Ausdrucks zurückführen.
Bei der Fallauswahl sehen jedoch viele Programmiersprachen Restriktionen hinsichtlich der Art des auswertbaren Ausdrucks vor.

Pseudocode

   SELECT ausdruck
     CASE fall_1: anweisungsfolge_1
     CASE fall_2: anweisungsfolge_2
     ...
     ELSE anweisungsfolge_n
   END SELECT
Pascal

  CASE ausdruck OF
    fall_1: anweisung_1;      { einzelne Anweisung  oder  Verbundanweisung }
    ...
    fall_n: anweisung_n;      { einzelne Anweisung  oder  Verbundanweisung }
  END;
ausdruck muß einen Wert mit ordinalem Datentyp besitzen, z.B. INTEGER, CHAR, Aufzählungsdatentyp.
fall_i ist eine Konstante mit dem gleichen Datentyp wie ausdruck, es wird erwartet, daß ausdruck einen der Werte fall_1, ..., fall_n annimmt.

Für fall_i darf nicht nur ein einzelne Konstante stehen. Es gibt insgesamt drei Möglichkeiten der Angabe:

Beispiel:
  TYPE wtag = (montag, dienstag, mittwoch, donnerstag, freitag,
       samstag, sonntag);
  VAR wochentag : wtag;

  CASE wochentag OF
    montag .. freitag: arbeiten;
    samstag: feiern;
    sonntag: ausruhen;
  END;
Extended Pascal

  CASE ausdruck OF
    fall_1: anweisung_1;
    fall_2: anweisung_2;
    ...
    OTHERWISE anweisung_n; 
  END;
ausdruck muß einen Wert mit ordinalem Datentyp liefern.

Turbo Pascal

  CASE ausdruck OF
    fall_1: anweisung_1;
    fall_2: anweisung_2;
    ...
    ELSE anweisung_n; 
  END;
ausdruck muß einen Wert mit ordinalem Datentyp liefern.

Beispiel (Turbo Pascal):

  TYPE wtag = (montag, dienstag, mittwoch, donnerstag, freitag, 
               samstag, sonntag);
  VAR wochentag : wtag;

  CASE wochentag OF
    samstag: feiern;
    sonntag: ausruhen;
    ELSE arbeiten;
  END;
Das obige Beispiel ließe sich auch als Mehrfachverzweigung notieren:
  IF wochentag = samstag THEN
    feiern
  ELSE IF wochentag = sonntag THEN
    ausruhen
  ELSE
    arbeiten;
Während die CASE-Anweisung voraussetzt, daß wochentag einen ordinalen Datentyp besitzt, kann innerhalb der IF-THEN-ELSE-Konstruktion wochentag z.B. auch eine Zeichenkette sein.

Die IF-THEN-ELSE-Konstruktion ist allgemeiner einsetzbar. In Spezialfällen ist die CASE-Konstruktion jedoch alternativ verwendbar und führt dann meist zu effektiveren und besser lesbaren Programmen.


Achtung:

Standard Pascal sieht keinen Alternativ-Zweig vor !
Der Alternativ-Zweig wird immer dann ausgeführt, wenn keiner der explizit angegebenen Fälle zutrifft.

Extended Pascal erlaubt einen Alternativ-Zweig, der durch das Schlüsselwort OTHERWISE eingeleitet wird !

  CASE wochentag OF
    samstag: feiern;
    sonntag: ausruhen;
    OTHERWISE arbeiten;
  END;
Auch Turbo Pascal und Delphi sehen den Alternativ-Zweig vor, jedoch mit anderer Syntax als in Extended Pascal: Es wird das Schlüsselwort ELSE verwendet.



P. Böhme, 06.09.1996