DVG1 - 06 - Ablaufsteuerung1 Ablaufsteuerung. DVG1 - 06 - Ablaufsteuerung 2 if... else... if (...

23
DVG1 - 06 - Ablaufsteuerung 1 Ablaufsteuerung

Transcript of DVG1 - 06 - Ablaufsteuerung1 Ablaufsteuerung. DVG1 - 06 - Ablaufsteuerung 2 if... else... if (...

Page 1: DVG1 - 06 - Ablaufsteuerung1 Ablaufsteuerung. DVG1 - 06 - Ablaufsteuerung 2 if... else... if ( boolausdr ) {... // if-Block } else {... // else-Block.

DVG1 - 06 - Ablaufsteuerung 1

Ablaufsteuerung

Page 2: DVG1 - 06 - Ablaufsteuerung1 Ablaufsteuerung. DVG1 - 06 - Ablaufsteuerung 2 if... else... if ( boolausdr ) {... // if-Block } else {... // else-Block.

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

Page 3: DVG1 - 06 - Ablaufsteuerung1 Ablaufsteuerung. DVG1 - 06 - Ablaufsteuerung 2 if... else... if ( boolausdr ) {... // if-Block } else {... // 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}

Page 4: DVG1 - 06 - Ablaufsteuerung1 Ablaufsteuerung. DVG1 - 06 - Ablaufsteuerung 2 if... else... if ( boolausdr ) {... // if-Block } else {... // else-Block.

DV

G1

- 06 - A

bla

ufste

ueru

ng

4

if-Block

true

else-Block

falseboolausdr

Page 5: DVG1 - 06 - Ablaufsteuerung1 Ablaufsteuerung. DVG1 - 06 - Ablaufsteuerung 2 if... else... if ( boolausdr ) {... // if-Block } else {... // else-Block.

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;

}

Page 6: DVG1 - 06 - Ablaufsteuerung1 Ablaufsteuerung. DVG1 - 06 - Ablaufsteuerung 2 if... else... if ( boolausdr ) {... // if-Block } else {... // else-Block.

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;

Page 7: DVG1 - 06 - Ablaufsteuerung1 Ablaufsteuerung. DVG1 - 06 - Ablaufsteuerung 2 if... else... if ( boolausdr ) {... // if-Block } else {... // else-Block.

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

Page 8: DVG1 - 06 - Ablaufsteuerung1 Ablaufsteuerung. DVG1 - 06 - Ablaufsteuerung 2 if... else... if ( boolausdr ) {... // if-Block } else {... // else-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

Page 9: DVG1 - 06 - Ablaufsteuerung1 Ablaufsteuerung. DVG1 - 06 - Ablaufsteuerung 2 if... else... if ( boolausdr ) {... // if-Block } else {... // else-Block.

DV

G1

- 06 - A

bla

ufste

ueru

ng

9

ausdruck

block1break

c1

block2break

c2

blockNbreak

cN

default-block

sonst

Page 10: DVG1 - 06 - Ablaufsteuerung1 Ablaufsteuerung. DVG1 - 06 - Ablaufsteuerung 2 if... else... if ( boolausdr ) {... // if-Block } else {... // else-Block.

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

Page 11: DVG1 - 06 - Ablaufsteuerung1 Ablaufsteuerung. DVG1 - 06 - Ablaufsteuerung 2 if... else... if ( boolausdr ) {... // if-Block } else {... // else-Block.

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;

...

}

...

}

Page 12: DVG1 - 06 - Ablaufsteuerung1 Ablaufsteuerung. DVG1 - 06 - Ablaufsteuerung 2 if... else... if ( boolausdr ) {... // if-Block } else {... // else-Block.

DV

G1

- 06 - A

bla

ufste

ueru

ng

12

while

label:

while (boolausdr)

{

...

break label;

...

continue label;

... // while-block

}

Page 13: DVG1 - 06 - Ablaufsteuerung1 Ablaufsteuerung. DVG1 - 06 - Ablaufsteuerung 2 if... else... if ( boolausdr ) {... // if-Block } else {... // else-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.

Page 14: DVG1 - 06 - Ablaufsteuerung1 Ablaufsteuerung. DVG1 - 06 - Ablaufsteuerung 2 if... else... if ( boolausdr ) {... // if-Block } else {... // else-Block.

DV

G1

- 06 - A

bla

ufste

ueru

ng

14

true

while-Blockcontinuebreak

boolausdr

false

Page 15: DVG1 - 06 - Ablaufsteuerung1 Ablaufsteuerung. DVG1 - 06 - Ablaufsteuerung 2 if... else... if ( boolausdr ) {... // if-Block } else {... // else-Block.

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;

}

Page 16: DVG1 - 06 - Ablaufsteuerung1 Ablaufsteuerung. DVG1 - 06 - Ablaufsteuerung 2 if... else... if ( boolausdr ) {... // if-Block } else {... // else-Block.

DV

G1

- 06 - A

bla

ufste

ueru

ng

16

do ... while

label:

do

{

...

break label;

...

continue label;

... // while-block

} while (boolausdr)

Page 17: DVG1 - 06 - Ablaufsteuerung1 Ablaufsteuerung. DVG1 - 06 - Ablaufsteuerung 2 if... else... if ( boolausdr ) {... // if-Block } else {... // else-Block.

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.

Page 18: DVG1 - 06 - Ablaufsteuerung1 Ablaufsteuerung. DVG1 - 06 - Ablaufsteuerung 2 if... else... if ( boolausdr ) {... // if-Block } else {... // else-Block.

DV

G1

- 06 - A

bla

ufste

ueru

ng

18

while-Blockcontinuebreak

boolausdr

true

false

Page 19: DVG1 - 06 - Ablaufsteuerung1 Ablaufsteuerung. DVG1 - 06 - Ablaufsteuerung 2 if... else... if ( boolausdr ) {... // if-Block } else {... // else-Block.

DV

G1

- 06 - A

bla

ufste

ueru

ng

19

// Einlesen einer Zahl

do

{

read (Zahl);

} while (Eingabe ungueltig);

Page 20: DVG1 - 06 - Ablaufsteuerung1 Ablaufsteuerung. DVG1 - 06 - Ablaufsteuerung 2 if... else... if ( boolausdr ) {... // if-Block } else {... // else-Block.

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;

}

}

Page 21: DVG1 - 06 - Ablaufsteuerung1 Ablaufsteuerung. DVG1 - 06 - Ablaufsteuerung 2 if... else... if ( boolausdr ) {... // if-Block } else {... // else-Block.

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.

Page 22: DVG1 - 06 - Ablaufsteuerung1 Ablaufsteuerung. DVG1 - 06 - Ablaufsteuerung 2 if... else... if ( boolausdr ) {... // if-Block } else {... // else-Block.

DV

G1

- 06 - A

bla

ufste

ueru

ng

22

ausdr1

boolausdr2

ausdr3

for-Blockcontinuebreak

true

false

Page 23: DVG1 - 06 - Ablaufsteuerung1 Ablaufsteuerung. DVG1 - 06 - Ablaufsteuerung 2 if... else... if ( boolausdr ) {... // if-Block } else {... // else-Block.

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