EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 2 Gisbert Dittrich; Claudio Moraga FBI Unido

Slides:



Advertisements
Ähnliche Präsentationen
Programme in C++.
Advertisements

Ziele von EINI I + II Einführen in „Informatik“
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Claudio Moraga; Gisbert Dittrich
Hochschule Fulda – FB ET Sommersemester 2010
der Universität Oldenburg
Gliederung des Inhalts
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
FOR Anweisung.
DO...WHILE Anweisung.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 9 Claudio Moraga; Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
Claudio Moraga; Gisbert Dittrich
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 5 Claudio Moraga; Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 3 Claudio Moraga, Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 12 Claudio Moraga, Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 1 Gisbert Dittrich; Claudio Moraga FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 11 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 10 Claudio Moraga; Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher bekannt: Einfache Variable Feld Vereinbarung Zuweisung Block while-Schleife Bedingte Anweisung (if) Typ.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung Wintersemester 2013/14 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung
Einführung in die Programmierung Wintersemester 2012/13 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
BMEVIEEA100 Grundlagen der Programmierung
Vorlesung 3. if else Anweisung if (Ausdruck) Anweisung1 else Anweisung2 Ausdruck hat einen von 0 verschiedenen Wert, so wird Anweisung 1 ausgeführt. Bei.
1 // Laengste Zeile bestimmen // // Liest die Eingabe Zeichen fuer Zeichen, bis // das erscheint. // Die laengste Zeile wird ausgegeben (bei.
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Informatik Beschreibung von Abläufen durch Algorithmen 3.3 Wiederholugnsanweisungen 3. Beschreibung von Abläufen durch Algorithmen 3.3 Wiederholungsanweisungen.
1 // 9_1_Datei_IO //Elementare Verwendung von Dateien // Vorsicht: nicht robust, #include const int maxLen = 70; void Schreiben(char *, ofstream *); void.
Java-Kurs - 4. Übung weitere Kontrollstrukturen
 Präsentation transkript:

EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 2 Gisbert Dittrich; Claudio Moraga FBI Unido

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" EINI-I Kapitel 2 Elementare Daten- und Kontrollstrukturen

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Gliederung Kapitel 2 Elementare Daten- und Kontrollstrukturen: Je aus Beispielen entwickeln: –In-/Decrement-Operatoren –Getchar –Bedingte Anweisung –Zuweisung –Disjunktion/Konjunktion –Switch - break - continue –Eindimensionale Felder –For-Schleife Grammatikergänzung

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Beispiel: Lesen und Testen Problem: Lies Zeichen für Zeichen aus der Eingabe, bis das Endezeichen erscheint. Gelesene Zeichen, die ungleich dem Leerzeichen sind, werden ausgegeben, sofern sie druckbar sind. Prog-4

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" // Prog-4 // // Liest die Eingabe Zeichen fuer Zeichen, bis // das erscheint. Jedes gelesene Zeichen // wird ausgegeben. // Demonstriert: Deklaration, Eingabe, // while-Schleife, zusammengesetzte Anweisungen #include int main() { char Ende c; cin >> c; while (c != Ende) { cout << "Gelesen: " << c << endl; cin >> c; } return 0; } Ausführen //

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Beispiel: Lesen und Testen Problem: Lies Zeichen für Zeichen aus der Eingabe, bis das Endezeichen erscheint. Gelesene Zeichen, die ungleich dem Leerzeichen sind, werden ausgegeben, sofern sie druckbar sind.

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Beispiel: Lesen und Testen Die while -Schleife while Anweisung; while { Anweisung1 ; Anweisung2 ; AnweisungN ; }

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Beispiel: Lesen und Testen cin >> c; while (c != Ende) { cout << "Gelesen: " << c << endl; cin >> c; } Test der Bedingung Verlassen der while -Schleife, falls die Bedingung falsch ist Ausführung des Blocks, falls die Bedingung wahr ist { cout << "Gelesen: " << c << endl; cin >> c; }

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Sprachelemente: Test, Negation Der Test einer Bedingung hat den Wert wahr, falls das Resutat von 0 verschieden ist. Das Resultat mit dem Wert 0 wird stets als falsch interpretiert. == ist Test auf Gleichheit != ist Test auf Ungleichheit Vergleich erfordert Übereinstimmung der Typen. ! ist Negation in C++, d. h. man kann c !=Ende auch schreiben als !(c == Ende)

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Sprachelemente: Zuweisung = ist Zuweisung –a = b weist a den Wert b zu (und gibt den Wert von b als Wert zurück: die Zuweisung hat einen Wert, ist also ein Ausdruck) –a == b überprüft, ob die Werte von a und b identisch sind. Folgen von Anweisungen werden in {..} eingeschlossen und gelten als eine Anweisung.

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Beispiel: Zeichen zählen Erweiterung des vorigen Beispiels: Möchte zusätzlich Zeichen zählen und die Anzahl der gelesenen Zeichen ausgeben. Alle Zeichen werden auch ausgegeben. Prog-5

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" // Prog-5 // Liest die Eingabe Zeichen fuer Zeichen, bis // das erscheint. Jedes gelesene Zeichen // und die Gesamtzahl der Zeichen wird ausgegeben. // Demonstriert: Operator ++ #include int main() { char Ende = c; long int Zaehler; cin >> c; Zaehler = 1; while (c != Ende) { cout << "Gelesen: " << c << endl; cin >> c; ++Zaehler; } cout << "Anzahl der gelesenen Zeichen: " << Zaehler << "\n"; return 0; } Ausführen //

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Sprachelemente: Inkrementieren ++Zaehler erhöht den Wert der Variablen Zaehler um 1 (ist also gleichwertig mit der Zuweisung Zaehler = Zaehler + 1 ) Variante: Zaehler++ –++Zaehler erhöht Zaehler um 1 und verwendet der erhöhten Wert (also: Erhöhung vor der Benutzung), –Zaehler++ verwendet den alten Wert von Zaehler und erhöht Zaehler dann. Deswegen also C++ !!

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Sprachelemente: Inkrementieren ++Zaehler heißt Präfix-, Zaehler++ heißt Postfix-Form Beispiel: a=1; b=1; c=1; d=1; cout << ++a << b++ << --c << d-- << \n' << a << b << c << d; druckt:

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Beispiel: Zeichen zählen 2 Erweiterung: möchte zusätzlich Anzahl der Leerzeichen und die Anzahl der Zeilen kennenlernen. –c ist Leerzeichen genau dann, wenn c == ' –c beendet eine Zeile genau dann, wenn c == '\n Beachte: cin überliest die Leerzeichen, sucht also in der Eingabe nach dem ersten Zeichen, das vom Leerzeichen verschieden ist. Prog-6

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" // Programm 6 #include int main() { char Ende = ZeilenEnde = '\n', c; long int Zaehler, ZeilenEndeZaehler = 0; c = getchar(); Zaehler = 1; while (c != Ende) { if (c == ZeilenEnde) ZeilenEndeZaehler++; cout << "Gelesen: " << c << endl; c = getchar(); ++Zaehler; } cout << "Anzahl der gelesenen Zeichen: ; cout << Zaehler ; cout << " (!= Ende: " << --Zaehler << ")\n" << "Anzahl der Zeilen: " << ZeilenEndeZaehler << endl; return 0; } //

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Sprachelemente: getchar() getchar : liest von der Tastatur das nächste Zeichen und gibt es als Wert zurück. Technisch: getchar ist eine Funktion ohne Argument –Aufruf muß in C++ mit leerer Argumentliste erfolgen, also als getchar()

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" // Programm 6 #include int main() { char Ende = ZeilenEnde = '\n', c; long int Zaehler, ZeilenEndeZaehler = 0; c = getchar(); Zaehler = 1; while (c != Ende) { if (c == ZeilenEnde) ZeilenEndeZaehler++; cout << "Gelesen: " << c << endl; c = getchar(); ++Zaehler; } cout << "Anzahl der gelesenen Zeichen: ; cout << Zaehler ; cout << " (!= Ende: " << --Zaehler << ")\n" << "Anzahl der Zeilen: " << ZeilenEndeZaehler << endl; return 0; } Ausführen //

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Sprachelemente: Bedingte Anweisung Bedingte Anweisung (einfache Form): if (Bedingung) { Folge von Anweisungen } Dabei Wirkung: –Auswertung des Ausdrucks "Bedingung" liefert: != 0 (d. h. wahr): Ausführung des Blocks {... } –Auswertung des Ausdrucks "Bedingung" liefert: == 0 (d. h. falsch): Ignorieren/Auslassen des Blocks {... }

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Sprachelemente: Bedingte Anweisung Vorsicht: In Bedingungen wird nicht auf wahr oder falsch getestet, sondern auf: != 0 / == 0

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Sprachelemente: Bedingte Anweisung Besteht die Folge nur aus einer Anweisung, so können die Klammern {... } entfallen: float f = 1.0; if (f) cout << "Bingo!"; druckt Bingo!

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Beispiel: Wörter zählen Erweiterung zu Vorigem: –Möchte zusätzlich wissen, wie viele Wörter der Text enthält. Wörter? –Getrennt durch Leerzeichen, Zeilenenden oder Tabulatoren.

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Beispiel: Wörter zählen Also: wenn beim Lesen von c gilt: c == ' ' || c == '\n' || c == '\t' so bin ich nicht in einem Wort. Das merke ich mir; ich merke mir auch, wenn ich ein Wort neu betrete (; dann erhöhe ich den Wortzähler). Prog-7

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" // Prog-7 // // Liest die Eingabe Zeichen fuer Zeichen, bis // das erscheint. // Die Anzahl der Zeichen, der Zeilen und // der Woerter wird bestimmt und ausgegeben. // Demonstriert: mehrfache Zuweisung, bedingte Anweisung, // Booleschen Operator || #include int main() { //const int true = 1, false = 0; char Ende = ZeilenEnde = '\n', Tab = '\t', LeerZeichen = ' '; char c; long int Zaehler, ZeilenZaehler, WortZaehler; int ImWort = false; Zaehler = WortZaehler = 0; c = getchar (); ZeilenZaehler =1; ++Zaehler; 1

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" // Prog-7 (Fortsetzung) while (c != Ende) { if (c == ZeilenEnde) ZeilenZaehler++; if ( c == LeerZeichen || c == ZeilenEnde || c == Tab) ImWort = false; else if (!ImWort) { ImWort = true; ++WortZaehler; } c = getchar (); ++Zaehler; } cout << "Anzahl der gelesenen Zeichen: " << Zaehler; cout << " (!= Ende: " << --Zaehler << ")\n" << "Anzahl der Zeilen: " << ZeilenZaehler << "\nAnzahl der Woerter: " << WortZaehler << endl; return 0; } 2 Ausführen //

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Beispiel: Wörter zählen while (c ! = Ende) { if (c == ZeilenEnde) ZeilenZaehler++; if ( c == LeerZeichen || c == ZeilenEnde || c == Tab) ImWort = false; else if (!ImWort) { ImWort = true; ++WortZaehler; } c = getchar(); ++Zaehler; Trenner gesehen keinen Trenner gesehen, also in einem Wort Zeilenende gesehen nächstes Zeichen erhöhe Zähler

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Sprachelemente: Zuweisung Die Zuweisung WortZaehler = 0 –weist der Variablen WortZaehler den Wert 0 zu –hat den Wert 0 (d. h. den zugewiesenen Wert) Die Zuweisung wirkt also nicht nur als Anweisung (, die etwas tut), sondern auch als Ausdruck (, die einen Wert hat).

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Sprachelemente: Zuweisung Die mehrfache Zuweisung Zaehler = Wortzaehler = 0 wirkt wie Zaehler = (Wortzaehler = 0) Also: –Auswertung der Zuweisung Wortzaehler = 0 –Zuweisung des resultierenden Werts an die Variable Zaehler

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Sprachelemente: Zuweisung Auswertung erfolgt also von rechts nach links –a = b = c ist gleichwertig mit a = (b = c) (rechtsassoziativ). –Konsequenz: der Wert kann weiterverwendet werden. –z.B. a + (b = 3) bewirkt:: Zuweisung von 3 an die Variable b, Erhöhung von a um 3, das ist häßlich !!.

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Sprachelemente: Zuweisung Beispiel: Testen: –if ((c = getchar( )) == Ende) : Lies das nächste Zeichen, weise es c als Wert zu und (,da dies auch wie ein Ausdruck wirkt, ) teste den Wert von c, etc. Das trägt heftig zur Unlesbarkeit mancher Programme bei!

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Sprachelemente: Disjunktion || ist der oder - Operator (Disjunktion), dabei ist: x == y || a == b || e == f gleichwertig mit (x == y || a == b) || e == f (linksassoziativ)

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Sprachelemente: Disjunktion Auswertung nur solange, bis das Ergebnis feststeht !! Beispiel: – if ( a = = b || e = = (k = r + 1)) cout << k abrkeDruck beliebte Fehlerquelle ! 18 0 Analog: && Konjunktion (und- Operator)

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Sprachelemente: Bedingte Anweisung Bedingte Anweisung mit Alternative. Syntaktisch sieht sie so aus: if (Bedingung) { Folge_1 } else { Folge_2 }

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Sprachelemente: Bedingte Anweisung Folge_1, Folge_2 sind Folgen von Anweisun- gen Bedeutung: klar. Falls die Folge nur aus einer einzigen Anwei- sung besteht, kann { } weggelassen werden. Diese Anweisungen können wieder eine be- dingte Anweisung sein (wie im Programmtext) Folge_1 wird ausgeführt, wenn die Bedingung wahr, Folge_2 wird ausgeführt, wenn die Bedingung falsch ist

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Sprachelemente: Bedingte Anweisung Mehrgliedrige Variante if (Bed_1) { Folge_1 } else if (Bed_2) { Folge_2 } else { Folge_3 } wird ausgeführt, wenn Bed_1 wahr ist wird ausgeführt, wenn Bed_1 falsch, jedoch Bed_2 wahr ist wird natürlich in allen übrigen Fällen ausgeführt Bitte besonders beachten !

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Sprachelemente: Bedingte Anweisung Knifflig: if1 (Bed_1) if2 (Bed_2) { Folge_1 } else { Folge_2 } Wohin gehört das else? Zu if1 oder zu if2? Ausprobieren!

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Sprachelemente: switch-case Beispiel: Programmausschnitt switch (c) { case 'A': ++Zaehler_A; case 'B': ++Zaehler_B; case 'C': ++Zaehler_C; default: ++Zaehler_sonst; } Vorsicht: Abschließen Vorsicht: Abschließen Vorsicht: Abschließen

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Sprachelemente: switch-case-break Beispiel: Programmausschnitt switch (c) { case 'A': ++Zaehler_A; break; case 'B': ++Zaehler_B; break; case 'C': ++Zaehler_C; break; default: ++Zaehler_ sonst; } switch-case

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" /* switch-case Illustriert switch-case-break.Zählt die Vorkommen von A, B, C und der sonstigen Zeichen (ohne Trennzeichen). Abschluß #include int main() { char c; int Zaehler_A = 0, Zaehler_B = 0, Zaehler_C = 0, Zaehler_sonst = 0; cin >> c; while (c!= { switch (c) { case 'A': ++Zaehler_A; break; case 'B': ++Zaehler_B; break; 1

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" //(Fortsetzung) case 'C': ++Zaehler_C; break; default: ++Zaehler_sonst; }; cin >> c; }; cout << "Zähler_A: "<< Zaehler_A << '\n' << "Zähler_B: "<< Zaehler_B << '\n' << "Zähler_C: "<< Zaehler_C<< '\n' << "Zähler_sonst: "<< Zaehler_sonst<< '\n'; return 0; } 2 Ausführen //

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Sprachelemente: switch-case-break switch (x) prüft Wert von x gegen Werte const in: case const: Dabei gilt: Werte müssen verschieden sein Werte müssen vom Typ von x sein –Achtung: Typkonvertierungen beachten ! –können über Ausdrücke berechnet werden zugehörige Anweisungsfolge abschließen –z.B. durch break –ansonsten werden die nachfolgenden Fälle mit durchlaufen!!

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Sprachelemente: switch-case-break break –bewirkt Sprung z.B. aus switch, while, for. default –deckt alle nicht aufgeführten Fälle ab. –kann fehlen.

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Beispiel: Wörter etc. zählen Problem: Möchte wissen, wie oft die folgenden Zeichen vorkommen: –Ziffern (pro Ziffer: wie oft?) –Trennzeichen (d. h. '\t', '\n', ' ) –alle anderen Prog-8

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" // Prog-8 // // Liest die Eingabe Zeichen fuer Zeichen, bis // das erscheint. // Die Anzahl der Trennzeichen (Zeilenende, Tab, // Leerzeichen), der Ziffern und aller anderen Zeichen // wird bestimmt und ausgegeben. // Demonstriert: bedingte Anweisung, Felder, for-Schleife // #include int main() { char Ende = char ZeilenEnde = '\n', Tab = '\t', LeerZeichen = ' '; char c; long int Zaehler = 0; long int TrennZeichenZaehler = 0; long int ZiffernZaehler[10]; int i; 1

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" for (i = 0; i < 10; ++i) ZiffernZaehler[i] = 0; // // jetzt geht's los: der Text wird gelesen, die // Zaehler werden bestimmt. // c = getchar(); while (c != Ende) { if (c >= '0' && c <= '9') ++ZiffernZaehler[c - '0']; else if (c == LeerZeichen || c == ZeilenEnde || c == Tab) ++TrennZeichenZaehler; else ++Zaehler; c = getchar(); } 2

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" // // Ausgabe der Ergebnisse // cout << "Anzahl der Trennzeichen: " << TrennZeichenZaehler; for(i = 0; i < 10; ++i) cout << "\nZiffer " << i << " wurde " << ZiffernZaehler[i] << "\tmal gelesen"; cout << "\nandere Zeichen: " << Zaehler << endl; return 0; } Ausführen //

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 47 Felder int ZiffernZaehler[10]; vereinbart ein Feld mit Namen ZiffernZaehler das Feld enthält die ganzzahligen Elemente ZiffernZaehler[0]..Ziffernzaehler[9] Anzahl der Elemente in dem Feld Beginn bei 0 (immer!) Ende bei Anzahl-1

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 48 Felder Konstruktionsmuster: –TT Ara[k] stellt ein Feld Ara mit k Elementen Ara[0],..., Ara[k-1] zur Verfügung, jedes Feldelement ist vom Grundtyp TT –im Augenblick ist der Grundtyp int k kann ein ganzzahliger Ausdruck sein, der zur Zeit der Definition des Feldes bekannt sein muß.

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Anmerkungen c - '0' : –Konvertiert implizit c in eine ganze Zahl: das Bitmuster wird als Zahl interpretiert, ebenso '0'. –Ergibt: '8'-'0' = 8 –Die Konversion wird durch - ausgelöst. (Operatoren der Subtraktion müssen Zahlen sein). Ziemlich unsauber, aber Teil der Magie von C++.

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Anmerkungen Bei ++ZiffernZaehler[c - '0'] passiert also folgendes: –der Wert der zu c gehörenden Ziffer wird ermittelt, der entsprechende Feldeintrag wird um 1 erhöht. c muß einer Ziffer entsprechen es hätte auch ZiffernZaehler[c - '0']++ heißen können.

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Die for -Schleife for (A; B; C) { Folge von Anweisungen } –A - Initialisierungsteil: Mit diesem Wert wird die Folge von Anweisungen am Anfang durchlaufen, (falls B erfüllt). z. B. Zuweisung eines Anfangswerts an die "Laufvariable". Initialisierungs- teil Bedingungs- teil Aktionsteil Schleifenrumpf

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Die for -Schleife –B: Bedingungsteil: wird vor jedem Durch- lauf überprüft. Wenn die Auswertung den Wert falsch ergibt: Abbruch/Verlassen der Schleife Wenn die Auswertung den Wert wahr ergibt: 1. Ausführung des Schleifenrumpfs und 2. des Aktionsteils ( C ). - C : Aktionsteil: wird bei jedem Durchlauf ausgeführt.

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Beispiel 1: for -Schleife for (i = 0; i < 10; i++) ZiffernZaehler[i] = 0; initialisiert alle Elemente des Feldes ZiffernZaehler zu 0 Gleichwertige Formulierung: for (i=0; i<10;) ZifferZaehler[i++]=0;

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Beispiel 2: for -Schleife for (;(c=getchar())!= Ende;) cout <<c; ist gleichwertig mit c=getchar(); while (c!=Ende){ cout << c;c=getchar(); } Initialisierungsteil leerAktionsteil leer Überprüfung findet statt

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Beispiel 3: for -Schleife A, B oder C können leer sein: "Preis"frage: for (;;); tut was ? Endlosschleife, die nichts tut

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Beispiel 4: for -Schleife- break for (;;) { cin >> c; if (c >= '0' && c <= '9') break; else ++Zaehler; } break

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" /* Break Illustriert break, um eine Endlosschleife beim ersten Erscheinen der ersten Ziffer im Eingabestrom zu verlassen.*/ #include int main() { int Zaehler = 0; char c; for (;;) { cin >> c; if (c >= '0' && c<= '9') // Enthält c Ziffer ? break; else ++Zaehler; } cout << "Anzahl der Zeichen (ohne Trennzeichen) vor erster Ziffer: " << Zaehler << \n'; return 0; } //

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Beispiel 5: for -Schleife- continue for (i=1; i < 11; i++) { cin >> c; if (c >= '0' && c <= '9') continue; ++Zaehler; } continue

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" /* Continue Illustriert continue durch Ausgabe der Anzahl der Zeichen, wobei Trennzeichen und Ziffern nicht gezählt werden, unter den ersten zehn (echten) Zeichen. */ #include int main() { int Zaehler = 0, i = 0; char c; for (i=1; i < 11; i++) { cin >> c; if (c >= '0' && c <= '9')// c stellt eine Ziffer dar continue; ++Zaehler; } cout << "Anzahl der Zeichen (ohne Trennzeichen und ohne Ziffern) für die ersten 10 Zeichen: " << Zaehler; return 0; } //

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Beispiel 5: for -Schleife- continue continue –läßt den Rest des Rumpfes weg –springt an den Anfang des nächsten Durchlaufs

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Grammatikergänzung Kapitel 2 Expressions expression:assignment-expression /* additive --> assignment- */ more assignment-expression: conditional-expression unary-expression assignment-operator assignment-expression assignment-operator: = more constant-expression: conditional-expression conditional-expression:logical-or-expression more logical-or-expression:logical-and-expression logical-or-expression | | logical-and-expression

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Grammatikergänzung Kapitel 2 Expressions logical-and-expression:inclusive-or-expression logical-and-expression & & inclusive-or-expression inclusive-or-expression: equality-expression more equality-expression:relational-expression equality-expression == relational-expression equality-expression != relational-expression relational-expression: additive expression more

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Grammatikergänzung Kapitel 2 Expressions additive-expression:multiplicative-expression additive-expression + multiplicative-expression additive-expression - multiplicative-expression multiplicative-expression: unary-expression multiplicative-expression * unary-expression multiplicative-expression / unary-expression multiplicative-expression % unary-expression unary-expression: primary-expression ++ unary-expression more

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Grammatikergänzung Kapitel 2 Expressions primary-expression: literal more ( expression ) name literal:integer-constant character-constant floating-constant string-literal boolean literal boolean literal: false true

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Grammatikergänzung Kapitel 2 Statements statement: labeled-statement expression-statement compound-statement selection-statement iteration-statement jump-statement more labeled-statement: more case constant-expression : statement default : statement

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Grammatikergänzung Kapitel 2 Statements expression-statement: expression opt ; /* ; !!!!!*/ compound-statement:{ statement-seq opt } [statement-seq opt = statement-seq | ] statement-seq:statement statement-seq statement selection-statement: if ( condition ) statement if (condition ) statement else statement switch (condition ) statement condition: expression more

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Grammatikergänzung Kapitel 2 Statements iteration-statement: while ( expression ) statement for ( for-init-statement ; expression opt ; expression opt ) statement more for-init-statement: expression-statement more jump-statement: break ; continue ; return expression opt ;

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Grammatikergänzung Kapitel 2 Ableitungsbeispiel Aufgabe: Leite ab : while (c != Ende) { if (c == Zeilenende) ++Zeilenzaehler; else break; } Aufgrund schon vorliegender Erfahrung werden im folgenden mehrere Schritte zusammengefaßt, jedoch noch im Kommentar erwähnt.

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Grammatikergänzung Kapitel 2 Ableitungsbeispiel Ableitung: statement /* statement:..|iteration-statement |....*/ iteration-statement /*iteration-statement: while ( expression ) statement*/ while ( expression ) statement /* expression: assignment-expression*/ while (assignment-expression) statement /* assignment --> conditional--> logical-or --> logical- and --> inclusive-or --> equality */ while (equality-expression) statement /*equality-expression: equality-expression != relational-expression*/

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Grammatikergänzung Kapitel 2 Ableitungsbeispiel while (equality-expression != relational-expression) statement /* equality --> relational --> additive --> multiplicative --> unary --> primary --> name*/ while (c != Ende) statement /* statement-- > compound-statement --> { statement-seq opt } { statement-seq } --> { statement } */ while (c != Ende) { statement } /* statement--> selection- --> if ( condition ) statement else statement*/ while (c != Ende) { if ( condition ) statement else statement } /* condition--> expression --> c == Zeilenende */

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Grammatikergänzung Kapitel 2 Ableitungsbeispiel while (c != Ende) { if (c == Zeilenende ) statement else statement } /* statement --> expression-st --> expression opt ; (Semikolon!!!) --> expression; --> assignment-exp.; --> conditional ; -->...--> multiplicative; --> unary; --> ++ unary ; --> ++ primary ; --> ++ name; --> ++ Zeilenzaehler; */ while (c != Ende) { if (c == Zeilenende ) ++ Zeilenzaehler; else statement } /* statement --> jump-statement--> break ;*/ while (c != Ende) { if (c == Zeilenende ) ++ Zeilenzaehler; else break ;}

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" Literaturergänzung Stroustrup, B.: Die C++ Programmiersprache Addison-Wesley, 3.Auflage 1998