Kapitel 2.3 - Universität Paderborn

Werbung
2.3 Verzweigungen
Verzweigung mit zwei Alternativen: die if-Anweisung.
if (x > y)
max = x;
if (x > y) {
max = x; min = y;
}
if (x > y)
max = x;
else
max = y;
if (x > y) {
max = x; min = y;
} else {
max = y; min = x;
}
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
54
Semantik: Es wird eine boolsche Bedingung ausgewertet. Diese liefert entweder den boolschen
Wert true oder false. In Abhängigkeit von diesem Wert wird entweder der then-Block oder der
else-Block (sofern vorhanden) durchlaufen.
if (x > y)
max = x;
boolsche Bedingung
then-Block
if (x > y) {
max = x; min = y;
}
if (x > y)
max = x;
else
max = y;
boolsche Bedingung
then-Block
if (x > y) {
max = x; min = y;
} else {
max = y; min = x;
}
Rainer Feldmann
Universität Paderborn
else-Block
Technische Informatik für Ingenieure (TIFI)
WS 09/10
55
Einrückungen
if (x > y) {
max = x; min = y;
} else {
max = y; min = x;
}
Rainer Feldmann
Universität Paderborn
Die Anweisungen des then-Blocks bzw. des elseBlocks sollten eingerückt werden.
Dies ist zwar nicht zwingend erforderlich, erhöht aber
die Lesbarkeit eines Programms:
Technische Informatik für Ingenieure (TIFI)
WS 09/10
56
Einrückungen
if (x > y) {
max = x; min = y;
} else {
max = y; min = x;
}
Die Anweisungen des then-Blocks bzw. des elseBlocks sollten eingerückt werden.
Dies ist zwar nicht zwingend erforderlich, erhöht aber
die Lesbarkeit eines Programms:
if(x>y){max=x;min=y;}else{max=y;min=x;}
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
56
Einrückungen
if (x > y) {
max = x; min = y;
} else {
max = y; min = x;
}
Die Anweisungen des then-Blocks bzw. des elseBlocks sollten eingerückt werden.
Dies ist zwar nicht zwingend erforderlich, erhöht aber
die Lesbarkeit eines Programms:
if(x>y){max=x;min=y;}else{max=y;min=x;}
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
56
Formatierung von Java-Quelltexten mit Eclipse
Java Programme können in Eclipse in eine “schöne” Form gebracht werden:
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
57
Formatierung von Java-Quelltexten mit Eclipse
Java Programme können in Eclipse in eine “schöne” Form gebracht werden:
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
58
Formatierung von Java-Quelltexten mit Eclipse
Java Programme können in Eclipse in eine “schöne” Form gebracht werden:
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
59
Dangling else
Der then-Block bzw. der else-Block einer ifAnweisung kann wiederum eine if-Anweisung enthalten. Das kann zu Problemen führen:
Frage: Zu welchem if gehört das else ?
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
if (x > y)
if (x > z) max = x;
else
max = y;
WS 09/10
60
Dangling else
Der then-Block bzw. der else-Block einer ifAnweisung kann wiederum eine if-Anweisung enthalten. Das kann zu Problemen führen:
Frage: Zu welchem if gehört das else ?
if (x > y)
if (x > z) max = x;
else
max = y;
Bemerkungen:
• Das Programmfragment rechts oben ist korrekt!
• Die Sprachdefinition von Java (und anderen Programmiersprachen) enthält hier eine Mehrdeutigkeit.
• Die Mehrdeutigkeit wird aufgelöst, indem man festlegt, dass ein else immer zum unmittelbar vorangegangenen if gehört.
• Eine Einrückung wie rechts unten hätte also die
Semantik der Anweisung richtig beschrieben.
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
if (x > y)
if (x > z)
max = x;
else
max = y;
WS 09/10
60
Dangling else
Der then-Block bzw. der else-Block einer ifAnweisung kann wiederum eine if-Anweisung enthalten. Das kann zu Problemen führen:
Frage: Zu welchem if gehört das else ?
if (x > y)
if (x > z) max = x;
else
max = y;
¶
Im Zweifel: Klammern {} setzen!
Bemerkungen:
µ
• Das Programmfragment rechts oben ist korrekt!
• Die Sprachdefinition von Java (und anderen Programmiersprachen) enthält hier eine Mehrdeutigkeit.
• Die Mehrdeutigkeit wird aufgelöst, indem man festlegt, dass ein else immer zum unmittelbar vorangegangenen if gehört.
• Eine Einrückung wie rechts unten hätte also die
Semantik der Anweisung richtig beschrieben.
Rainer Feldmann
Universität Paderborn
³
Technische Informatik für Ingenieure (TIFI)
´
if (x > y) {
if (x > z)
max = x;
else
max = y;
}
WS 09/10
60
Boolsche Ausdrücke
Operator
==
!=
>
<
>=
<=
Bedeutung
gleich
nicht gleich
größer
kleiner
größer oder gleich
kleiner oder gleich
Beispiel
x == 3
x != y
4 > 3
x < y
x >= y
x <= y
Beachte:
if (x == 0) Out.println("x ist Null");
ist korrekt, aber
if (x = 0) Out.println("x ist Null");
ist nicht korrekt, da x = 0 eine Zuweisung ist und kein Vergleich.
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
61
Der Datentyp boolean
Der Datentyp boolean ist ein Datentyp wie int, enthält aber nur
die Werte true und false. Diese können durch boolsche Operationen
miteinander verknüpft werden:
Operanden
And
Or
Not
x
y
x && y x || y
!x
true
true
true
true
false
true
false
false
true
false
false
true
false
true
true
false false
false
false
true
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
George Boole,
1815-1864
WS 09/10
62
Der Datentyp boolean
Der Datentyp boolean ist ein Datentyp wie int, enthält aber nur
die Werte true und false. Diese können durch boolsche Operationen
miteinander verknüpft werden:
Operanden
And
Or
Not
x
y
x && y x || y
!x
true
true
true
true
false
true
false
false
true
false
false
true
false
true
true
false false
false
false
true
George Boole,
1815-1864
Beispiele:
boolean p,q;
p = false;
q = x > 0;
p = (p || q) && x < 10;
if (0 <= x && x <= 10 ||
100 <= x && x <= 110) y=x;
if (!(x > 0)) x = -x;
if (x <= 0) x = -x;
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
/* unschön! */
/* schöner */
WS 09/10
62
Schnellauswertung von Boolschen Ausdrücken
• Die Auswertung von Boolschen Ausdrücken in Java bricht ab, sobald der Wert des Ausdrucks
feststeht.
• Die Auswertunsgreihenfolge ist dabei von links nach rechts.
Beispiele:
if (y != 0 && x/y < 10) ...
Im oberen Ausdruck wird zunächst y != 0 geprüft.
Hat dieser Teilausdruck schon den Wert false, so
wird x/y < 10 nicht mehr geprüft.
if (x < 0 || x > 10) ...
Im mittleren Ausdruck wird zunächst x < 0
geprüft. Hat dieser Teilausdruck schon den Wert
true, so wird x > 10 nicht mehr geprüft.
if (x/y < 10 && y != 0 ) ...
Der untere Ausdruck ist kritisch! Warum ?
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
63
Vorrangregeln bei zusammengesetzten Vergleichen
³
¶
! bindet stärker als && welches stärker bindet als ||
µ
´
Beispiel:
x = 20; y = 1; p = false;
if (!p && y==0 || x>=0 && x<=10) ...
¾
Welchen Wert hat der
boolsche Ausdruck ?
½
Rainer Feldmann
Universität Paderborn
»
¼
Technische Informatik für Ingenieure (TIFI)
WS 09/10
64
Vorrangregeln bei zusammengesetzten Vergleichen
³
¶
! bindet stärker als && welches stärker bindet als ||
µ
´
Beispiel:
x = 20; y = 1; p = false;
if (!p && y==0 || x>=0 && x<=10) ...
¾
»
Welchen Wert hat der
boolsche Ausdruck ?
½
¼
Syntaxbaum bauen!
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
64
Vorrangregeln bei zusammengesetzten Vergleichen
¶
³
! bindet stärker als && welches stärker bindet als ||
µ
´
?
Beispiel:
x = 20; y = 1; p = false;
if (!p && y==0 || x>=0 && x<=10) ...
¾
»
Welchen Wert hat der
boolsche Ausdruck ?
½
¼
Syntaxbaum bauen!
Syntaxbaum für !p && y==0 || x>=0 && x<=10
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
64
Vorrangregeln bei zusammengesetzten Vergleichen
¶
³
! bindet stärker als && welches stärker bindet als ||
µ
´
||
Beispiel:
?
x = 20; y = 1; p = false;
?
if (!p && y==0 || x>=0 && x<=10) ...
¾
»
Welchen Wert hat der
boolsche Ausdruck ?
½
¼
Syntaxbaum bauen!
Syntaxbaum für !p && y==0 || x>=0 && x<=10
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
64
Vorrangregeln bei zusammengesetzten Vergleichen
¶
³
! bindet stärker als && welches stärker bindet als ||
µ
´
||
Beispiel:
&&
x = 20; y = 1; p = false;
?
if (!p && y==0 || x>=0 && x<=10) ...
¾
»
Welchen Wert hat der
boolsche Ausdruck ?
½
?
?
¼
Syntaxbaum bauen!
Syntaxbaum für !p && y==0 || x>=0 && x<=10
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
64
Vorrangregeln bei zusammengesetzten Vergleichen
¶
³
! bindet stärker als && welches stärker bindet als ||
µ
´
||
Beispiel:
&&
x = 20; y = 1; p = false;
?
if (!p && y==0 || x>=0 && x<=10) ...
!
¾
»
Welchen Wert hat der
boolsche Ausdruck ?
½
?
¼
?
Syntaxbaum bauen!
Syntaxbaum für !p && y==0 || x>=0 && x<=10
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
64
Vorrangregeln bei zusammengesetzten Vergleichen
¶
³
! bindet stärker als && welches stärker bindet als ||
µ
´
||
Beispiel:
&&
x = 20; y = 1; p = false;
?
if (!p && y==0 || x>=0 && x<=10) ...
!
¾
»
Welchen Wert hat der
boolsche Ausdruck ?
½
¼
?
p
Syntaxbaum bauen!
Syntaxbaum für !p && y==0 || x>=0 && x<=10
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
64
Vorrangregeln bei zusammengesetzten Vergleichen
¶
³
! bindet stärker als && welches stärker bindet als ||
µ
´
||
Beispiel:
&&
x = 20; y = 1; p = false;
?
if (!p && y==0 || x>=0 && x<=10) ...
!
¾
y==0
»
Welchen Wert hat der
boolsche Ausdruck ?
½
¼
p
Syntaxbaum bauen!
Syntaxbaum für !p && y==0 || x>=0 && x<=10
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
64
Vorrangregeln bei zusammengesetzten Vergleichen
³
¶
! bindet stärker als && welches stärker bindet als ||
µ
´
||
Beispiel:
&&
x = 20; y = 1; p = false;
&&
if (!p && y==0 || x>=0 && x<=10) ...
!
¾
y==0
»
Welchen Wert hat der
boolsche Ausdruck ?
½
¼
?
?
p
Syntaxbaum bauen!
Syntaxbaum für !p && y==0 || x>=0 && x<=10
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
64
Vorrangregeln bei zusammengesetzten Vergleichen
¶
³
! bindet stärker als && welches stärker bindet als ||
µ
´
||
Beispiel:
&&
x = 20; y = 1; p = false;
&&
if (!p && y==0 || x>=0 && x<=10) ...
!
¾
y==0
»
Welchen Wert hat der
boolsche Ausdruck ?
½
¼
x>=0
?
p
Syntaxbaum bauen!
Syntaxbaum für !p && y==0 || x>=0 && x<=10
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
64
Vorrangregeln bei zusammengesetzten Vergleichen
¶
³
! bindet stärker als && welches stärker bindet als ||
µ
´
||
Beispiel:
&&
x = 20; y = 1; p = false;
&&
if (!p && y==0 || x>=0 && x<=10) ...
!
¾
y==0
x>=0
x<=10
»
Welchen Wert hat der
boolsche Ausdruck ?
½
¼
p
Syntaxbaum bauen!
Syntaxbaum für !p && y==0 || x>=0 && x<=10
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
64
Vorrangregeln bei zusammengesetzten Vergleichen
¶
³
! bindet stärker als && welches stärker bindet als ||
µ
´
||
Beispiel:
&&
x = 20; y = 1; p = false;
&&
if (!p && y==0 || x>=0 && x<=10) ...
¾
Welchen Wert hat der
boolsche Ausdruck ?
½
»
!
y==0
x>=0
x<=10
¼
Syntaxbaum von links nach rechts
auswerten!
p
false
Syntaxbaum für !p && y==0 || x>=0 && x<=10
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
64
Vorrangregeln bei zusammengesetzten Vergleichen
¶
³
! bindet stärker als && welches stärker bindet als ||
µ
´
||
Beispiel:
&&
x = 20; y = 1; p = false;
&&
if (!p && y==0 || x>=0 && x<=10) ...
true
¾
Welchen Wert hat der
boolsche Ausdruck ?
½
»
!
y==0
x>=0
x<=10
¼
Syntaxbaum von links nach rechts
auswerten!
p
false
Syntaxbaum für !p && y==0 || x>=0 && x<=10
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
64
Vorrangregeln bei zusammengesetzten Vergleichen
¶
³
! bindet stärker als && welches stärker bindet als ||
µ
´
||
Beispiel:
&&
x = 20; y = 1; p = false;
&&
if (!p && y==0 || x>=0 && x<=10) ...
true
¾
Welchen Wert hat der
boolsche Ausdruck ?
½
»
!
y==0
x>=0
x<=10
false
¼
Syntaxbaum von links nach rechts
auswerten!
p
false
Syntaxbaum für !p && y==0 || x>=0 && x<=10
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
64
Vorrangregeln bei zusammengesetzten Vergleichen
¶
³
! bindet stärker als && welches stärker bindet als ||
µ
´
||
Beispiel:
false
&&
x = 20; y = 1; p = false;
&&
if (!p && y==0 || x>=0 && x<=10) ...
true
¾
Welchen Wert hat der
boolsche Ausdruck ?
½
»
!
y==0
x>=0
x<=10
false
¼
Syntaxbaum von links nach rechts
auswerten!
p
false
Syntaxbaum für !p && y==0 || x>=0 && x<=10
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
64
Vorrangregeln bei zusammengesetzten Vergleichen
¶
³
! bindet stärker als && welches stärker bindet als ||
µ
´
||
Beispiel:
false
&&
x = 20; y = 1; p = false;
&&
if (!p && y==0 || x>=0 && x<=10) ...
true
¾
Welchen Wert hat der
boolsche Ausdruck ?
½
»
!
y==0
x>=0
false
true
x<=10
¼
Syntaxbaum von links nach rechts
auswerten!
p
false
Syntaxbaum für !p && y==0 || x>=0 && x<=10
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
64
Vorrangregeln bei zusammengesetzten Vergleichen
¶
³
! bindet stärker als && welches stärker bindet als ||
µ
´
||
Beispiel:
false
&&
x = 20; y = 1; p = false;
&&
if (!p && y==0 || x>=0 && x<=10) ...
true
¾
Welchen Wert hat der
boolsche Ausdruck ?
½
»
!
y==0
x>=0
x<=10
false
true
false
¼
Syntaxbaum von links nach rechts
auswerten!
p
false
Syntaxbaum für !p && y==0 || x>=0 && x<=10
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
64
Vorrangregeln bei zusammengesetzten Vergleichen
¶
³
! bindet stärker als && welches stärker bindet als ||
µ
´
||
Beispiel:
false
false
&&
x = 20; y = 1; p = false;
&&
if (!p && y==0 || x>=0 && x<=10) ...
true
¾
Welchen Wert hat der
boolsche Ausdruck ?
½
»
!
y==0
x>=0
x<=10
false
true
false
¼
Syntaxbaum von links nach rechts
auswerten!
p
false
Syntaxbaum für !p && y==0 || x>=0 && x<=10
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
64
Vorrangregeln bei zusammengesetzten Vergleichen
¶
³
! bindet stärker als && welches stärker bindet als ||
µ
´
false
||
Beispiel:
false
false
&&
x = 20; y = 1; p = false;
&&
if (!p && y==0 || x>=0 && x<=10) ...
true
¾
Welchen Wert hat der
boolsche Ausdruck ?
½
»
!
y==0
x>=0
x<=10
false
true
false
¼
Syntaxbaum von links nach rechts
auswerten!
p
false
Syntaxbaum für !p && y==0 || x>=0 && x<=10
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
64
Zusicherungen bei Verzweigungen
¾
»
Eine Zusicherung ist eine Aussage über den Zustand eines Programmes (d.h. den Inhalt
seiner Variablen) an einer bestimmten Stelle. Sie wird als Kommentar geschrieben.
½
if (a > b) {
if (a > c)
x = a;
else
x = c;
} else {
if (b > c)
x = b;
else
x = c;
}
Rainer Feldmann
Universität Paderborn
¼
Welchen Wert enthält x nach
Ausführung des Programmteils ?
Technische Informatik für Ingenieure (TIFI)
WS 09/10
65
Zusicherungen bei Verzweigungen
¾
»
Eine Zusicherung ist eine Aussage über den Zustand eines Programmes (d.h. den Inhalt
seiner Variablen) an einer bestimmten Stelle. Sie wird als Kommentar geschrieben.
½
if (a > b) {
if (a > c)
x = a;
else
x = c;
} else {
if (b > c)
x = b;
else
x = c;
}
Rainer Feldmann
Universität Paderborn
¼
/* a > b */
Zusicherungen helfen, ein Programm
verständlich zu machen.
Technische Informatik für Ingenieure (TIFI)
WS 09/10
65
Zusicherungen bei Verzweigungen
¾
»
Eine Zusicherung ist eine Aussage über den Zustand eines Programmes (d.h. den Inhalt
seiner Variablen) an einer bestimmten Stelle. Sie wird als Kommentar geschrieben.
½
if (a > b) {
if (a > c)
x = a;
else
x = c;
} else {
if (b > c)
x = b;
else
x = c;
}
Rainer Feldmann
Universität Paderborn
¼
/* a > b */
/* a > b und a > c */
Zusicherungen helfen, ein Programm
verständlich zu machen.
Technische Informatik für Ingenieure (TIFI)
WS 09/10
65
Zusicherungen bei Verzweigungen
¾
»
Eine Zusicherung ist eine Aussage über den Zustand eines Programmes (d.h. den Inhalt
seiner Variablen) an einer bestimmten Stelle. Sie wird als Kommentar geschrieben.
½
if (a > b) {
if (a > c)
x = a;
else
x = c;
} else {
if (b > c)
x = b;
else
x = c;
}
Rainer Feldmann
Universität Paderborn
¼
/* a > b */
/* a > b und a > c */
/* a > b und c >= a */
Zusicherungen helfen, ein Programm
verständlich zu machen.
Technische Informatik für Ingenieure (TIFI)
WS 09/10
65
Zusicherungen bei Verzweigungen
¾
»
Eine Zusicherung ist eine Aussage über den Zustand eines Programmes (d.h. den Inhalt
seiner Variablen) an einer bestimmten Stelle. Sie wird als Kommentar geschrieben.
½
if (a > b) {
if (a > c)
x = a;
else
x = c;
} else {
if (b > c)
x = b;
else
x = c;
}
Rainer Feldmann
Universität Paderborn
¼
/* a > b */
/* a > b und a > c */
/* a > b und c >= a */
/* b >= a */
Zusicherungen helfen, ein Programm
verständlich zu machen.
Technische Informatik für Ingenieure (TIFI)
WS 09/10
65
Zusicherungen bei Verzweigungen
¾
»
Eine Zusicherung ist eine Aussage über den Zustand eines Programmes (d.h. den Inhalt
seiner Variablen) an einer bestimmten Stelle. Sie wird als Kommentar geschrieben.
½
if (a > b) {
if (a > c)
x = a;
else
x = c;
} else {
if (b > c)
x = b;
else
x = c;
}
Rainer Feldmann
Universität Paderborn
¼
/* a > b */
/* a > b und a > c */
/* a > b und c >= a */
/* b >= a */
/* b >= a und b > c */
Zusicherungen helfen, ein Programm
verständlich zu machen.
Technische Informatik für Ingenieure (TIFI)
WS 09/10
65
Zusicherungen bei Verzweigungen
¾
»
Eine Zusicherung ist eine Aussage über den Zustand eines Programmes (d.h. den Inhalt
seiner Variablen) an einer bestimmten Stelle. Sie wird als Kommentar geschrieben.
½
¼
if (a > b) {
/* a >
if (a > c)
/* a > b und a >
x = a;
else
/* a > b und c >=
x = c;
} else {
/* b >=
if (b > c) /* b >= a und b >
x = b;
else
/* b >= a und c >=
x = c;
}
Rainer Feldmann
Universität Paderborn
b */
c */
a */
a */
c */
Zusicherungen helfen, ein Programm
verständlich zu machen.
b */
Technische Informatik für Ingenieure (TIFI)
WS 09/10
65
Zusicherungen bei Verzweigungen
¾
»
Eine Zusicherung ist eine Aussage über den Zustand eines Programmes (d.h. den Inhalt
seiner Variablen) an einer bestimmten Stelle. Sie wird als Kommentar geschrieben.
½
¼
if (a > b) {
/* a >
if (a > c)
/* a > b und a >
x = a;
else
/* a > b und c >=
x = c;
} else {
/* b >=
if (b > c) /* b >= a und b >
x = b;
else
/* b >= a und c >=
x = c;
}
Rainer Feldmann
Universität Paderborn
b */
c */
a */
a */
c */
b */
Zusicherungen helfen, ein Programm
verständlich zu machen.
Mit den Zusicherungen ist sofort klar,
dass x nach Ausführung des Programmteils das Maximum der drei Werte
a,b,c enthält.
Technische Informatik für Ingenieure (TIFI)
WS 09/10
65
Negation zusammengesetzter Ausdrücke
Gilt im then-Zweig einer if-Anweisung ein zusammengesetzter Ausdruck A, so gilt im else-Zweig
die Negation !A von A.
'
$
Regeln von DeMorgan (1806-1871):
!(A && B)
!(A || B)
≡
≡
!A || !B
!A && !B
&
%
Beispiel:
if (0 <= x && x < 10)
...
else /* x < 0 || x >= 10 */
...
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
66
Effizienzbetrachtungen
$
'
Die Effizienz eines Programmes wird bzgl. zweier Masse gemessen:
• Zeit: Wie viele elementare Operationen führt das Programm aus ?
• Speicherplatz: Wie viele Speicherzellen benötigt das Programm zur Ausführung ?
&
%
if (a > b)
if (a > c) x = a; else x = c;
else
if (b > c) x = b; else x = c;
x = a;
if (b > x) x = b;
if (c > x) x = c;
Beide Programme berechnen in x das Maximum von a,b,c. Irgendwie ist das rechte Programm
kleiner“, vielleicht sogar schöner“.
”
”
Aber: Das linke Programm ist zeiteffizienter“: Es führt immer genau 2 Vergleiche und eine
”
Zuweisung aus. Das rechte Programm führt im Durchschnitt 2 Vergleiche und 2 Zuweisungen aus!
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
67
Verzweigung mit mehr als zwei Alternativen: die switch-Anweisung.
int month;
switch (month) {
case 1: case 3: case 5: case 7:
case 8: case 10: case 12 :
days = 31; break;
case 4: case 6: case 9: case 11:
days = 30; break;
case 2:
days = 28; break;
default:
Out.println("Error");
}
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
68
Verzweigung mit mehr als zwei Alternativen: die switch-Anweisung.
• Hinter dem Schlüsselwort switch muss
ein Ausdruck vom Typ int stehen.
int month;
switch (month) {
case 1: case 3: case 5: case 7:
case 8: case 10: case 12 :
days = 31; break;
case 4: case 6: case 9: case 11:
days = 30; break;
case 2:
days = 28; break;
default:
Out.println("Error");
}
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
68
Verzweigung mit mehr als zwei Alternativen: die switch-Anweisung.
int month;
switch (month) {
case 1: case 3: case 5: case 7:
case 8: case 10: case 12 :
days = 31; break;
case 4: case 6: case 9: case 11:
days = 30; break;
case 2:
days = 28; break;
default:
Out.println("Error");
}
Rainer Feldmann
Universität Paderborn
• Hinter dem Schlüsselwort switch muss
ein Ausdruck vom Typ int stehen.
• In Abhängigkeit vom Wert dieses Ausdrucks wird einer der Anweisungsblöcke
ausgeführt.
Technische Informatik für Ingenieure (TIFI)
WS 09/10
68
Verzweigung mit mehr als zwei Alternativen: die switch-Anweisung.
int month;
switch (month) {
case 1: case 3: case 5: case 7:
case 8: case 10: case 12 :
days = 31; break;
case 4: case 6: case 9: case 11:
days = 30; break;
case 2:
days = 28; break;
default:
Out.println("Error");
}
Rainer Feldmann
Universität Paderborn
• Hinter dem Schlüsselwort switch muss
ein Ausdruck vom Typ int stehen.
• In Abhängigkeit vom Wert dieses Ausdrucks wird einer der Anweisungsblöcke
ausgeführt.
• Anweisungsblöcke werden mit break abgeschlossen, sofern nicht noch ein späterer Anweisungsblock ausgeführt werden
soll.
Technische Informatik für Ingenieure (TIFI)
WS 09/10
68
Verzweigung mit mehr als zwei Alternativen: die switch-Anweisung.
int month;
switch (month) {
case 1: case 3: case 5: case 7:
case 8: case 10: case 12 :
days = 31; break;
case 4: case 6: case 9: case 11:
days = 30; break;
case 2:
days = 28; break;
default:
Out.println("Error");
}
Rainer Feldmann
Universität Paderborn
• Hinter dem Schlüsselwort switch muss
ein Ausdruck vom Typ int stehen.
• In Abhängigkeit vom Wert dieses Ausdrucks wird einer der Anweisungsblöcke
ausgeführt.
• Anweisungsblöcke werden mit break abgeschlossen, sofern nicht noch ein späterer Anweisungsblock ausgeführt werden
soll.
• Hinter default steht der Anweisungsblock, der ausgeführt wird, wenn keiner
der vorhergegangenen Anweisungblöcke
ausgeführt wurde.
Technische Informatik für Ingenieure (TIFI)
WS 09/10
68
Verzweigung mit mehr als zwei Alternativen: die switch-Anweisung.
int month;
switch (month) {
case 1: case 3: case 5: case 7:
case 8: case 10: case 12 :
days = 31; break;
case 4: case 6: case 9: case 11:
days = 30; break;
case 2:
days = 28; break;
default:
Out.println("Error");
}
Rainer Feldmann
Universität Paderborn
• Hinter dem Schlüsselwort switch muss
ein Ausdruck vom Typ int stehen.
• In Abhängigkeit vom Wert dieses Ausdrucks wird einer der Anweisungsblöcke
ausgeführt.
• Anweisungsblöcke werden mit break abgeschlossen, sofern nicht noch ein späterer Anweisungsblock ausgeführt werden
soll.
• Hinter default steht der Anweisungsblock, der ausgeführt wird, wenn keiner
der vorhergegangenen Anweisungblöcke
ausgeführt wurde.
Technische Informatik für Ingenieure (TIFI)
WS 09/10
68
Verzweigung mit mehr als zwei Alternativen: die switch-Anweisung.
Frage: Warum nicht mit
if (month==1 || ... || month==12)
days = 31;
else if (month==4 || ... || month==11)
days = 30;
else if (month==2)
days = 28;
else
Out.println("Error");
• Die switch-Anweisung ist schneller, weil sie die Alternativen nicht wie die if-Anweisung eine nach der anderen
prüft, sondern über eine Tabelle die passenden Blöcke direkt nach Auswertung des int-Ausdrucks anspringt. Sie
benötigt aber Speicherplatz für die Tabelle.
• Die switch-Anweisung ist bei mehr als 2 Alternativen übersichtlicher.
• Die switch-Anweisung kann viel Speicherplatz benötigen, wenn die einzelnen Alternativen sehr weit auseinanderliegende Werte haben: switch (...) { case 0: ... break; case 1000: ... break; default: }
Rainer Feldmann
Universität Paderborn
Technische Informatik für Ingenieure (TIFI)
WS 09/10
69
Syntax der Verzweigungen
• Verzweigung mit zwei Alternativen
<ifStatement>
::=
if ( <boolAusdruck> ) <Statement> [ else <Statement> ]
• Verzweigung mit mehr als zwei Alternativen
<switchStatement>
<switchGruppe>
<switchLabel>
<Block>
Rainer Feldmann
Universität Paderborn
::=
::=
::=
::=
switch ( <intAusdruck> ) { <switchGruppe> }
<switchLabel> { <switchLabel> } <Block> { <Block> }
case <konstAusdruck> : | default:
<Anweisungen> | <Variablendefinition> | . . .
Technische Informatik für Ingenieure (TIFI)
WS 09/10
70
Zugehörige Unterlagen
Herunterladen