dvg1 - ablaufsteuerung1 ablaufsteuerung. dvg1 - ablaufsteuerung2 if... else... if ( boolausdr ) {......
Post on 05-Apr-2015
110 Views
Preview:
TRANSCRIPT
DVG1 - Ablaufsteuerung 1
Ablaufsteuerung
DVG1 - Ablaufsteuerung 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
DVG1 - Ablaufsteuerung 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};
DVG1 - Ablaufsteuerung 4
if-Block
true
else-Block
falseboolausdr
DVG1 - Ablaufsteuerung 5
// Berechnung des Maximums max von x und y
if ( x>y )
{
max=x;
}
else
{
max=y;
}
DVG1 - Ablaufsteuerung 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;
DVG1 - Ablaufsteuerung 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
DVG1 - Ablaufsteuerung 8
default-Klausel kann fehlen, kann auch zwischen case-Klauseln stehen, darf höchstens einmal auftreten
jeder Wert in einer case-Klausel dar 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
DVG1 - Ablaufsteuerung 9
ausdruck
block1break
c1
block2break
c2
blockNbreak
cN
default-block
sonst
DVG1 - Ablaufsteuerung 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“);}
DVG1 - Ablaufsteuerung 11
label1:
switch (a1)
{
case c11: ....
...
case c1N:
label2:
switch (a2)
{
case c21: ... ; break;
...
case c2M: ... ; break label1;
...
}
...
}
DVG1 - Ablaufsteuerung 12
whilelabel:
while (boolausdr)
{
...
break label;
...
continue label;
... // while-block
}
DVG1 - Ablaufsteuerung 13
• Der boolausdruck wird vor Ausführung des while-Blockes
berechnet. Ist boolausdr==true, wird der while-Block ausgeführt und
anschließende 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.
DVG1 - Ablaufsteuerung 14
true
while-Blockcontinuebreak
boolausdr
false
DVG1 - Ablaufsteuerung 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;
}
DVG1 - Ablaufsteuerung 16
do ... whilelabel:
do
{
...
break label;
...
continue label;
... // while-block
} while (boolausdr)
DVG1 - Ablaufsteuerung 17
• Zuerst wird der der while-Block ausgeführt. Anschließend wird
boolausdr berechnet. Ist boolausdr==true, wird der while-Block
ausgeführt und anschließende 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 braek label; der
mit label markierte Zyklus verlassen. continue label springt zum
Ende des mit label markierten Blockes.
DVG1 - Ablaufsteuerung 18
while-Blockcontinuebreak
boolausdr
true
false
DVG1 - Ablaufsteuerung 19
// Einlesen einer Zahl
do
{
read (Zahl);
} while (Eingabe ungueltig);
DVG1 - Ablaufsteuerung 20
forlabel:
for (ausdr1 ; boolausdr2 ; ausdr3 )
{
... //for-Block
}
ist äquivalent zu:
{
ausdr1;
while (boolausdr2)
{
... //for-Block
ausdr3;
}
}
DVG1 - Ablaufsteuerung 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.
DVG1 - Ablaufsteuerung 22
ausdr1
boolausdr2
ausdr3
for-Blockcontinue
break
true
false
DVG1 - Ablaufsteuerung 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; }}
top related