Claus Schönleber

Hitchhacker´s Guide To PASCAL  [Vol. 1]

 [ zurück | weiter ]
   [ Start | Beispielprogramme Download | Home ]

Inhalt

Compiler
Programmieren
Datentypen,
Variablen,
Standardfunktionen
Logik
Verzweigung,
Strukturierung
Schleifen
Felder (Arrays)
Verteiler: CASE
Zeichenketten
(Strings)
Textdateien
Module
(Prozeduren,
Funktionen)
Anhang
(Operatoren,
abgeleitete
Funktionen)
 
 
 

 

 

Der Verteiler: CASE 

Wer bei der Besprechung der Verzweigung IF..THEN die Stirn gerunzelt hat und mit dem Gedanken, daß es doch Problemlösungen mit Entscheidungen gäbe, die mehr als zwei Möglichkeiten zulassen, gespielt hat, der war auf der richtigen Spur. Selbstverständlich kann man solche mehrwertigen Verzweigungen auch mit aufwendigen IF..THEN-Konstruktionen lösen; da es in PASCAL aber um die Übersicht geht, gibt es auch hier einen besseren Ansatz. Die Verteilerstruktur CASE erlaubt, so etwas wie eine Weiche mit einem Eingang und beliebig vielen Ausgängen zu erzeugen. Dabei ist der Grundsatz: Genau eine der angebotenen Möglichkeiten kann zutreffen. 

Allgemeine Form: 

CASE <ausdruck> OF 
  <constante>{,<constante>} : <block>; 
  {<constante>{,<constante>} : <block>;} 
{ELSE 
  <block>;}
END; 
Der <ausdruck>, meist steht hier nur eine Variable, kann jeden beliebigen einfachen Typ haben. Strukturierte Typen sind hier nicht zugelassen. <constante> ist eine Konstante aus dem zugelassenen Bereich des Typs von <ausdruck>; es kann auch ein Teilbereich angegeben werden. Will man sowohl Konstanten als auch Teilbereiche für einen Fall zusammenfassen, so werden alle Angaben durch Kommata getrennt. In <block> steht dann die Anweisung oder ein ganzer Block von Anweidungen, die ausgeführt werden, wenn der <ausdruck> nach der Auswertung <constante> ergibt. Tritt keiner der aufgeführten Fälle ein, wird der ELSE-Zweig, wenn vorhanden, ausgeführt. Der ELSE- Zweig kann weggelassen werden. 

Natürlich auch hier ein Beispiel: 

PROGRAM case_beispiel; 
  VAR temp : integer; 
BEGIN 
  write ('Bitte Temperaturwert in Grad Celsius eingeben: '); 
  readln (temp); 
  CASE temp OF 
    -30 .. -10 : writeln ('Isolierungskleidung und Gesichtsschutz noetig'); 
     -9 ..   0 : writeln ('Winterkleidung noetig'); 
      1 ..  10 : writeln ('Warme Kleidung erforderlich'); 
     11 ..  20 : writeln ('Leichte Jacke');
     21 ..  30 : writeln ('Badesachen!'); 
     30 ..  40 : writeln ('Schatten suchen!'); 
  ELSE 
    writeln ('Unertraegliche Temperatur. Zu Hause bleiben.'); 
  END; 
END. 
Da wir uns aber daran gewöhnen wollen, nicht nur mit Zahlen umzugehen, hier noch ein kleines Beispiel mit einem anderen Typ: 
PROGRAM case_beispiel2; 
  VAR c : char; 
BEGIN 
  write ('Bitte Buchstaben eingeben: '); 
  readln (c); 
  CASE c OF 
    'A'..'Z'    : writeln ('Großbuchstabe'); 
    'a'..'z'    : writeln ('Kleinbuchstabe'); 
    '0'..'9'    : writeln ('Ziffer'); 
    '.','?','!' : writeln ('Satzzeichen'); 
    '@'         : writeln ('Klammeraffe'); 
    #0..#31     : writeln ('Steuerzeichen'); 
  ELSE 
    writeln ('Sonderzeichen oder Graphikzeichen'); 
  END; 
END. 
Hier sehen Sie auch gleich eine Besonderheit, die Turbo PASCAL betrifft. Wenn ein Zeichen aus dem Zeichen nicht druckbar ist, dann kann man den dezimalen ASCII-Wert mit vorgestelltem "#" angeben, statt das Zeichen in Hochkommata anzugeben. 

Natürlich können auch CASE-Anweisungen immer geschachtelt werden. Da hinter jedem "Ast" ein vollständiger Block zulässig ist, darf auch wieder eine CASE-Anweisung folgen. Das ergibt interessante Anwendungsmöglichkeiten, zum Beispiel in der Simulation von Parallelverarbeitung. 

 

 [ zurück | weiter ]
   (c) 2001 Schoenleber.com