3 KONTROLLSTRUKTUREN ALLGEMEINES

Ähnliche Dokumente
Einstieg in die Informatik mit Java

Schachtelung der 2. Variante (Bedingungs-Kaskade): if (B1) A1 else if (B2) A2 else if (B3) A3 else if (B4) A4 else A

Einstieg in die Informatik mit Java

Schleifen in C/C++/Java

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

Programmieren I. Kapitel 5. Kontrollfluss

3. Anweisungen und Kontrollstrukturen

C- Kurs 04 Anweisungen

S. d. I.: Programieren in C Folie 4-1. im Gegensatz zu Pascal gibt es in C kein Schlüsselwort "then"

Einführung in die Programmierung Wintersemester 2011/12

ModProg 15-16, Vorl. 5

4. Ablaufsteuerung (Kontrollstrukturen) 4.1 Anweisungen 4.2 Selektion (bedingte Anweisung) 4.3 Iteration 4.4 Flussdiagramm (Programmablaufplan)

Annehmende Schleife do while

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt

5. Elementare Befehle und Struktogramme

Programmieren in C/C++ und MATLAB

Praxisorientierte Einführung in C++ Lektion: "Kontrollstrukturen"

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Java: Eine kurze Einführung an Beispielen

Algorithmen & Programmierung. Steuerstrukturen im Detail Selektion und Iteration

Übungen zur Vorlesung Wissenschaftliches Rechnen I. Grundelemente von Java. Eine Anweisung. wird mit dem Wertzuweisungsoperator = geschrieben.

Aufgabe 1.90: Ein Geschäft gibt ihren Kunden unterschiedliche Rabatte. Schreiben ein Programm, das folgende Rabattklassen vorsieht:

Operatoren (1) Operatoren (2)

Java: Syntax-Grundlagen III

Kontrollstrukturen Blöcke / Schleifen / Bedingungen

Programmieren I. Kontrollstrukturen Heusch 8 Ratz Institut für Angewandte Informatik

Grundlagen der Programmierung

3. Grundanweisungen in Java

4. Ablaufsteuerung (Kontrollstrukturen)

Programmiertechnik Kontrollstrukturen

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

Programmierkurs Java

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Kontrollstrukturen

Java - Schleifen. Bedingung. wiederhole. Anweisung Anweisung Anweisung. Leibniz Universität IT Services Anja Aue

Wo sind wir? Kontrollstrukturen

Kontrollstrukturen. Wo sind wir? Anweisung mit Label. Block. Beispiel. Deklarationsanweisung

Grundlagen der Programmierung Teil1 Einheit III Okt. 2010

2.4 Schleifen. Schleifen unterscheiden sich hinsichtlich des Zeitpunktes der Prüfung der Abbruchbedingung:

Javakurs für Anfänger

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

Übersicht Programmablaufsteuerung

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Blöcke. Beispiel: Variablen in Blöcken

Präzedenz von Operatoren

Javakurs für Anfänger

Grundlagen der Programmierung Teil1 Einheit III Okt. 2009

Elementare Konzepte von

Funktionales C++ zum Ersten

Einführung in die Informatik 1

Programmieren I. Kontrollstrukturen Heusch 8 Ratz Institut für Angewandte Informatik

Informatik 1 ( ) D-MAVT F2010. Logik, Schleifen. Yves Brise Übungsstunde 4

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Tag 3 Repetitorium Informatik (Java)

EINI LW/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 14/15

Unterlagen. CPP-Uebungen-08/

RO-Tutorien 3 / 6 / 12

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

9 Anweisungen und Kontrollstrukturen

BKTM - Programmieren leicht gemacht.

Objektorientierte Programmierung

Fallunterscheidung: if-statement

6. Iteration (Schleifenanweisungen)

Kapitel 5. Programmierkurs. Kontrollstrukturen. Arten von Kontrollstrukturen. Kontrollstrukturen Die if-anweisung Die switch-anweisung

2.5 Programmstrukturen Entscheidung / Alternative

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn

Informationsverarbeitung

Algorithmen & Programmierung. Ausdrücke & Operatoren (1)

Einstieg in die Informatik mit Java

Softwareentwicklung 1. Übungsaufgabe 4 Kontrollstrukturen

Bei der Und-Verknüpfung müssen beide Ausdrücke wahr sein, dass der gesamte Ausdruck wahr wird. a=1; b=2; a=1; b=3; else. endif

Kapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte

Programmieren in C / C++ Grundlagen C 4

Einführung in die Programmierung

Programmieren I. Kontrollstrukturen. Heusch 8 Ratz Institut für Angewandte Informatik

Gliederung Programmiersprachen. Programmiersprachen Einführung in C. Kontrollstrukturen. Verzweigung mit IF. Beispiel: Zahlenklassifizieren

