Grundlagen der Programmierung in C++ Kontrollstrukturen



Ähnliche Dokumente
Grundlagen der Programmierung in C++ Kontrollstrukturen

// s = geom. Reihe 1 + q + q^2 + q^3 + + q^n. // float q; unsigned int n; float s = 0;

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

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

Kontrollfluss. man Verzweigungen und Sprünge. o bisher linear (von oben nach unten) o Für interessante Programme braucht

6. Kontrollanweisungen II

5. Kontrollanweisungen II

Programmierung I Von Python nach C++

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

Grundlagen der Programmierung in C Funktionen

Einführung in die Programmierung Wintersemester 2011/12

Programmiertechnik Kontrollstrukturen

6. Kontrollanweisungen II

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

Einführung in die Programmierung

6. Kontrollanweisungen II

Modellierung und Programmierung 1

Vorlesung Programmieren

if ( Logischer Operator ) { } else { Anweisungen false

Vorlesung Programmieren

Schleifen in C/C++/Java

Angewandte Mathematik und Programmierung

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

Schleifen in C/C++/Java

EINI LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Tagesprogramm

Grundlagen der Programmierung

C- Kurs 04 Anweisungen

3. Anweisungen und Kontrollstrukturen

Elementare Konzepte von

C-Propädeutikum Anweisungen

Webbasierte Programmierung

Gedächtnis. Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet. Zugriff.

Anweisungen und Kontrollstrukturen

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

Wenn... dann... if (condition) statement. if (kontostand < 0) System.out.println("Oops..."); false. condition. true. statement

Kompaktkurs Einführung in die Programmierung. 4. Kontrollstrukturen

Java für Anfänger Teil 4: Anweisungen. Programmierkurs Manfred Jackel

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

Grundlagen der Programmierung

Abschnitt 5. Grundlagen der funktionalen & imperativen Programmierung

Herzlich willkommen!

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

EINI WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Entscheidungen. INE1, Montag M. Thaler, Office TG ZHAW, M. Thaler, K. Rege, G. Burkert

Einfache Bedingte Ausführung

Grundlagen der Informatik 4. Kontrollstrukturen I

4.4 Imperative Algorithmen Verzweigung und Iteration

Grundlagen der Programmierung Teil1 Einheit III Okt. 2010

Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

4. Ablaufsteuerung (Kontrollstrukturen)

Grundlagen der Programmierung

Rechnungen, wo kein sinnvoller Wert rauskommt Bsp.: 1/0, *0, sqrt(-1.0) Beispiel: Quadratische Gleichungen

Wiederholungen / Schleifen

Objektorientierte Programmierung

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

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

Einführung in die Programmierung II. 3. Kontrollstrukturen

Typ-Konvertierung. Bit-Operatoren (wie in C++) Vergleichsoperatoren (wie in C++) Beispiel: Zufallszahlen. Wie in C++, mit anderer Syntax: In C++:

Kapitel 4. Kontrollstrukturen

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

Anweisungen und Kontrollstrukturen

Algorithmen und Datenstrukturen

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

Grundlagen der Informatik 5. Kontrollstrukturen II

4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen

INE1 Wiederholungen while, do...while, for

Wo sind wir? Kontrollstrukturen

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

Exercise 6. Compound Types and Control Flow. Informatik I für D-MAVT. M. Gross, ETH Zürich, 2017

Einstieg in die Informatik mit Java

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

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

Tag 3 Repetitorium Informatik (Java)

Kontrollstrukturen Blöcke / Schleifen / Bedingungen

Algorithmen zur Datenanalyse in C++

Java: Eine kurze Einführung an Beispielen

Short circuit logic bei Boole'schen Ausdrücken. Typ-Konvertierung. Bit-Operatoren (wie in C++) Vergleichsoperatoren (wie in C++)

Programmieren I. Kapitel 5. Kontrollfluss

Programmiersprachen Einführung in C

Schreibweise y = static_cast<float>(x);

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

Java Anweisungen und Ablaufsteuerung

3. Kontrollstrukturen Grundlagen der Programmierung 1 (Java)

EINI LogWing/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 17/18

WS2017/ Oktober 2017

Kapitel 4: Anweisungen und Kontrollstrukturen

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

Einstieg in die Informatik mit Java

2.5 Programmstrukturen Entscheidung / Alternative

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

Transkript:

Grundlagen der Programmierung in C++ Kontrollstrukturen Wintersemester 2005/2006 G. Zachmann Clausthal University, Germany zach@in.tu-clausthal.de Block Keine Kontrollstruktur im eigentlichen Sinn Dient zur Zusammenfassung mehrerer Anweisungen Bsp.: a = 1; b = a*a; Überall, wo eine Anweisung stehen kann, kann auch ein Block stehen Wird fast ausschließlich für Kontrollstrukturen gebraucht Kann man schachteln ("innerer" und "äußerer" Block) G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Kontrollstrukturen, 2 1

If Einfachstes Konstrukt zum Kontrollfluß Definition: oder if ( boolean-expr ) statement; expr true statement false if ( boolean-expr ) statement1; statement2; true expr false Mehr braucht man eigtl. nicht statement1 statement2 G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Kontrollstrukturen, 3 Beliebte Fallen: if ( i = 1 ) // this is always true!!... if ( i == 0 ) if ( a < 0 )... // will be executed only... // if a < 0!! G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Kontrollstrukturen, 4 2

Geschachtelte If's Anweisung(en) innerhalb if oder können wieder if's enthalten "Inneres" und "äußeres" If Folge von Tests: if ( punkte >= 90 ) note = 'A'; if ( punkte >= 85 ) note = 'B'; if ( punkte >= 70 ) note = 'C'; if ( punkte >= 50 ) note = 'D'; note = 'F'; G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Kontrollstrukturen, 5 Switch Definition: switch ( selector ) case value1 : statement-list 1 ; break; case value2 : statement-list 2 ; break; default: statement-list n selector = value 1 Selektor berechnen selector = value 2 default statement 1 statement 2 statement n Selector muß Integer-Expression sein G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Kontrollstrukturen, 6 3

Achtung: break nicht vergessen! Sonst "fall-through" Ist ein "Feature" (ich behaupte: Bug) Zusammenfassung von Cases: case 1: case 2: G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Kontrollstrukturen, 7 Beispiel: // int month, numdays; switch ( month ) case 1: case 3: case 5: case 7: case 8: case 10: case 12: numdays = 31; break; case 4: case 6: case 9: case 11: numdays = 30; break; case 2: if ( ((year % 4 == 0) &&!(year % 100 == 0)) (year % 400 == 0) ) numdays = 29; numdays = 28; break; default: fprintf( stderr, "BUG: month = %d!\n", month ); G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Kontrollstrukturen, 8 4

Schleifen Life is just one damn thing after another. -- Mark Twain Life isn t just one damn thing after another it s the same damn thing over and over and over again. -- Edna St. Vincent Millay G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Kontrollstrukturen, 9 While-Schleife Definition (Syntax & Semantik): while ( condition ) statement ; condition true statement(s); false Beispiele: // int b int a = 1; while ( a < b ) a *= 2; G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Kontrollstrukturen, 10 5

Beispiel: Quadratwurzeln (Newton-Raphson) Ziel: Berechnung der Quadratwurzel einer Floatingpoint-Zahl c Initialisiere t = c Ersetze t durch den Mittelwert von t und c/t Wiederhole dies, bis t=c/t c = 2.0; t = c; while ( t c/t > 0.00000000001 ) t = ( c/t + t ) / 2.0; printf("%f\n", t ); G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Kontrollstrukturen, 11 For-Schleife While genügt eigtl., for ist aber praktisch Definition: for ( init-expr; test-expr; post-expr ) statement ; init Test-expr muß bool liefern In den expr's ist alles erlaubt, was in normalen Ausdrücken erlaubt ist: Operatoren Zuweisungen Variablen-Deklarationen test true statement(s) post-expr false G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Kontrollstrukturen, 13 6

Beispiele: // float q; unsigned int n; float s = 0; // s = geom. Reihe 1 + q + q^2 + q^3 + + q^n float qq = 1; for ( uint i = 0; i < n; i ++ ) s += qq; qq *= q; Loop body (Schleifenrumpf) Heißt "Schleifenvariable" (loop variable) G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Kontrollstrukturen, 14 For-Deklaration kann auch etwas komplexer sein: for ( uint i = 0, j = 17; i ++, j ++ )... G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Kontrollstrukturen, 15 7

Scope von Deklarationen innerhalb des for-init: Nur For-Klammer und Rumpf der For-Schleife (action)! Unbedingt nutzen! (natürlich nicht default in M$-VS-Studio ) Hat mir schon einige Stunden Bug-Suche erspart! Unterstützt das Prinzip der Daten-Lokalität bzw. des "information hiding" for ( uint i = 0;... )... // ab hier ist i wieder unbekannt! Scope von i G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Kontrollstrukturen, 16 Geschachtelte Schleifen (nested loops) Schleifenrumpf kann wieder Schleife enthalten: for ( uint i = 0;... ) for ( uint j = 0;... )... Andere Schleifenvariable nehmen! Beispiel: for ( unsigned int i = 0; i < 5; i ++ ) for ( unsigned int j = 0; j < i; j ++ ) putchar('*'); putchar('\n'); Ausgabe * ** *** **** ***** G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Kontrollstrukturen, 17 8

Äquivalenz von for und while for ( init ; test ; expr ) action ; Init und test werden also immer mind. 1x ausgeführt Wann for und wann while? init ; while ( test ) action ; expr ; Expr und action werden nicht notw. ausgeführt! For wenn Schleife über Integer-Bereich mit festen Grenzen While wenn Anzahl Durchläufe nicht klar (max. Anz. begrenzen!) G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Kontrollstrukturen, 20 Beispiel: Mittelwert uint list_size = 3; uint n_values = 0; float sum = 0.0; while ( n_values < list_size ) float value; scanf("%f", &value ); sum += value; n_values ++ ; float average = sum / n_values; printf( "Average = %f\n", average ); Angenommen, wir wüssten das Schleifen in C laufen fast immer von 0 n-1 Lokale Variable innerhalb der Schleife float/int: int wird konvertiert zu float G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Kontrollstrukturen, 22 9

Eingabe: 1 5 3 uint list_size = 3; uint n_values = 0; list_size 3 float sum = 0.0; while ( n_values < list_size ) float value; scanf("%f", &value ); sum += value; n_values ++ ; float average = sum / n_values; n_values sum average value 0321 0.0 9.0 6.0 1.0 1.0 5.0 3.0 - printf( "Average = %f\n", average ); G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Kontrollstrukturen, 23 Exkurs: korrekte Programme durch vollständige Fallunterscheidung uint list_size = 3; uint n_values = 0; float sum = 0.0; while ( n_values < list_size ) float value; scanf("%f", &value ); sum += value; n_values ++ ; float average = sum / n_values; printf( "Average = %f\n", average ); Kennt man i.a. nicht! G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Kontrollstrukturen, 24 10

Diese Funktion liefert Anzahl erfolgreich float value; konvertierter Eingaben uint n_values = 0; float sum = 0.0; while ( scanf("%f", &value) == 1 ) sum += value; n_values ++ ; float average = sum / n_values; printf( "Average = %f\n", average ); Neues Problem: was, wenn 0 Werte gelesen wurden?! G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Kontrollstrukturen, 25 float value; uint n_values = 0; float sum = 0.0; while ( scanf("%f", &value) == 1 ) sum += value; n_values ++ ; Noch ein Problem: was, wenn der input stream gar nicht mehr aufhört?! if ( n_values > 0 ) float average = sum / n_values; printf( "Average = %f\n", average ); fprintf( stderr, "No values on stdin!\n" ); Oder Fehlercode zurückgeben, oder Exception werfen, oder... G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Kontrollstrukturen, 26 11

const uint max_n_values = 0; float value; uint n_values = 0; float sum = 0.0; while ( scanf("%f", &value) == 1 && n_values < max_n_values ) sum += value; n_values ++ ; if ( n_values > 0 ) float average = sum / n_values; printf( "Average = %f\n", average ); fprintf( stderr, "No values on stdin!\n" ); G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Kontrollstrukturen, 27 Break und continue Problem: zusätzliche Sprünge innerhalb der Schleife Zurück an Anfang Aus Schleife raus bool go_on = true; while ( (...) && go_on ) go_on = fale; go_on = false; go_on = false; Bedingung Schleifenrumpf G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Kontrollstrukturen, 28 12

Lösung Zusätzliche Flußkontrolle innerhalb Schleifen Können nur innerhalb Schleifen verwendet werden break: springt aus Schleife heraus (nur 1 Level!) continue: springt ans Ende des Schleifenblocks G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Kontrollstrukturen, 29 Beispiel von vorhin: while (...) break; continue; break; // continue jumps here // break jumps here bool go_on = true; while ( (...) && go_on ) go_on = fale; go_on = false; go_on = false; G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Kontrollstrukturen, 30 13

Exkurs: Idiome Jede Sprache hat ihre eigenen Idiome, so auch jede Programmiersprache Man sollte diese Idiome unbedingt verwenden Richtig Nicht C++-like i ++ ; i += 1; // oder... i = i + 1; for ( i=0; i < n; i ++ )... if ( a &&!b ) printf("resultat: %.3f = %d%%\n", x, i ); Hier streiten sich die Geister i = 0; while ( i < n )... i ++ ; if ( a == true && b==false ) cout << "Resultat: " << setprec(3) << x << i; G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Kontrollstrukturen, 31 14