68
Einf¨ uhrung in die Informatik: Programmierung und Softwareentwicklung Wintersemester 2018/19 Kapitel 4: Anweisungen und Kontrollstrukturen Prof. Dr. David Sabel Lehr- und Forschungseinheit f¨ ur Theoretische Informatik Institut f¨ ur Informatik, LMU M¨ unchen WS 2018/19 Stand der Folien: 7. November 2018 Die Inhalte dieser Folien basieren – mit freundlicher Genehmigung – tlw. auf Folien von Prof. Dr. Rolf Hennicker aus dem WS 2017/18 und auf Folien von PD Dr. Ulrich Sch¨ opp aus dem WS 2010/11

Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Einfuhrung in die Informatik:Programmierung und SoftwareentwicklungWintersemester 2018/19

Kapitel 4: Anweisungen undKontrollstrukturen

Prof. Dr. David Sabel

Lehr- und Forschungseinheit fur Theoretische Informatik

Institut fur Informatik, LMU Munchen

WS 2018/19

Stand der Folien: 7. November 2018

Die Inhalte dieser Folien basieren – mit freundlicher Genehmigung – tlw. auf Folien von Prof. Dr. RolfHennicker aus dem WS 2017/18 und auf Folien von PD Dr. Ulrich Schopp aus dem WS 2010/11

Page 2: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Ziele

Kontrollstrukturen in imperativen Programmenkennenlernen und verstehen

Kontrollstrukturen:

VariablendeklarationenZuweisungenBlockeFallunterscheidung (Verzweigung)Schleifen

Syntax und Semantik

Realisierung der Kontrollstrukturen in Java

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 2/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 3: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Anweisungen

Anweisungen (Statements, Befehle) sind dieGrundelemente imperativer Programmiersprachen zurFestlegung (Kontrolle) des Ablaufs eines Programms.

Wir unterscheiden folgende grundlegende Arten vonAnweisungen:

Syntax:

Statement = VariableDeclaration (Deklarationsanweisung)|Assignment (Zuweisung)|Block (Block)|Conditional (Fallunterscheidung)|Iteration (Wiederholungsanweisung)

Durch Ausfuhrung einer Anweisung wird ein”alter“ Zustand

in einen”neuen“ Zustand uberfuhrt (Semantik!)

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 3/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 4: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Deklarationsanweisungen

Statement = VariableDeclaration (Deklarationsanweisung)|Assignment (Zuweisung)|Block (Block)|Conditional (Fallunterscheidung)|Iteration (Wiederholungsanweisung)

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 4/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 5: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Deklarationsanweisungen (2)

Eine Deklarationsanweisung nennt man auchlokale Variablendefinition

Syntax (Wiederholung):

VariableDeclaration =Type VariableDeclarator{ "," VariableDeclarator} ";"

VariableDeclarator = NamedVariable [ "=" Expression ]

Beispiel: int x = 5, y = 7;

Wirkung (Semantik):

Es wird ein Speicherplatz angelegt, auf den mit dem symbolischenNamen der deklarierten Variablen zugegriffen werden kann.

Dort wird ein”Default“-Wert oder der durch Expression bestimm-

te Initialwert gespeichert. Z.B. [(x, 5), (y, 7)].

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 5/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 6: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Deklarationsanweisungen (3)

Beachte:Bereits deklarierte Variablen durfen nicht nocheinmal deklariertwerden!

Beispiel:

1 public class TestVarDeclTwice {

2 public static void main(String [] args) {

3 int x = 7;

4 int x = 8;

5 System.out.println(x);

6 }

7 }

javac TestVarDeclTwice.java

TestVarDeclTwice.java:4: error: variable x is already

defined in method main(String[])

int x = 8;

^

1 error

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 6/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 7: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Zuweisungen

Statement = VariableDeclaration (Deklarationsanweisung)|Assignment (Zuweisung)|Block (Block)|Conditional (Fallunterscheidung)|Iteration (Wiederholungsanweisung)

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 7/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 8: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Zuweisungen (2)

