vor

Objektorientierte Programmierung mit Object-Pascal

weiter

4.9.2 Kontrollstrukturen
Mehrfachauswahl CASE OF

Verschachtelte IF-THEN-ELSE-Entscheidungen kann man oftmals umgehen und so das Programm einfacher strukturieren. Wenn auf verschiedene Werte einer Variablen verschieden reagiert werden soll, kann man mit Object-Pascal bequemer als durch mehrfaches IF-Abfragen einfach die CASE-Anweisung nutzen.

Am einfachsten lässt sich diese Anweisung erklären, wenn die Variable (der Selektor) verschiedene konstante Werte einnimmt. Diese Werte müssen ordinal sein, also abzählbar, d. h. vom Typ Integer oder Char - niemals Real.

Solche einfache CASE-Anweisung sieht folgendermaßen aus:

CASE Selektor OF
  Auswahlmarke1 : Anweisung1;
  Auswahlmarke2 : Anweisung2;
  Auswahlmarke3 : Anweisung3;
  Auswahlmarke4 : Anweisung4;
  ...
  Auswahlmarken : Anweisungn;
  ELSE Anweisung;
END;   //von CASE


Die CASE-Anweisung wird durch ein END; abgeschlossen, für das es kein BEGIN gab. Deshalb kann man durch einen Kommentar darauf hinweisen, dass hier das Ende der CASE-Anweisung gemeint ist. Der ELSE-Zweig ist optional, d. h. wenn er fehlt, wird mit der Anweisung fortgefahren, die der CASE-Anweisung folgt. Die Anweisungen können selbstverständlich auch Blöcke sein, die dann mit BEGIN und END eingeschlossen werden müssen.

Ganz deutlich wird die Syntax, wenn man sich folgende Zeilen ansieht, mit denen jeder Schulnote ein Worturteil zugeordnet wird.

var Note: Integer;
    Wertung: String;

CASE Note OF
  1 : Wertung := 'Sehr gut';
  2 : Wertung := 'Gut';
  3 : Wertung := 'Befriedigend';
  4 : Wertung := 'Ausreichend';
  5 : Wertung := 'Mangelhaft';
  6 : Wertung := 'Ungenügend';
  ELSE Wertung := 'Diesen Notenwert gibt es nicht.';
END;   //von CASE


Der Selektor muss kein konstanter Wert sein. Es sind auch mehrere Werte möglich, die dann einzeln durch Komma getrennt aufgezählt werden oder die einen Bereich darstellen, von dem der erste und der letzte Wert - durch zwei Punkte verbunden - angegeben werden.

var Punkte: Integer;
    Wertung: String;

CASE Punkte OF
  0 : Wertung := 'Ungenügend';
  1,2,3 : Wertung := 'Mangelhaft';
  4,5,6 : Wertung := 'Ausreichend';
  7..9 : Wertung := 'Befriedigend';
  10..12 : Wertung := 'Gut';
  13..15 : Wertung := 'Sehr gut';
  ELSE Wertung := 'Diese Punktzahl gibt es nicht.';
END;   //von CASE


Hier noch ein Beispiel für Char als Selektor-Typ:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
Var Spruch: String;
begin

CASE Key OF
  'A'..'Z' : Spruch := 'Das war ein großer Buchstabe.';
  'a'..'z' : Spruch := 'Das war ein kleiner Buchstabe.';
  '0'..'9' : Spruch := 'Sie haben eine Ziffer eingegeben.';
  ELSE Spruch := 'Sie haben weder einen Buchstaben noch eine Ziffer eingegeben.';
END;   //von CASE

Label1.Caption := Spruch;

end;


vor

Inhaltsverzeichnis

weiter