2. Programmierung in C

1 Aufgaben 1.1 Objektorientiert: ("extended-hamster") Sammel-Hamster

Grundlagen von C# - 2

Die Programmiersprache C Eine Einführung

Klassen und Objekte. Klassen sind Vorlagen für Objekte. Objekte haben. Attribute. Konstruktoren. Methoden. Merkblatt

C++ - Einführung in die Programmiersprache Schleifen

12 == 12 true 12 == 21 false 4 === 7 true 4 === "vier" false 4 === 4.0 false 12!= 13 true 12!== 12 false 12!== 12.0 true. 1 < 3 true 3 < 1 false

C.3 Funktionen und Prozeduren

String-Konkatenation

Algorithmen und Datenstrukturen 1. EINLEITUNG. Algorithmen und Datenstrukturen - Ma5hias Thimm 1

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Programmieren I. Martin Schultheiß. Hochschule Darmstadt Wintersemester 2010/2011

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

Eine kleine Befehlssammlung für Java Teil1

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Entscheidungen. Linearer vs. verzweigter Programmfluss (Flussdiagramm) Linearer vs. verzweigter Programmfluss: Pseudo-Code

1.8 Kontrollstrukturen 73. default : ziffer = 0; if (ziffer > 0) { cout << "Ziffer = " << ziffer; else { cout << "keine römische Ziffer!

Imperative Programmierung in Java. Algorithmen und Datenstrukturen II 1

JAVA-Datentypen und deren Wertebereich

1 Bedingungen und der Typ bool. Informatik I: Einführung in die Programmierung 5. Bedingungen, bedingte Ausführung und Schleifen. Vergleichsoperatoren

Programmierkurs Python I

Übersicht. C Ein-/Ausgabe und Kontrollanweisungen. I/O-Funktionen aus stdio. printf() Ein-/Ausgabe. Kontrollanweisungen.

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

Transkript:

3 KONTROLLSTRUKTUREN ALLGEMEINES Leitideen: Die Syntax der Kontrollstrukturen in C++ soll möglichst wenige reservierte Worte verwenden, daher werden Bedingungen geklammert und mehrere abhängige Anweisungen gegebenfalls zu einer Blockanweisung zusammengefasst. Die Laufanweisung (for) kann auf die einfachste Wiederholungsanweisung (while) zurückgeführt werden. Wegen ihrer einprägsamen Syntax ist sie beliebter als die elementarere Anweisung. Sprünge (goto) sollten im allgemeinen vermieden werden, spezielle Sprunganweisungen ( break, continue) sind aber nützlich, um Wiederholungsanweisungen zu beenden oder unmittelbar fortzusetzen. Der Auswahlanweisung (switch) ist ihre potentielle Implementierung mittels Sprunganweisungen deutlich anzusehen.

3 KONTROLLSTRUKTUREN - THEMENÜBERSICHT if-anweisung Ergänzungen while-anweisung Ergänzungen do-while-anweisung Anmerkungen und Beispiel (ggt) for-anweisung Ergänzungen, Kommaausdruck, Beispiel (Binomialkoeffizient) Sprunganweisungen (goto, break, continue, return) switch-anweisung typische Verwendung

if-anweisung - Ergänzungen Unterschied zu anderen Programmiersprachen: Die Bedingung braucht kein logischer Ausdruck zu sein, zulässig ist auch ein arithmetischer Ausdruck [oder ein Zeigerausdruck], weil dieser automatisch in bool umgewandelt wird. Kein then, statt dessen Klammerung des Bedingungsausdrucks. Die Pascalregel Kein Strichpunkt vor else gilt nicht! In Pascal trennen Strichpunkte Anweisungen. In C++ schließen Strichpunkte bestimmte Anweisungen ab, allerdings nicht die meisten Kontrollstrukturen. Bsp. if (a>b) x=a; else x=b; okay if (a>b) {x=a;} else {x=b;} okay if (a>b) {x=a;}; else {x=b;}; falsch

if-anweisung - Ergänzungen II Problem: Syntaktische Zweideutigkeit bei if (B1) if (B2) A1 else A2 if (B1) if (B2) A1 else A2 oder if (B1) if (B2) A1 else A2 Regel: Der else-zweig wird der letzten vorangehenden if-anweisung ohne else zugeordnet. Die Einrückungen im linken Beispiel entsprechen der syntaktischen Bedeutung. Einrückungen haben selbstverständlich keinen Einfluss auf syntaktische Struktur des Programms. Sie dienen allein der Erhöhung der Verständlichkeit eines Programms für einen menschlichen Leser, und sind daher sehr zu empfehlen.?

if-anweisung - Ergänzungen III Empfehlung: Vermeidung potentieller Fehlinterpretationen durch geeignete Klammerung der abhängigen Anweisungen if (B1) { if (B2) A1 else A2 } bzw. if (B1) { if (B2) A1 } else A2

if-anweisung - Ergänzungen IV else-if-kaskaden Seien B1,...,BN Bedingungen, die nacheinander überprüft werden sollen, bis eine davon erfüllt ist. Dann soll jeweils die entsprechende der Anweisungen A1,...,AN ausgeführt werden. Optional: Falls keine davon zutrifft, soll die Anweisung A ausgeführt werden. if (B1) A1 else if (B2) A2 : else if (BN) AN // Optional else A Bei else-if-kaskaden handelt es sich trotz der Schreibweise um geschachtelte if-else-anweisungen, nicht wie in anderen Programmiersprachen um eine eigenständige Kontrollstruktur. Empfehlung: Zur Vermeidung von Fehlinterpretationen A1,...,AN mit geschweiften Klammern umgeben.

while-anweisung - Ergänzungen Unterschied zu anderen Programmiersprachen: Die Bedingung braucht kein logischer Ausdruck zu sein, zulässig ist auch ein arithmetischer Ausdruck [oder ein Zeigerausdruck], weil dieser automatisch in bool umgewandelt wird. Kein do, statt dessen Klammerung des Bedingungsausdrucks. Iterationsverfahren: Geg.: I R, φ : I I, Startwert x 0 I, x i+1 = φ(x i ) (i N 0 ). Häufig: Abbruch, falls x i und x i+1 nahe beieinander liegen. Für die Durchführung reichen 2 Variablen (Umspeicherungstechnik).

while-anweisung - Ergänzungen II Bsp.: x 0 = 0, x i+1 = a + x i (i N 0 ) (a 0 fest). Abbruchkrit.: x i+1 x i ε oder i > itmax, d.h. Wdhl. solange wie x i+1 x i > ε und i itmax. Programmfragment: i=0; xa=0; xn=sqrt(a); // xa: x 0 xn: x 1 while (abs(xn-xa)>eps && i<=itmax) { // xa: x i xn: x i+1 // Richtig fuer i = 0 xa=xn; // xa: x i+1 xn=sqrt(a+xa); // xn: x i+2 ++i; // xa: x i xn: x i+1 }

do-while-anweisung - Anmerkungen Unterschied zur while-anweisung: Überprüfung der Bedingung erst nach Ausführung der abhängigen Anweisung. Daher: Abhängige Anweisung wird mindestens einmal ausgeführt. do-while-anweisung endet mit einem Strichpunkt! Eher seltene Verwendung der do-while-anweisung. Caveat while(... ); {... } Strichpunkt falsch! do {... } while(... ); Strichpunkt notwendig!

Euklidischer Algorithmus - ggt(a,b) Verfahren a 0 = a, b 0 = b, (a, b } N) a i = b i q i + r i mit 0 r i < b i (i = 0, 1, 2,..., I bis r a i+1 = b i, b i+1 = r I = 0) i Es gilt ggt(a, b) = a I+1 wegen ggt(a i, b i ) = ggt(b i, r i ) = ggt(a i+1, b i+1 ), also ggt(a, b) = ggt(a 0, b 0 ) =... = ggt(a I+1, b }{{} I+1 ) = a I+1 0 Programmfragment do { r = a%b; a = b; b = r; } while (r!=0) ;

for-anweisung - Ergänzungen Die for-anweisung in C++ ist viel allgemeiner als die Laufanweisungen in anderen Programmiersprachen. for (Ausdruck1 }{{} ; } Ausdruck2 {{} ; } Ausdruck3 {{} ) Anweisung init condition update ist im wesentlichen äquivalent zu Ausdruck1; while (Ausdruck2) { Anweisung Ausdruck3; } Bsp.: Berechnung von a n (n N) pot=1; for (i=1; i<=n; ++i) pot*=a; ˆ= pot=1; i=1; while (i<=n) { pot*=a; ++i; }

for-anweisung - Ergänzungen II Im vorigen Beispiel würde man allerdings eher schreiben: for (i=0; i<n; ++i) statt for (i=1; i<=n; ++i) Grund: Indizes eines Vektors mit n Komponenten laufen von 0,..., n 1. Bsp.: vector<double> a(n); // Definiert Vektor a mit Komponenten // a[0],...,a[n-1] for (i=0; i<n; ++i) a[i]=sqrt(i*i+1); // a i = i 2 + 1 (i = 0,..., N 1) An Stelle von Ausdruck1; kann auch eine einfache Vereinbarung stehen. Ihr Gültigkeitsbereich erstreckt sich nur bis zum Ende der for-anweisung Bsp.: pot=1; for (int i=0; i<n; ++i) pot*=a; Vergleichbare Syntaxerweiterungen existieren für die Bedingungen der if-anweisung und der while-anweisung, erscheinen aber wenig nützlich.

Komma-Ausdruck Wirkung: Zusammenfassung mehrerer Ausdrücke zu einem einzigen Ausdruck. Ermöglicht die Ausführung mehrerer Seiteneffekte in einem Ausdruck, z.b. im Initialisierungs- oder Updateteil der for-anweisung. Wert des Kommaausdrucks ist der Wert des rechten Operanden. Die Auswertung erfolgt von links nach rechts (d.h. der linke Operand wird vor dem rechten Operanden ausgewertet) Der Kommaoperator ist linksassoziativ. Durch Komma getrennte Funktionsargumente oder Variablendeklarationen bilden keine Kommaausdrücke. Bsp.: y = (x=3,x+2); // x=3; y=5; Caveat pi=3,14159; // pi=3!! [Zuweisungsoperator bindet stärker als der Kommaoperator]

Binomialkoeffizient ( ) n k = n(n 1) (n k + 1) 1 2 k (k, n N) Schrittweise Berechnung ( ) n = n k 1 n 1 n 2 n k + 1 2 3 k Durchführung in ganzzahliger Arithmetik möglich, denn: ( ) n(n 1) (n i + 1) n, 1 2 i i + 1 } {{ } ( n i) n i i + 1 = weil Binomialkoeffizienten ganzzahlig sind Programmfragment int n,k,b,i; cin >> n >> k; for (i=1,b=1; i<=k; --n,++i) b=b*n/i;

Sprunganweisungen - Ergänzungen goto-anweisung Sprünge sind nur innerhalb einer Funktion möglich. Vereinbarung von Sprungmarken nicht erforderlich; Voranstellen von z.b. marke: vor eine Anweisung definiert die Sprungmarke marke. Sprungmarken sind syntaktisch Namen. Sprungmarken bilden einen eigenen Namensraum. goto sparsam verwenden (Übersichtlichkeit!) Stattdessen: Wiederholungsanweisungen, bedingte Anweisungen und Auswahlanweisungen vorziehen. Herausspringen aus bzw. unmittelbares Fortsetzen von Wiederholungsanweisungen vorzugsweise mit breakbzw. continue-anweisung. Beispiel für eine sinnvolle goto-anweisung auf Infobl. 6/3. Java: kein goto!

Sprunganweisungen - Ergänzungen II break-anweisung Nur innerhalb von Wiederholungs- und Auswahlanweisungen möglich. Heraussprung erfolgt aus der am engsten umschließenden Wiederholungsanweisung (bzw. Auswahlanweisung). Beispiel für typische Verwendung auf Infobl. 6/3. Herausspringen aus mehreren geschachtelten Wiederholungsanweisungen (bzw. Auswahlanweisungen) ist mit break nicht möglich. continue-anweisung Nur innerhalb von Wiederholungsanweisungen möglich. Setzt die engste umschließende Wiederholungsanweisung unmittelbar fort. (Wirkung siehe Infobl. 6/4.) Wird erheblich seltener als die break-anweisung verwendet, ist dennoch gelegentlich nützlich.

Sprunganweisungen - Ergänzungen III return-anweisung Bewirkt Beendigung der aufgerufenen Funktion und Rücksprung in die aufrufende Funktion. Der Wert des Ausdruck nach return wird Funktionswert. Daher fehlt er genau dann, wenn die Funktion den Ergebnistyp void hat. In main bewirkt return die Beendigung des Hauptprogr. An das aufrufende Programm (z.b. Kommandointerpreter, Shell) wird der Wert des return-ausdrucks übergeben. (Konvention: 0 Erfolg, > 0 Fehlerfall) In main hat return n im wesentlichen dieselbe Wirkung wie exit(n). Daher findet man oft: return(n) statt return n (Anmerkung: #include <cstdlib> bei Verwendung von exit erforderlich)

switch-anweisung - typische Verwendung switch(ausdruck){ case Konst 1 : Anweisungen 1 break; case Konst 2 : Anweisungen 2 break; : default: Anweisungen break; } case Konst wirkt als Sprungmarke, zu der verzweigt wird, wenn der Ausdruck den Wert Konst annimmt. Bei einem vergessenen break wird deshalb die nächste Anweisung ausgeführt. Das letzte break ist nicht notwendig, aber üblich, weil dann problemlos weitere case-anweisungen angefügt werden können. Mehrfache case-marken sind möglich (genauso wie mehrfache Sprungmarken) Der Ausdruck muss ganzzahlig sein (Zeichenketten sind nicht möglich).