Syntax:Assignment = Variable "=" Expression ";"

Wirkung:

1 Zunachst wird der Wert von Expression im”alten“ Zustand

berechnet.

2 Dieser Wert wird im Nachfolgezustand der Variablen Variable alsneuer Wert zugewiesen.

Beispiel: [(x, 5), (y, 7)] x = 2*x+y

Beachte den Unterschied zwischen”=“ (Zuweisung) und

”==“ (Vergleich)!

Nebenbedingung fur die Zuweisung Variable "=" Expression ";" :

Der Typ der Variablen Variable muss mit dem Typ des AusdrucksExpression vertraglich sein.

Die Variable Variable muss vorher deklariert sein.

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 8/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 9: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Zuweisungen (2)

Syntax:Assignment = Variable "=" Expression ";"

Wirkung:

1 Zunachst wird der Wert von Expression im”alten“ Zustand

berechnet.

2 Dieser Wert wird im Nachfolgezustand der Variablen Variable alsneuer Wert zugewiesen.

Beispiel: [(x, 5), (y, 7)] x = 2*x + y︸ ︷︷ ︸2*5+7 = 17

;

[(x, 17), (y, 7)]

Beachte den Unterschied zwischen”=“ (Zuweisung) und

”==“ (Vergleich)!

Nebenbedingung fur die Zuweisung Variable "=" Expression ";" :

Der Typ der Variablen Variable muss mit dem Typ des AusdrucksExpression vertraglich sein.

Die Variable Variable muss vorher deklariert sein.

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 8/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 10: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Zuweisungen (2)

Syntax:Assignment = Variable "=" Expression ";"

Wirkung:

1 Zunachst wird der Wert von Expression im”alten“ Zustand

berechnet.

2 Dieser Wert wird im Nachfolgezustand der Variablen Variable alsneuer Wert zugewiesen.

Beispiel: [(x, 5), (y, 7)] x = 2*x + y︸ ︷︷ ︸2*5+7 = 17

; [(x, 17), (y, 7)]

Beachte den Unterschied zwischen”=“ (Zuweisung) und

”==“ (Vergleich)!

Nebenbedingung fur die Zuweisung Variable "=" Expression ";" :

Der Typ der Variablen Variable muss mit dem Typ des AusdrucksExpression vertraglich sein.

Die Variable Variable muss vorher deklariert sein.

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 8/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 11: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Zuweisungen (2)

Syntax:Assignment = Variable "=" Expression ";"

Wirkung:

1 Zunachst wird der Wert von Expression im”alten“ Zustand

berechnet.

2 Dieser Wert wird im Nachfolgezustand der Variablen Variable alsneuer Wert zugewiesen.

Beispiel: [(x, 5), (y, 7)] x = 2*x + y︸ ︷︷ ︸2*5+7 = 17

; [(x, 17), (y, 7)]

Beachte den Unterschied zwischen”=“ (Zuweisung) und

”==“ (Vergleich)!

Nebenbedingung fur die Zuweisung Variable "=" Expression ";" :

Der Typ der Variablen Variable muss mit dem Typ des AusdrucksExpression vertraglich sein.

Die Variable Variable muss vorher deklariert sein.

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 8/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 12: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Zuweisungen (2)

Syntax:Assignment = Variable "=" Expression ";"

Wirkung:

1 Zunachst wird der Wert von Expression im”alten“ Zustand

berechnet.

2 Dieser Wert wird im Nachfolgezustand der Variablen Variable alsneuer Wert zugewiesen.

Beispiel: [(x, 5), (y, 7)] x = 2*x + y︸ ︷︷ ︸2*5+7 = 17

; [(x, 17), (y, 7)]

Beachte den Unterschied zwischen”=“ (Zuweisung) und

”==“ (Vergleich)!

Nebenbedingung fur die Zuweisung Variable "=" Expression ";" :

