EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido

Slides:



Advertisements
Ähnliche Präsentationen
Programmieren 1 – Kontrollstrukturen Teil 2
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
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 2 Gisbert Dittrich; Claudio Moraga 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 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.
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
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
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 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 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 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 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 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.
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.
 Präsentation transkript:

EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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.

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich Sprachelemente: Bedingte Anweisung Vorsicht: In Bedingungen wird nicht auf wahr oder falsch getestet, sondern auf: != 0 / == 0 Zudem: Wieso long int Zaehler (und nicht int Zaehler )? –Schutz vor Überlauf, falls der Wert INT_MAX überschreitet.

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

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

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 33 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"Prof. Dr. G. Dittrich 34 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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: Ausführung des Schleifenrumpfs und des Aktionsteils ( C ). - C : Aktionsteil: wird bei jedem Durchlauf ausgeführt.

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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 /* primary-expression --> unary-expression*/ unary-expression:primary expression ++ unary-expression more

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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. Zur Erinnerung : Ableitung von 'A_7' als Namedecl

Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich 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"Prof. Dr. G. Dittrich Literaturergänzung Stroustrup, B.: Die C++ Programmiersprache Addison-Wesley, 3.Auflage 1998