Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido"—  Präsentation transkript:

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

2 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

3 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

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; }

5 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)

6 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.

7 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

8 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.

9 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:

10 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

11 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()

12 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 {... }

13 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.

14 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!

15 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.

16 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

17 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

18 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).

19 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

20 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 !!.

21 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!

22 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)

23 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 !

24 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 }

25 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

26 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 !

27 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!

28 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

29 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

30 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!!

31 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.

32 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

33 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

34 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ß.

35 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++.

36 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.

37 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

38 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.

39 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;

40 Kap 2: Elem. Dat.+Kontrollstrukt.Vorl EINI-I"Prof. Dr. G. Dittrich Beispiel 2: for -Schleife for (;(c=getchar())!=Ende;) cout <

41 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

42 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

43 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

44 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

45 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

46 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

47 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

48 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

49 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

50 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

51 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 ;

52 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

53 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*/

54 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 */

55 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 ;}

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


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

Ähnliche Präsentationen


Google-Anzeigen