Der Typ der Variablen Variable muss mit dem Typ des AusdrucksExpression vertraglich sein.

Die Variable Variable muss vorher deklariert sein.

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 8/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 13: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Zuweisung: Abkurzende Schreibweisen

Abkurzungen:

x++; steht fur x = x + 1;

x--; steht fur x = x - 1;

x operation= Ausdruck ; steht fur x = x operation Ausdruck;

Beispiele:

x += y; steht fur x = x + y;

b &= c; steht fur b = b & c;

x += 3* y; steht fur x = x + (3 * y);

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 9/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 14: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Blocke

Statement = VariableDeclaration (Deklarationsanweisung)|Assignment (Zuweisung)|Block (Block)|Conditional (Fallunterscheidung)|Iteration (Wiederholungsanweisung)

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 10/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 15: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Blocke (2)

Ein Block fugt mehrere Anweisungen durch geschweifte Klammern zueiner einzigen Anweisung zusammen.

Syntax:Block = "{"{Statement} "}"

Wirkung:

Die Anweisungen im Block werden in der Reihenfolge derAufschreibung hintereinander ausgefuhrt.

Der durch einen Block bewirkte Zustandsubergang erfolgt alsodurch Hintereinanderausfuhrung der Zustandsubergange dereinzelnen Anweisungen.

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 11/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 16: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Blocke (3)

Beispiel:

[(x, 5), (y, 7)] {x = 2*x+y; y = x-2;} [(x, 17), (y, 15)]

denn:

[(x, 5), (y, 7)] x = 2*x+y; [(x, 17), (y, 7)]

und [(x, 17), (y, 7)] y = x-2; [(x, 17), (y, 15)]

Allgemein:wenn σi Statement i+1 σi+1 fur i = 0, . . . , n− 1,dann σ0 { Statement 1; . . . , Statement n} σn

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 12/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 17: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Gultigkeitsbereich

Der Gultigkeitsbereich einer lokalen Variablen ist der Block,in dem die Variable deklariert wurde.Außerhalb dieses Blocks existiert die Variable nicht.Blocke konnen geschachtelt werden.In einem untergeordneten Block sind Variable einesubergeordneten Blocks gultig und durfen dort nicht nocheinmal deklariert werden.

Beispiel:

Gultigkeits-bereich vonwert

Gultigkeits-bereich vontotal

{

int wert = 0;

wert = wert + 17;

{

int total = 100;

wert = wert - total;

}

wert = 2 * wert;

}

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 13/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 18: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Gultigkeitsbereich

Der Gultigkeitsbereich einer lokalen Variablen ist der Block,in dem die Variable deklariert wurde.Außerhalb dieses Blocks existiert die Variable nicht.Blocke konnen geschachtelt werden.In einem untergeordneten Block sind Variable einesubergeordneten Blocks gultig und durfen dort nicht nocheinmal deklariert werden.

Beispiel:

Gultigkeits-bereich vonwert

Gultigkeits-bereich vontotal

{

int wert = 0;

wert = wert + 17;

{

int total = 100;

wert = wert - total;

}

wert = 2 * wert;

}

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 13/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 19: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Gultigkeitsbereich

Der Gultigkeitsbereich einer lokalen Variablen ist der Block,in dem die Variable deklariert wurde.Außerhalb dieses Blocks existiert die Variable nicht.Blocke konnen geschachtelt werden.In einem untergeordneten Block sind Variable einesubergeordneten Blocks gultig und durfen dort nicht nocheinmal deklariert werden.

Beispiel:

Gultigkeits-bereich vonwert

Gultigkeits-bereich vontotal

{

int wert = 0;

wert = wert + 17;

{

int total = 100;

wert = wert - total;

}

wert = 2 * wert;

}

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 13/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 20: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Veranderung des Speichers

{

int wert = 0;

wert = wert + 17;

{

int total = 100;

wert = wert - total;

}

wert = 2 * wert;

}

