Einführung in die Programmierung mit C++ Florian Painke Lehrstuhl für Technische Informatik Kirchhoff-Institut für Physik Universität Heidelberg 29. September – 2. Oktober 2008 Lektion 5 Kontrollstrukturen Programmverlauf und Anweisungen I Bisher streng monotoner Verlauf I Ermöglicht nur feste Anzahl von Berechnungen A Definition B Ein strukturiertes Programm besteht aus einer Menge von Anweisungen C I Weitere Anweisungen nötig um Programme flexibler zu gestalten Anweisungen I Leere Anweisung ; I Einfache Anweisungen (was wir bisher kennen) I I I Definition von Variablen Einfache Anweisungen mit Operatoren Beenden von main() I Zusammengesetzte Anweisungen (Anweisungsblock) { Anweisung A; Anweisung B; ... } I Kontrollstrukturen (brechen Monotonie auf) I I Bedingungen ermöglichen Alternativen Schleifen ermöglichen Wiederholungen Bedingte Anweisung i f ( A u s d r u c k x ) Anweisung A ; I Ausführung von Anweisung A, wenn Ausdruck x wahr I C++ interpretiert jeden Wert ungleich 0 als „wahr“ x A Bedingte Anweisung mit Alternative i f ( A u s d r u c k x ) Anweisung A ; e l s e Anweisung B ; B I Ausführung von Anweisung A, wenn Ausdruck x wahr I Ausführung von Anweisung B, wenn Ausdruck x falsch x A Schachtelung bedingter Anweisungen i f ( Ausdruck x ) i f ( Ausdruck y ) Anweisung A ; else Anweisung B ; Anweisung C ; i f ( Ausdruck x ) i f ( Ausdruck y ) Anweisung A ; else Anweisung B ; Anweisung C ; I Gefahr von Mißverständnissen der Zugehörigkeit von else I Verwendung von geschweiften Klammern schafft Klarheit Mehrfachverzweigung switch ( Ausdruck x ) { case K o n s t a n t e 1 : Anweisung A−1; . . . break ; case K o n s t a n t e 2 : Anweisung B−1; . . . break ; default : Anweisung X−1; . . . } x 1 A 2 B * X Mehrfachverzweigung I Auswertung von Ausdruck x I Ergibt sich Ausdruck x zu einer der Konstanten eines case-Zweiges, dann Abarbeitung der darauf folgenden Anweisungen bis zur nächsten break-Anweisung I Steht zwischen zwei case-Zweigen kein break, dann wird Abarbeitung einfach fortgesetzt! case-Zweige immer mit break beenden! I Wird kein passender case-Zweig gefunden, dann wird default-Zweig gewählt falls vorhanden I default-Zweig ist optional Einfache kopfgesteuerte Schleife while ( Ausdruck x ) Anweisung A ; I So lange Ausdruck x wahr ist, wird Anweisung A ausgeführt I Wenn Anweisung A nicht dazu führt, dass Ausdruck x irgendwann falsch wird, klassische Endlosschleife x A Einfache fußgesteuerte Schleife do Anweisung A while ( Ausdruck x ) ; A I Anweisung A wird mindestens einmal ausgeführt I So lange Ausdruck x wahr ist, wird Anweisung A wiederholt ausgeführt x Flexible Schleife f o r ( Anweisung I ; Ausdruck x ; Anweisung E ) Anweisung A ; I x I Zunächst wird Anweisung I (Initialisierung) ausgeführt I So lange Ausdruck x wahr ist, werdenAnweisung A und Anweisung E (Inkrement) ausgeführt A E Frühzeitiges Fortsetzen while ( Ausdruck x ) { Anweisung A ; i f ( Ausdruck y ) continue ; Anweisung B ; } x A I Anweisung A wird in jedem Schleifendurchlauf ausgeführt y I Falls Ausdruck y wahr ist, wird Schleife frühzeitig fortgesetzt B I Anweisung B wird nur ausgeführt, wenn Ausdruck y falsch ist I Bei for-Schleife wird Inkrement in jedem Fall ausgeführt Frühzeitiges Beenden while ( Ausdruck x ) { Anweisung A ; i f ( A u s d r u c k y ) break ; Anweisung B ; } x A I Anweisung A wird in jedem Schleifendurchlauf ausgeführt y I Falls Ausdruck y wahr ist wird, Schleife frühzeitig beendet B I Anweisung B wird nur ausgeführt, wenn Ausdruck y falsch ist