DVG1 - 06 - Ablaufsteuerung1 Ablaufsteuerung. DVG1 - 06 - Ablaufsteuerung 2 if... else... if (...
-
Upload
bartholomaus-strevel -
Category
Documents
-
view
115 -
download
0
Transcript of DVG1 - 06 - Ablaufsteuerung1 Ablaufsteuerung. DVG1 - 06 - Ablaufsteuerung 2 if... else... if (...
DVG1 - 06 - Ablaufsteuerung 1
Ablaufsteuerung
DV
G1
- 06 - A
bla
ufste
ueru
ng
2
if ... else ...
if ( boolausdr )
{
... // if-Block
}
else
{
... // else-Block
}
• boolausdr wird ausgewertet
• boolausdr == true, dann abarbeiten des if-Blocks
• boolausdr == false, dann abarbeiten des else-Blocks
• weiterarbeiten nach dem else-Block
DV
G1
- 06 - A
bla
ufste
ueru
ng
3
• die else-Anweisung kann entfallen
• die else-Anweisung gehört immer zu der innersten if-Anweisung, die noch keine else-Anweisung besitzt:
if (b1)
if (b2) {if2-Block}
else {else1-Block}
• korrekt sind folgende Varianten:
if (b1)
if (b2) {if2-Block}
else;
else {else1-Block}
if (b1)
{
if (b2) {if2-Block}
}
else {else1-Block}
DV
G1
- 06 - A
bla
ufste
ueru
ng
4
if-Block
true
else-Block
falseboolausdr
DV
G1
- 06 - A
bla
ufste
ueru
ng
5
// Berechnung des Maximums max von x und y
if ( x>y )
{
max=x;
}
else
{
max=y;
}
DV
G1
- 06 - A
bla
ufste
ueru
ng
6
// Berechnung des Maximums max von x und y
if ( x>y ) max=x;
else max=y;
// Berechnung des Maximums max von x und y
max=(x>y)?x:y;
// Berechnung des Maximums max von x und y
if (x>(max=y)) max=x;
DV
G1
- 06 - A
bla
ufste
ueru
ng
7
switch...case...
label:
switch (int-ausdr)
{
case c1 : ... // block1
case c2 : ... // block2
...
case cN : ... // blockN
default : ... // default-block
}
• int-ausdr berechnen
• wenn int-ausdr==c1 block1
• wenn int-ausdr==c2 block2
• wenn int-ausdr==cN blockN
• sonst default-block
DV
G1
- 06 - A
bla
ufste
ueru
ng
8
default-Klausel kann fehlen, kann auch zwischen case-Klauseln stehen, darf höchstens einmal auftreten
jeder Wert in einer case-Klausel darf nur einmal auftreten
break-Anweisung beendet den ausgeführten Block und springt an die Anweisung nach dem switch-Block
break label-Anweisung beendet den ausgeführten Block und springt an die Anweisung nach dem switch-Block der mit label: markiert ist
Reihenfolge der case-Klauseln und der default-Klausel ist wesentlich für die Funktion
DV
G1
- 06 - A
bla
ufste
ueru
ng
9
ausdruck
block1break
c1
block2break
c2
blockNbreak
cN
default-block
sonst
DV
G1
- 06 - A
bla
ufste
ueru
ng
10
//Berechnung der Tage eines Monats unter//Beruecksichtigung der Schaltjahresregeln
int monat, jahr, tage;
switch (monat){case 1: case 3: case 5: case 7: case 8: case 10: case 12:tage=31; break;
case 4: case 6: case 9: case 11:tage=30; break;
case 2: tage=28;if ( ( jahr%4 == 0) && ( jahr%100 != 0 | jahr%400 == 0) )tage++;break;
default : System.out.println("Falsche Monatsangabe");}
DV
G1
- 06 - A
bla
ufste
ueru
ng
11
label1:
switch (a1)
{
case c11: ....
...
case c1N:
label2:
switch (a2)
{
case c21: ... ; break;
...
case c2M: ... ; break label1;
...
}
...
}
DV
G1
- 06 - A
bla
ufste
ueru
ng
12
while
label:
while (boolausdr)
{
...
break label;
...
continue label;
... // while-block
}
DV
G1
- 06 - A
bla
ufste
ueru
ng
13
• Der boolausdruck wird vor Ausführung des while-Blockes
berechnet. Ist boolausdr==true, wird der while-Block ausgeführt und
anschließend mit der Berechnung von boolausdr fortgesetzt.
• Der while-Zyklus kann durch eine break-Anweisung verlassen
werden.
• Die continue-Anweisung springt zum Ende des while-Blockes.
• Bei geschachtelten Zyklen wird mit der Anweisung break label; der
mit label markierte Zyklus verlassen. continue label springt zum
Ende des mit label markierten Blockes.
DV
G1
- 06 - A
bla
ufste
ueru
ng
14
true
while-Blockcontinuebreak
boolausdr
false
DV
G1
- 06 - A
bla
ufste
ueru
ng
15
// Berechnung der groessten Zahl n fuer die
// n! < eine vorgegebene Zahl n0 ist.
int n0 = 1000000;
int n = 1 , nf = 1;
while (nf*(n+1) < n0)
{
nf *= ++n; // n=n+1; nf=n*nf;
}
DV
G1
- 06 - A
bla
ufste
ueru
ng
16
do ... while
label:
do
{
...
break label;
...
continue label;
... // while-block
} while (boolausdr)
DV
G1
- 06 - A
bla
ufste
ueru
ng
17
• Zuerst wird der while-Block ausgeführt. Anschließend wird
boolausdr berechnet. Ist boolausdr==true, wird der while-Block
ausgeführt und anschließend mit der Berechnung von boolausdr
fortgesetzt.
• Der while-Zyklus kann durch eine break-Anweisung verlassen
werden.
• Die continue-Anweisung springt zum Ende des while-Blockes, d.h.
es wird mit der Berechnung von boolausdruck fortgesetzt.
• Bei geschachtelten Zyklen wird mit der Anweisung break label; der
mit label markierte Zyklus verlassen. continue label springt zum
Ende des mit label markierten Blockes.
DV
G1
- 06 - A
bla
ufste
ueru
ng
18
while-Blockcontinuebreak
boolausdr
true
false
DV
G1
- 06 - A
bla
ufste
ueru
ng
19
// Einlesen einer Zahl
do
{
read (Zahl);
} while (Eingabe ungueltig);
DV
G1
- 06 - A
bla
ufste
ueru
ng
20
for
label:
for (ausdr1 ; boolausdr2 ; ausdr3 )
{
... //for-Block
}
ist äquivalent zu:
{
ausdr1;
while (boolausdr2)
{
... //for-Block
ausdr3;
}
}
DV
G1
- 06 - A
bla
ufste
ueru
ng
21
• ausdr1 kann Variablen-Deklarationen enthalten. Diese gelten im ganzen for-Block und sind außerhalb wieder unbekannt.
• Die for-Schleife wird solange durchlaufen, wie boolausdr2==true gilt.
• Mit der continue-Anweisung wird an das Ende des for-Blockes gesprungen und mit der Berechnung von ausdr3 fortgesetzt.
• Die break-Anweisung verzweigt zur ersten Anweisung nach der for-Schleife.
• Die break label; bzw. continue label; Anweisungen verzweigen zu den entsprechenden Stellen in der mit label markierten for-Schleife.
DV
G1
- 06 - A
bla
ufste
ueru
ng
22
ausdr1
boolausdr2
ausdr3
for-Blockcontinuebreak
true
false
DV
G1
- 06 - A
bla
ufste
ueru
ng
23
// Berechnung von Zufallszahlen 1, 2, ... 6
// Bestimmung der Anzahlen
int ran;
int i1=0, i2=0, i3=0, i4=0, i5=0, i6=0;
int imax=10000;
for (int i=1; i<=imax; i++){ ran=(int)(Math.random()*6.0+1.0); switch (ran) { case 1: i1++; break; case 2: i2++; break; case 3: i3++; break; case 4: i4++; break; case 5: i5++; break; case 6: i6++; break; }}