0wert 17wert

100total

17wert

100total

-83wert -166wert

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 14/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 21: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Lokale Variablen im Speicher

Lokale Variablen werden stapelartig im Speicher abgelegt.

Wird eine Variablendeklaration abgearbeitet, so wird ein neuerSpeicherplatz fur diese Variable oben auf den Stapel gelegt(allokiert).

Am Ende eines Blocks werden alle Variablen (von oben) vom Stapelentfernt, die in diesem Block deklariert wurden.

1 ...

{

2 int y = 3;

3 double z = 2.0;

...

}

4 ...

1

. . .

y 3

2

y 3

z 2.0

3

. . .

4

. . .

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 15/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 22: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Lokale Variablen im Speicher

Lokale Variablen werden stapelartig im Speicher abgelegt.

Wird eine Variablendeklaration abgearbeitet, so wird ein neuerSpeicherplatz fur diese Variable oben auf den Stapel gelegt(allokiert).

Am Ende eines Blocks werden alle Variablen (von oben) vom Stapelentfernt, die in diesem Block deklariert wurden.

1 ...

{

2 int y = 3;

3 double z = 2.0;

...

}

4 ... 1

. . .

y 3

2

y 3

z 2.0

3

. . .

4

. . .

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 15/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 23: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Lokale Variablen im Speicher

Lokale Variablen werden stapelartig im Speicher abgelegt.

Wird eine Variablendeklaration abgearbeitet, so wird ein neuerSpeicherplatz fur diese Variable oben auf den Stapel gelegt(allokiert).

Am Ende eines Blocks werden alle Variablen (von oben) vom Stapelentfernt, die in diesem Block deklariert wurden.

1 ...

{

2 int y = 3;

3 double z = 2.0;

...

}

4 ... 1

. . .

y 3

2

y 3

z 2.0

3

. . .

4

. . .

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 15/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 24: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Lokale Variablen im Speicher

Lokale Variablen werden stapelartig im Speicher abgelegt.

Wird eine Variablendeklaration abgearbeitet, so wird ein neuerSpeicherplatz fur diese Variable oben auf den Stapel gelegt(allokiert).

Am Ende eines Blocks werden alle Variablen (von oben) vom Stapelentfernt, die in diesem Block deklariert wurden.

1 ...

{

2 int y = 3;

3 double z = 2.0;

...

}

4 ... 1

. . .

y 3

2

y 3

z 2.0

3

. . .

4

. . .

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 15/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 25: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Lokale Variablen im Speicher

Lokale Variablen werden stapelartig im Speicher abgelegt.

Wird eine Variablendeklaration abgearbeitet, so wird ein neuerSpeicherplatz fur diese Variable oben auf den Stapel gelegt(allokiert).

Am Ende eines Blocks werden alle Variablen (von oben) vom Stapelentfernt, die in diesem Block deklariert wurden.

1 ...

{

2 int y = 3;

3 double z = 2.0;

...

}

4 ... 1

. . .

y 3

2

y 3

z 2.0

3

. . .

4

. . .

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 15/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 26: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Exkurs: Stack (auch Keller, Stapelspeicher) (2)

Ein Stack ist eine Datenstruktur, in die Elemente eingefugtund in entgegen gesetzter Reihenfolge wiederherausgenommen werden konnen.

LIFO = Last In, First Out

Grundoperationen:

push(e): legt das Element e oben auf den Stapel

push(e). . . . . .

e

. . .

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 16/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 27: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Exkurs: Stack (auch Keller, Stapelspeicher) (2)

Ein Stack ist eine Datenstruktur, in die Elemente eingefugtund in entgegen gesetzter Reihenfolge wiederherausgenommen werden konnen.

LIFO = Last In, First Out

Grundoperationen:

push(e): legt das Element e oben auf den Stapel

push(e). . . . . .

e

. . .

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 16/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 28: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Exkurs: Stack (auch Keller, Stapelspeicher)

