EINI-I
Einführung in die Informatik
für Naturwissenschaftler und
Ingenieure I
Vorlesung
2 SWS
WS ‘99/00
Gisbert Dittrich
FBI Unido
[email protected]
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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
29.11.1999
2
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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
29.11.1999
3
Vorl “EINI-I"
Prof. Dr. G. Dittrich
Kap 2: Elem. Dat.+Kontrollstrukt.
Beispiel: Lesen und Testen
Test der
Bedingung
Ausführung
des Blocks,
falls die
Bedingung
wahr ist
cin >> c;
while (c != Ende) {
cout << "Gelesen: " << c << endl;
cin >> c;
}
Verlassen der while-Schleife,
falls die Bedingung falsch ist
29.11.1999
4
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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)
29.11.1999
5
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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.
29.11.1999
6
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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
29.11.1999
7
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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.
29.11.1999
8
Vorl “EINI-I"
Prof. Dr. G. Dittrich
Kap 2: Elem. Dat.+Kontrollstrukt.
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
29.11.1999
9
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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
29.11.1999
10
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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()
29.11.1999
11
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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 { ... }
29.11.1999
12
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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.
29.11.1999
13
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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!
29.11.1999
14
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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.
29.11.1999
15
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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
29.11.1999
16
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
Beispiel: Wörter zählen
Zeilenende gesehen
while (c != Ende) {
if (c == ZeilenEnde) ZeilenZaehler++;
if (c == LeerZeichen ||
Trenner
keinen
c
==
ZeilenEnde
||
gesehen
Trenner
c == Tab)
ImWort = false;
gesehen,
else if (!ImWort) {
also in
ImWort = true;
einem
++WortZaehler;
Wort
}
c = getchar();
++Zaehler;
29.11.1999
17
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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).
29.11.1999
18
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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.11.1999
19
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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 !!.
29.11.1999
20
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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!
29.11.1999
21
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
Sprachelemente: Disjunktion
• || ist der „oder“ - Operator („Disjunktion“) ,
dabei ist:
x == y || a == b || e == f
gleichwertig mit
(x == y || a == b) || e == f
(„linksassoziativ“)
29.11.1999
22
Vorl “EINI-I"
Prof. Dr. G. Dittrich
Kap 2: Elem. Dat.+Kontrollstrukt.
Sprachelemente: Disjunktion
• Auswertung nur solange, bis das Ergebnis
feststeht !!
beliebte Fehlerquelle !
Beispiel:
– if ( a = = b || e = = (k = r + 1)) cout << k
a b
r
k
e
Druck
0 1
0 0
17
17
0
0
18
18
18
0
• Analog: &&
29.11.1999
Konjunktion („und“- Operator)
23
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
Sprachelemente: Bedingte Anweisung
• Bedingte Anweisung mit Alternative.
Syntaktisch sieht sie so aus:
if (Bedingung) {
Folge_1
}
else {
Folge_2
}
29.11.1999
24
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
Sprachelemente: Bedingte Anweisung
• Folge_1, Folge_2 sind Folgen von Anweisungen
• Bedeutung: klar.
• Falls die Folge nur aus einer einzigen Anweisung besteht, kann { } weggelassen werden.
• Diese Anweisungen können wieder eine bedingte Anweisung sein (wie im Programmtext)
• Folge_1 wird ausgeführt, wenn die Bedingung
wahr, Folge_2 wird ausgeführt, wenn die
Bedingung falsch ist
29.11.1999
25
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
Sprachelemente: Bedingte Anweisung
• Mehrgliedrige Variante
wird ausgeführt,
wenn Bed_1 wahr ist
if (Bed_1) {
Folge_1
wird ausgeführt,
}
wenn Bed_1 falsch,
else if (Bed_2) { jedoch Bed_2 wahr ist
Folge_2
}
Bitte besonders beachten !
else {
Folge_3
}
29.11.1999
wird natürlich in allen übrigen
Fällen ausgeführt
26
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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!
29.11.1999
27
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
Sprachelemente: switch-case
Beispiel: Programmausschnitt
switch (c) {
case 'A':
++Zaehler_A;
case 'B':
Vorsicht:
Vorsicht:
Abschließen
Abschließen
++Zaehler_B;
case 'C':
++Zaehler_C;
default:
++Zaehler_sonst; }
29.11.1999
28
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
Sprachelemente: switch-case-break
Beispiel: Programmausschnitt
switch (c) {
case 'A':
++Zaehler_A; break;
case 'B':
++Zaehler_B; break;
case 'C':
++Zaehler_C; break;
default:
switch-case
++Zaehler_ sonst; }
29.11.1999
29
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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!!
29.11.1999
30
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
Sprachelemente: switch-case-break
• break
– bewirkt Sprung z.B. aus switch, while, for.
• default
– deckt alle nicht aufgeführten Fälle ab.
– kann fehlen.
29.11.1999
31
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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
29.11.1999
32
Prof. Dr. G. Dittrich
Felder
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
Anzahl der Elemente
in dem Feld
• int ZiffernZaehler[10];
vereinbart ein Feld mit Namen
ZiffernZaehler
• das Feld enthält die ganzzahligen Elemente
ZiffernZaehler[0]..Ziffernzaehler[9]
Beginn bei 0
(immer!)
Ende bei
Anzahl-1
33
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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ß.
34
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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++.
29.11.1999
35
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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.
29.11.1999
36
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
Die for-Schleife
Initialisierungsteil
Bedingungsteil
Aktionsteil
Schleifenrumpf
• for (A; B; C) {
Folge von Anweisungen
}
– A - Initialisierungsteil: Mit diesem Wert wird
die Folge von Anweisungen am Anfang
durchlaufen, (falls B erfüllt).
29.11.1999
• z. B. Zuweisung eines Anfangswerts an die
"Laufvariable".
37
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
Die for-Schleife
– B: Bedingungsteil: wird vor jedem Durchlauf ü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.
29.11.1999
38
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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;
29.11.1999
39
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
Beispiel 2: for-Schleife
Initialisierungsteil leer
Aktionsteil leer
for (;(c=getchar())!=Ende;)
cout <<c;
Überprüfung findet statt
ist gleichwertig mit
c=getchar();
while (c!=Ende){
cout << c;c=getchar();
}
29.11.1999
40
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
Beispiel 3: for-Schleife
• A, B oder C können leer sein:
"Preis"frage:
for (;;);
tut was ?
Endlosschleife, die nichts tut
29.11.1999
41
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
Beispiel 4: for-Schleife-break
for (;;) {
cin >> c;
if (c >= '0' && c <= '9')
break;
else ++Zaehler;
}
break
29.11.1999
42
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
Beispiel 5: for-Schleife-continue
for (i=1;i < 11;i++) {
cin >> c;
if (c >= '0' && c <= '9')
continue;
++Zaehler;
}
continue
29.11.1999
43
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
Beispiel 5: for-Schleife-continue
• continue
– läßt den Rest des Rumpfes weg
– springt an den Anfang des nächsten Durchlaufs
29.11.1999
44
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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
29.11.1999
logical-or-expression:
logical-and-expression
logical-or-expression | | logical-and-expression
45
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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
29.11.1999
46
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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
29.11.1999
47
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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
29.11.1999
48
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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
29.11.1999
49
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
Grammatikergänzung Kapitel 2
• Statements
expression-statement: expressionopt ;
compound-statement:
{ statement-seqopt }
[statement-seqopt = statement-seq | l ]
statement-seq:
statement
statement-seq statement
selection-statement: if ( condition ) statement
if (condition ) statement else statement
switch (condition ) statement
/* ; !!!!!*/
condition: expression
more
29.11.1999
50
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
Grammatikergänzung Kapitel 2
• Statements
iteration-statement: while ( expression ) statement
for ( for-init-statement ; expressionopt ; expressionopt )
statement
more
for-init-statement: expression-statement
more
jump-statement:
break ;
continue ;
return expressionopt ;
29.11.1999
51
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
Grammatikergänzung Kapitel 2
• Ableitungsbeispiel
• Aufgabe: Leite ab:
while (c != Ende) {
if (c == Zeilenende)
++Zeilenzaehler;
else break; }
Zur Erinnerung:
Ableitung von 'A_7'
als Namedecl
Aufgrund schon vorliegender Erfahrung werden im folgenden
mehrere Schritte zusammengefaßt, jedoch noch im Kommentar
erwähnt.
29.11.1999
52
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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 --> logicaland --> inclusive-or --> equality */
while (equality-expression) statement
/*equality-expression: equality-expression != relational-expression*/
29.11.1999
53
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
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-seqopt }
{ 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 */
29.11.1999
54
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
Grammatikergänzung Kapitel 2
• Ableitungsbeispiel
while (c != Ende) { if (c == Zeilenende ) statement else
statement }
/* statement --> expression-st --> expressionopt ; (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 ;}
29.11.1999
55
Prof. Dr. G. Dittrich
Vorl “EINI-I"
Kap 2: Elem. Dat.+Kontrollstrukt.
Literaturergänzung
• Stroustrup, B.: Die C++ Programmiersprache
Addison-Wesley, 3.Auflage 1998
29.11.1999
56

Kapitel 2 - Elementare Daten