Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Süssmann Weyers Geändert vor über 11 Jahren
1
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 2 Gisbert Dittrich; Claudio Moraga FBI Unido moraga@cs.uni-dortmund.de
2
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 2 13.10.2000 EINI-I Kapitel 2 Elementare Daten- und Kontrollstrukturen
3
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 3 13.10.2000 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
4
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 4 13.10.2000 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
5
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 5 13.10.2000 // Prog-4 // // Liest die Eingabe Zeichen fuer Zeichen, bis // das Endzeichen @ 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 //
6
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 6 13.10.2000 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.
7
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 7 13.10.2000 Beispiel: Lesen und Testen Die while -Schleife while Anweisung; while { Anweisung1 ; Anweisung2 ;.................... AnweisungN ; }
8
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 8 13.10.2000 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; }
9
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 9 13.10.2000 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)
10
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 10 13.10.2000 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.
11
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 11 13.10.2000 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
12
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 12 13.10.2000 // Prog-5 // Liest die Eingabe Zeichen fuer Zeichen, bis // das Endzeichen @ 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 //
13
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 13 13.10.2000 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++ !!
14
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 14 13.10.2000 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: 2101 2200
15
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 15 13.10.2000 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
16
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 16 13.10.2000 // 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; } //
17
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 17 13.10.2000 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()
18
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 18 13.10.2000 // 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 //
19
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 19 13.10.2000 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 {... }
20
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 20 13.10.2000 Sprachelemente: Bedingte Anweisung Vorsicht: In Bedingungen wird nicht auf wahr oder falsch getestet, sondern auf: != 0 / == 0
21
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 21 13.10.2000 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!
22
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 22 13.10.2000 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.
23
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 23 13.10.2000 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
24
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 24 13.10.2000 // Prog-7 // // Liest die Eingabe Zeichen fuer Zeichen, bis // das Endzeichen @ 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
25
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 25 13.10.2000 // 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 //
26
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 26 13.10.2000 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
27
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 27 13.10.2000 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).
28
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 28 13.10.2000 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
29
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 29 13.10.2000 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 !!.
30
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 30 13.10.2000 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!
31
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 31 13.10.2000 Sprachelemente: Disjunktion || ist der oder - Operator (Disjunktion), dabei ist: x == y || a == b || e == f gleichwertig mit (x == y || a == b) || e == f (linksassoziativ)
32
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 32 13.10.2000 Sprachelemente: Disjunktion Auswertung nur solange, bis das Ergebnis feststeht !! Beispiel: – if ( a = = b || e = = (k = r + 1)) cout << k abrkeDruck 0117018 0017018 beliebte Fehlerquelle ! 18 0 Analog: && Konjunktion (und- Operator)
33
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 33 13.10.2000 Sprachelemente: Bedingte Anweisung Bedingte Anweisung mit Alternative. Syntaktisch sieht sie so aus: if (Bedingung) { Folge_1 } else { Folge_2 }
34
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 34 13.10.2000 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
35
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 35 13.10.2000 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 !
36
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 36 13.10.2000 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!
37
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 37 13.10.2000 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
38
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 38 13.10.2000 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
39
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 39 13.10.2000 /* switch-case Illustriert switch-case-break.Zählt die Vorkommen von A, B, C und der sonstigen Zeichen (ohne Trennzeichen). Abschluß durch @.*/ #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
40
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 40 13.10.2000 //(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 //
41
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 41 13.10.2000 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!!
42
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 42 13.10.2000 Sprachelemente: switch-case-break break –bewirkt Sprung z.B. aus switch, while, for. default –deckt alle nicht aufgeführten Fälle ab. –kann fehlen.
43
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 43 13.10.2000 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
44
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 44 13.10.2000 // Prog-8 // // Liest die Eingabe Zeichen fuer Zeichen, bis // das Endzeichen @ 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
45
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 45 13.10.2000 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
46
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 46 13.10.2000 // // 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 //
47
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
48
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ß.
49
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 49 13.10.2000 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++.
50
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 50 13.10.2000 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.
51
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 51 13.10.2000 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
52
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 52 13.10.2000 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.
53
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 53 13.10.2000 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;
54
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 54 13.10.2000 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
55
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 55 13.10.2000 Beispiel 3: for -Schleife A, B oder C können leer sein: "Preis"frage: for (;;); tut was ? Endlosschleife, die nichts tut
56
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 56 13.10.2000 Beispiel 4: for -Schleife- break for (;;) { cin >> c; if (c >= '0' && c <= '9') break; else ++Zaehler; } break
57
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 57 13.10.2000 /* 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; } //
58
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 58 13.10.2000 Beispiel 5: for -Schleife- continue for (i=1; i < 11; i++) { cin >> c; if (c >= '0' && c <= '9') continue; ++Zaehler; } continue
59
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 59 13.10.2000 /* 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; } //
60
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 60 13.10.2000 Beispiel 5: for -Schleife- continue continue –läßt den Rest des Rumpfes weg –springt an den Anfang des nächsten Durchlaufs
61
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 61 13.10.2000 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
62
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 62 13.10.2000 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
63
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 63 13.10.2000 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
64
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 64 13.10.2000 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
65
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 65 13.10.2000 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
66
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 66 13.10.2000 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
67
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 67 13.10.2000 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 ;
68
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 68 13.10.2000 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.
69
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 69 13.10.2000 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*/
70
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 70 13.10.2000 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 */
71
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 71 13.10.2000 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 ;}
72
Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I" 72 13.10.2000 Literaturergänzung Stroustrup, B.: Die C++ Programmiersprache Addison-Wesley, 3.Auflage 1998
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.