. . .

pop(): entfernt das oberste Element(und liefert es als Ergebnis)

pop(). . .. . .

e

e

top(): liefert das oberste Element als Ergebnis,ohne den Stapel zu verandern

top(). . .. . .

e e

e

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 17/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 29: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Stacks: Beispiel

push(E) push(I) push(N) pop() push(S) pop()

E

I

E

N

I

E

I

E

S

I

E

I

E

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 18/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 30: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Stacks: Beispiel

push(E)

push(I) push(N) pop() push(S) pop()

E

I

E

N

I

E

I

E

S

I

E

I

E

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 18/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 31: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Stacks: Beispiel

push(E)

push(I) push(N) pop() push(S) pop()

E

I

E

N

I

E

I

E

S

I

E

I

E

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 18/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 32: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Stacks: Beispiel

push(E) push(I)

push(N) pop() push(S) pop()

E

I

E

N

I

E

I

E

S

I

E

I

E

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 18/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 33: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Stacks: Beispiel

push(E) push(I)

push(N) pop() push(S) pop()

E

I

E

N

I

E

I

E

S

I

E

I

E

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 18/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 34: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Stacks: Beispiel

push(E) push(I) push(N)

pop() push(S) pop()

E

I

E

N

I

E

I

E

S

I

E

I

E

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 18/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 35: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Stacks: Beispiel

push(E) push(I) push(N)

pop() push(S) pop()

E

I

E

N

I

E

I

E

S

I

E

I

E

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 18/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 36: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Stacks: Beispiel

push(E) push(I) push(N) pop()

push(S) pop()

E

I

E

N

I

E

I

E

S

I

E

I

E

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 18/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 37: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Stacks: Beispiel

push(E) push(I) push(N) pop()

push(S) pop()

E

I

E

N

I

E

I

E

S

I

E

I

E

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 18/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 38: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Stacks: Beispiel

push(E) push(I) push(N) pop() push(S)

pop()

E

I

E

N

I

E

I

E

S

I

E

I

E

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 18/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 39: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Stacks: Beispiel

push(E) push(I) push(N) pop() push(S)

pop()

E

I

E

N

I

E

I

E

S

I

E

I

E

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 18/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 40: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Stacks: Beispiel

push(E) push(I) push(N) pop() push(S) pop()

E

I

E

N

I

E

I

E

S

I

E

I

E

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 18/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 41: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Stacks: Beispiel

push(E) push(I) push(N) pop() push(S) pop()

E

I

E

N

I

E

I

E

S

I

E

I

E

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 18/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 42: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Fallunterscheidungen (Bedingte Anweisung)

Statement = VariableDeclaration (Deklarationsanweisung)|Assignment (Zuweisung)|Block (Block)|Conditional (Fallunterscheidung)|Iteration (Wiederholungsanweisung)

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 19/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 43: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Fallunterscheidungen (Bedingte Anweisung) (2)

Syntax:

Conditional = IfStatement|SwitchStatementIfStatement = "if" "(" Expression ")" Statement [ "else" Statement ]

Beispiel

if (x >= 0) y = x;

else y = -x;

Nebenbedingung:Der Type des Ausdrucks Expression muss boolean sein.

Wirkung:

Wenn die Auswertung von Expression im aktuellen Zustand denWert true ergibt, wird das erste Statement ausgefuhrt.

Wenn die Auswertung von Expression im aktuellen Zustand denWert false ergibt und ein else-Zweig vorhanden ist, wird daszweite Statement ausgefuhrt.

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 20/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 44: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Fallunterscheidungen (Bedingte Anweisung) (3)

Formaler: (4 Falle wegen true/false und mit else/ohne else)

Wenn Expression im Zustand σ zu true auswertet, und σ Statement 1 σ′,dann σ if (Expression ) Statement 1 else Statement 2 σ′

