Agenda für heute, 7. April, 2005 • Bedingte Programmausführung • Algorithmische Grundlagen • Vergleichsoperatoren, Wahrheitswerte und boolesche Variablen • if-then-else-Anweisung • Geschachtelte if-then-else-Anweisungen • Datentypen: string Steuerung des Programmablaufs: Verzweigung • Ein Programm ist eine Folge von Instruktionen, die alle möglichen Aktionen, notwendig für die Lösung eines Problems, ermöglichen. • Oft müssen jedoch, abhängig von den Daten, nicht alle Instruktionen ausgeführt werden. • Die meisten Programme müssen deshalb auf verschiedene "Pfade" von Instruktionsfolgen verzweigen können. • Ein Programm muss also a) entscheiden können ob verzweigt werden soll und b) wenn ja, wohin Programmieren und Problemlösen 2/14 © Institut für Computational Science, ETH Zürich • Bedingte Programmausführung • Algorithmische Grundlagen • Vergleichsoperatoren, Wahrheitswerte und boolesche Variablen • if-then-else-Anweisung • Geschachtelte if-then-else-Anweisungen • Datentypen: string Algorithmische Grundlagen read(x) wahr Operation b x≥0 write(sqrt(x)) Programmieren und Problemlösen Operation a falsch Fallunterscheidung Fehlermeldung 3/14 Operation c © Institut für Computational Science, ETH Zürich • Bedingte Programmausführung • Algorithmische Grundlagen • Vergleichsoperatoren, Wahrheitswerte und boolesche Variablen • if-then-else-Anweisung • Geschachtelte if-then-else-Anweisungen • Datentypen: string Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Fallunterscheidung Grundlage für eine Verzweigung ist ein Wahrheitswert (wahr, falsch). Das kann sein a) der Wahrheitswert selbst b) der Wert einer booleschen Variable c) der Wert eines booleschen Ausdrucks Programmieren und Problemlösen 4/14 true, false var b: boolean; x >= 0 © Institut für Computational Science, ETH Zürich Boolesche Ausdrücke Boolesche Konstanten true, false Ausdrücke mit Vergleichsoperatoren x >= 0 x <> y Ausdrücke mit booleschen Operanden und logischen Operatoren var a, b: boolean; a and (true or b) (x >= 0) and (a or b) Programmieren und Problemlösen 5/14 © Institut für Computational Science, ETH Zürich Boolesche Variablen brauchen nicht ausgewertet zu werden var b: boolean; Gegeben: b:= true Der Ausdruck (b = true) hat den Wahrheitswert "true" Der Ausdruck (b = false) hat den Wahrheitswert "false" Gegeben: b:= false Der Ausdruck (b = true) hat den Wahrheitswert "false" Der Ausdruck (b = false) hat den Wahrheitswert "true" Also können wir statt if b = true then einfach if b then schreiben und statt if b = false then einfach if not b then schreiben Programmieren und Problemlösen 6/14 © Institut für Computational Science, ETH Zürich • Bedingte Programmausführung • Algorithmische Grundlagen • Vergleichsoperatoren, Wahrheitswerte und boolesche Variablen • if-then-else-Anweisung • Geschachtelte if-then-else-Anweisungen • Datentypen: string Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Fallunterscheidung in Pascal if Bedingung then Anweisungsfolge if Bedingung then Anweisungsfolge1 else Anweisungsfolge2 Bedingung = boolescher Ausdruck Programmieren und Problemlösen 7/14 © Institut für Computational Science, ETH Zürich Beispiel program quadratwurzel (input, output); var x: real; begin read (x); if x >= 0 then write (sqrt (2)) else write (x,'hat keine Quadratwurzel'); end. Programmieren und Problemlösen 8/14 © Institut für Computational Science, ETH Zürich Zusammengesetzte Bedingungen Mit booleschen Operatoren können mehrere Bedingungen für die Fallunterscheidung berücksichtigt werden: if Bedingung1 and Bedingung2 or Bedingung3 then Anweisungsfolge1 else Anweisungsfolge2 Programmieren und Problemlösen 9/14 © Institut für Computational Science, ETH Zürich • Bedingte Programmausführung • Algorithmische Grundlagen • Vergleichsoperatoren, Wahrheitswerte und boolesche Variablen • if-then-else-Anweisung • Geschachtelte if-then-else-Anweisungen • Datentypen: string Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Zusammengesetzte if-then-else-Anweisungen Die then- und die else-Klausel einer if-Anweisung können beliebige Anweisungen enthalten, insbesondere auch if-Anweisungen: if Bedingung1 then if Bedingung2 then Anweisungsfolge1 else Anweisungsfolge2 else Anweisungsfolge3 Mit "geschachtelten" if-Anweisungen Können mehr als zwei Verzweigungen programmiert werden. Programmieren und Problemlösen 10/14 © Institut für Computational Science, ETH Zürich • Bedingte Programmausführung • Algorithmische Grundlagen • Vergleichsoperatoren, Wahrheitswerte und boolesche Variablen • if-then-else-Anweisung • Geschachtelte if-then-else-Anweisungen • Datentypen: string Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich Textverarbeitung var S: string; Um die Programmierung von Zeichenfolgen zu vereinfachen, stellt Pascal den Datentyp string zur Verfügung, mit speziellen, auf die Verarbeitung von Text zugeschnittenen Operationen. Variablen vom Typ string können bis zu 255 Zeichen enthalten. Es können aber kürzere Strings deklariert werden: var S1: string[10]; S2: string[135]; Programmieren und Problemlösen 11/14 © Institut für Computational Science, ETH Zürich Textverarbeitung Einer String-Variablen kann man ganze Zeichenketten zuweisen: S:= 'Geben Sie ein Datum ein: '; write(S) Eine String-Variable kann aber auch indiziert werden: var S: string; i: integer; Die Variable S[i] stellt das i-te Zeichen von S dar. Die Anweisung S[3]:= 'C' weist dem dritten Zeichen von S den Wert C zu. Programmieren und Problemlösen 12/14 © Institut für Computational Science, ETH Zürich Operationen mit Strings const ort = 'Zuerich'; var S1, S2: string; Zuweisungsanweisungen: S1:= 'ETH '; S2:= ort; Verketten von String-Operanden mit + : S1:= S1 + S2; S1 enthält jetzt den Text: ETH Zuerich Programmieren und Problemlösen 13/14 © Institut für Computational Science, ETH Zürich Operationen mit Strings var S: string[15]; S:= 'ETH Zuerich'; S 11 E T H Z u e r i c h 15 0 high(S) length(S) S[13] = undefinierter Wert S[16] = Kompilations- oder Laufzeitfehler Programmieren und Problemlösen 14/14 © Institut für Computational Science, ETH Zürich