Claus SchönleberHitchhacker´s Guide To PASCAL [Vol. 1] |
||
|
[ Start | Beispielprogramme Download | Home ] | |
InhaltCompilerProgrammieren Datentypen, Variablen, Standardfunktionen Logik Verzweigung, Strukturierung Schleifen Felder (Arrays) Verteiler: CASE Zeichenketten (Strings) Textdateien Module (Prozeduren, Funktionen) Anhang (Operatoren, abgeleitete Funktionen)
|
Der Verteiler: CASEWer 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: 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.CASE <ausdruck> OF <constante>{,<constante>} : <block>; {<constante>{,<constante>} : <block>;} {ELSE <block>;} END; Natürlich auch hier ein Beispiel: Da wir uns aber daran gewöhnen wollen, nicht nur mit Zahlen umzugehen, hier noch ein kleines Beispiel mit einem anderen Typ: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. 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.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. 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.
|
|
|
(c) 2001 Schoenleber.com |