Wenn Expression im Zustand σ zu false auswertet, und σ Statement 2 σ′,dann σ if (Expression ) Statement 1 else Statement 2 σ′

Wenn Expression im Zustand σ zu true auswertet, und σ Statement σ′,dann σ if (Expression ) Statement σ′

Wenn Expression im Zustand σ zu false auswertet,dann σ if (Expression ) Statement σ

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 21/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 45: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Beispiele

Beispiel 1:

if (kontostand >= betrag)

kontostand = kontostand

- betrag

- abhebe_gebuehr;

Beispiel 2:

if (kontostand >= betrag)

kontostand = kontostand

- betrag

- abhebe_gebuehr;

else

kontostand = kontostand

- betrag

- abhebe_gebuehr

- ueberzieh_gebuehr;

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 22/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 46: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Was ist hier semantisch falsch?

if (kontostand >= betrag)

kontostand = kontostand - betrag - abhebe_gebuehr

else

kontostand = kontostand - betrag;

kontostand = kontostand - abhebe_gebuehr

- ueberzieh_gebuehr;

Die letzte Zeile wird immer ausgefuhrt! Sie gehort nicht mehr zumelse-Zweig.

Richtig ist: Blockbildung!

if (kontostand >= betrag)

kontostand = kontostand - betrag - abhebe_gebuehr

else {

kontostand = kontostand - betrag;

kontostand = kontostand - abhebe_gebuehr

- ueberzieh_gebuehr;

}

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 23/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 47: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Was ist hier semantisch falsch?

if (kontostand >= betrag)

kontostand = kontostand - betrag - abhebe_gebuehr

else

kontostand = kontostand - betrag;

kontostand = kontostand - abhebe_gebuehr

- ueberzieh_gebuehr;

Die letzte Zeile wird immer ausgefuhrt! Sie gehort nicht mehr zumelse-Zweig.

Richtig ist: Blockbildung!

if (kontostand >= betrag)

kontostand = kontostand - betrag - abhebe_gebuehr

else {

kontostand = kontostand - betrag;

kontostand = kontostand - abhebe_gebuehr

- ueberzieh_gebuehr;

}

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 23/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 48: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Was ist hier semantisch falsch?

if (kontostand >= betrag)

kontostand = kontostand - betrag - abhebe_gebuehr

else

kontostand = kontostand - betrag;

kontostand = kontostand - abhebe_gebuehr

- ueberzieh_gebuehr;

Die letzte Zeile wird immer ausgefuhrt! Sie gehort nicht mehr zumelse-Zweig.

Richtig ist: Blockbildung!

if (kontostand >= betrag)

kontostand = kontostand - betrag - abhebe_gebuehr

else {

kontostand = kontostand - betrag;

kontostand = kontostand - abhebe_gebuehr

- ueberzieh_gebuehr;

}

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 23/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 49: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Dangling else (1)

if (! kontoGesperrt)

if (kontostand >= betrag) {

kontostand = kontostand - betrag -

abhebe_gebuehr;

System.out.println("Abhebung erfolgreich");

}

else

System.out.println("Abhebung nicht erlaubt");

Vorsicht!

Das else bezieht sich auf das zweite if und wird nichtausgefuhrt, wenn das Konto gesperrt ist.(Dann ist die gesamte if-Anweisung ohne Wirkung).

Die Einruckung entspricht daher nicht der Semantik!(else sollte eingeruckt sein)

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 24/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 50: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Dangling else (2)

if (! kontoGesperrt)

if (kontostand >= betrag) {

kontostand = kontostand - betrag -

abhebe_gebuehr;

System.out.println("Abhebung erfolgreich");

}

else

System.out.println("Abhebung nicht erlaubt , da

Konto nicht gedeckt.");

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 25/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 51: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Dangling else (2)

if (! kontoGesperrt)

if (kontostand >= betrag) {

kontostand = kontostand - betrag -

abhebe_gebuehr;

System.out.println("Abhebung erfolgreich");

}

else

System.out.println("Abhebung nicht erlaubt , da

Konto nicht gedeckt.");

else

System.out.println("Abhebung nicht erlaubt , da

Konto gesperrt.");

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 25/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 52: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Vergleich: Bedingungsoperator vs. Bedingte Anweisung

Statement = . . .|Conditional|. . .Conditional = IfStatement|. . .IfStatement = "if" "(" Expression ")" Statement [ "else" Statement ]

vs.Expression = . . .|Expression "?" Expression ":" Expression

Gemeinsamkeiten:

Boolescher Ausdruck bestimmt wie die Verzweigung fortgesetzt wird

Unterschiede:

if-Anweisung ist eine Anweisung, wahrend der Bedingungsoperatorzum Formen von Ausdrucken verwendet wird

else Statement ist optional, aber ":" Expression ist zwingenderforderlich

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 26/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 53: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Vergleich: Bedingungsoperator vs. Bedingte Anweisung (2)

Beispiel mit Bedingungsoperator:

int max;

max = a > b ? a : b;

Aquivalent dazu mit bedingter Anweisung:

int max;

if (a > b)

max = a;

else max = b;

Falsch, da if keine Ausdruecke, sondern Anweisungen formt:

max = if (a > b) a; else b;

Falsch, da nach ? und : ein Ausdruck steht und keine Anweisung

(a > b)?max = a;:max = b;

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 27/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 54: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Wiederholungsanweisungen

Statement = VariableDeclaration (Deklarationsanweisung)|Assignment (Zuweisung)|Block (Block)|Conditional (Fallunterscheidung)|Iteration (Wiederholungsanweisung)

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 28/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 55: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Wiederholungsanweisungen (Iterationen, Schleifen)

Wir unterscheiden 3 Arten von Wiederholungsanweisungen:Syntax:

Iteration = WhileStatement|ForStatement|DoStatement

Mit den dann zur Verfugung stehenden Anweisungen (insbesonderewhile-Anweisungen) konnen alle berechenbaren Funktionenprogrammiert werden!

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 29/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 56: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

While-Anweisungen

Syntax:

WhileStatement = "while" "(" Expression ")" Statement

Beispiel:

while (i <= 100) {

s = s+i;

i = i + 1; // oder i++;

}

Nebenbedingung:Der Typ des Ausdrucks Expression muss boolean sein.Wirkung:Solange die Auswertung von Expression den Wert true ergibt,wird die Anweisung Statement ausgefuhrt.

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 30/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 57: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

While-Anweisungen (2)

Formaler:

Falls die Auswertung von Expression im Zustand σ den Werttrue ergibt, σ Statement σ′ undσ′ while Expression Statement σ′′, dannσ while Expression Statement σ′′

Falls die Auswertung von Expression im Zustand σ den Wertfalse ergibt, dann σ while Expression Statement σ

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 31/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 58: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

While-Anweisungen: Beispiele

Beispiel: Zahlen von 1 bis 10 ausdrucken

public class WhileExampleNumbers {

public static void main(String [] args) {

int n = 1; // Iterator

int end = 10;

while (n <= end) {

System.out.println(n);

n++;

}

}

}

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 32/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 59: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

While-Anweisungen: Beispiele (2)

Beispiel: Quersumme einer Zahl berechnen

public class DigitSum {

public static void main(String [] args) {

int x = 352;

int digitSum = 0; // Akkumulator

while (x > 0) {

digitSum += x % 10;

x = x/10;

}

System.out.println(digitSum);

}

}

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 33/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 60: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Entwurf von While-Schleifen

Methodische Richtlinien

1 Bestimmung der Anfangswerte der Variablen vor Eintritt indie While-Anweisung

2 Bestimmung der Schleifenbedingung

3 Formulierung des Schleifenrumpfes

4 Prufen, dass die Schleifenbedingung nach endlich vielenAusfuhrungen des Rumpfes nicht mehr erfullt ist.Anderenfalls terminiert die While-Anweisung nicht!

int x = 352;

int digitSum = 0;

while (x > 0) { // Terminiert NICHT!

digitSum += x % 10;

}

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 34/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 61: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Beispiel: Fakultat einer Zahl

Fakultat n! = 1 · 2 · 3 · · · · n fur n ≥ 1 und 0! = 1Entwurf eines Programms: while-Anweisung:

1 Variablen und Anfangswerte:Verwende Variablen count zum Zahlen (initial 1), factorial furdas Ergebnis (initial 1), und n fur die Zahl n.

2 Schleifenbedingung: Zahler ist noch nicht großer als n, d.h.count <= n.

3 Schleifenrumpf: Multipliziere Ergebnis mit dem Zahler underhohe den Zahler:

factorial = factorial * count;

count ++;

4 Terminiert die Schleife? Ja, denn count wird in jedemDurchlauf erhoht und n verandert sich nicht.

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 35/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 62: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Beispiel: Fakultat einer Zahl (2)

public class Factorial {

public static void main(String [] args) {

int n = 5;

int count = 1;

int factorial = 1;

while (count <= n) {

factorial = factorial * count;

count ++;

}

System.out.println(factorial);

}

}

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 36/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 63: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

For-Anweisungen

Haufige Form einer While-Schleife ist:

int i = start; // Initialisierung einer

// Iteratorvariablen

while (i < = end) { // Grenze fuer den Iterator

...

i++; // konstante Aenderung des Iterators (hier +1)

}

Abkurzende Schreibweise durch eine For-Anweisung:

for (int i = start; i < = end; i++) {

...

}

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 37/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 64: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

For-Schleife: Beispiele

public class FactorialWithFor {

public static void main(String [] args) {

int n = 5;

int factorial = 1;

for (int count =1; count <= n; count ++) {

factorial = factorial * count;

}

System.out.println(factorial);

}

}

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 38/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 65: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

For-Schleife: Beispiele (2)

public class FactorialWithForDownwards {

public static void main(String [] args) {

int n = 5;

int factorial = 1;

for (int count=n;count > 0; count --) {

factorial = factorial * count;

}

System.out.println(factorial);

}

}

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 39/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 66: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

For-Schleife: Beispiele (3)

Summe der ersten 100 Zahlen:

public class Sum {

public static void main(String [] args) {

int summe = 0; // Akkumulator

int factorial = 1;

for (int i =0; i <= 100; i++) {

summe = summe + i;

}

System.out.println("Ergebnis = " + summe);

}

}

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 40/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 67: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

For-Schleife: Beispiel (4)

Im Schleifenrumpf einer For-Anweisung kann selbst wieder eineFor-Anweisung stehen. Man spricht von geschachteltem For, bzw.allgemein von geschachtelten Schleifen.Beispiel:

public class SternchenDrucken {

public static void main(String [] args) {

int n = 5;

for (int i = 0; i < n; i++) {

for (int j = 0; j < i; j++) {

System.out.print(’*’);

}

System.out.println (); // Zeilenvorschub

}

}

}

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 41/42 Deklaration Zuweisung Block Falluntersch. Iteration

Page 68: Kapitel 4: Anweisungen und Kontrollstrukturen · Zuweisungen (2) Syntax: Assignment = Variable "=" Expression ";" Wirkung: 1 Zun achst wird der Wert von Expression im " alten\ Zustand

Zusammenfassung

5 wesentliche Kontrollstrukturen der imperativenProgrammierung: Variablendeklaration, Zuweisung, Block,Fallunterscheidung, Iteration

Syntax und Semantik

Modellierung des Zustands als Stack der momentandefinierten Variablen und ihrer Werte

Realisierung der Kontrollstrukturen in Java

D. Sabel | 04 Kontrollstrukturen | WS 2018/19 42/42 Deklaration Zuweisung Block Falluntersch. Iteration