117
Verzweigung oder bedingte Anweisung

Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Embed Size (px)

Citation preview

Page 1: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Verzweigung oder

bedingte Anweisung

Page 2: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Aufgabe:Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei-stelliger Tagestachometer).Wenn er das nächste Mal tankt, macht er das gleiche und notiert sich zusätzlich noch die getankten Liter.Wie groß ist der Benzinverbrauch pro 100 km ?Flussdiagramm + Java-Programm !

Page 3: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

d = zneu – zalt

Ausgabe (bv100)

Eingabe(zalt)

Eingabe(zneu)

Eingabe(bv)

bv100 = bv / d * 100

Page 4: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;

public class MainBenzinrechner1 { throws IOException{ public static void main() throws IOException{ double zalt, zneu, d, bv, bv100; String str;

Page 5: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

System.out.println("Kilometerstand alt eingeben"); BufferedReader myinput = new BufferedReader(new InputStreamReader(System.in)); str = myinput.readLine(); zalt=Double.parseDouble(str);

System.out.println("Kilometerstand neu eingeben"); str = myinput.readLine(); zneu=Double.parseDouble(str);

Page 6: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

System.out.println("Benzinverbrauch eingeben"); str = myinput.readLine(); bv=Double.parseDouble(str); d = zneu - zalt; bv100 = bv/d * 100; System.out.println("L/100 km: " +bv100); }} Differenz kann negativ werden

Wann berechnet das Java-Programm ein falsches Ergebnis?

Page 7: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Zählerstand beim 1. Tankvorgang: 900 km

Beispiel für negative Differenz

Zählerstand beim 2. Tankvorgang: 100 km

Differenz = 100 – 900 = - 800km

Es werden nun 200 km bis zum nächsten Tankvorgang gefahren.Welcher Kilometerstand steht dann auf dem Tacho?

Welcher neue Kilometerstand müsste in Wirklichkeit aber auf dem Tacho stehen?

1000 km + 100 km

Welche Differenz berechnet das Programm?

Page 8: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Aufgabe:Verändern Sie das Flussdiagramm so, dass dieser Fall (Tachoüberlauf) berücksichtigt wird.

Page 9: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

d = zneu – zalt

Ausgabe (bv100)

Eingabe(zalt)

Eingabe(zneu)

Eingabe(bv)

bv100 = bv / d * 100

Page 10: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

zneu zaltf

w

Eingabe(zalt)

Eingabe(zneu)

Eingabe(bv)

zneu = zneu + 1000

Page 11: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

zneu zaltf

w

Eingabe(zalt)

Eingabe(zneu)

Eingabe(bv)

zneu = zneu + 1000

d = zneu – zalt

Ausgabe(bv100)

bv100 = bv / d * 100

Page 12: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Java-Syntax für die Einseitige

Verzweigung

Page 13: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

if (Ausdruck) Anweisung;

Bedingung Nächste auszuführende Anweisung, wenn Bedingung wahr.

Wahr bedeutet:

Wert des Ausdrucks: true

Nächste auszuführende (d.h. die diesem roten Rahmen folgende) Anweisung,

wenn Bedingung falsch.Falsch bedeutet:

Wert des Ausdrucks: false

Page 14: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Aufgabe:Verändern Sie das Java-Programm so, dass dieser Fall (Tachoüberlauf) berücksichtigt wird.

Page 15: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

... if(zneu <= zalt){ zneu = zneu + 1000; } d = zneu - zalt; bv100 = bv/d * 100; System.out.println("L/100 km:" +bv100);

}

bei einer Anweisung sind Klammern nicht nötig.

Trotzdem:Immer Klammern machen.

Page 16: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Struktogrammeals Alternative zu Flussdiagrammen

Page 17: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Eingaben, Ausgaben, einfache

Anweisungen.Beispiele:

Fläche = Länge * Breite

Umfang = 2*(Länge + Breite)

Page 18: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Flussdiagramm für eine

Einseitige Verzweigung

Page 19: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

zneu <= zaltf

w

zneu = zneu + 1000

Page 20: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Struktogramm für eine Einseitige Verzweigung

Page 21: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

zneu <= zalt

w

zneu = zneu + 1000

f

Bei einer zweiseitigen Verzweigung würde hier mindestens eine Anweisung stehen!

Page 22: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Beispiel:

Page 23: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

//Eingabeteil (wurde weg-// gelassen)

if (zneu <= zalt) zneu = zneu+1000; System.out.println("Tacho- überlauf");}d = zneu–zalt;erg = b/d*100;System.out.println("L/100 km:" +erg);

Block (Verbundanweisung): fasst mehrere Anweisungen zusammen

{

Übrigens: Welchem Prinzip widerspricht dieses Programm ?

Dem EVA-Prinzip !

Page 24: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Eingabe(bv)

Eingabe(zneu)

Eingabe(zalt)

Bitte Struktogramm zum vorigen Java-

Programm vervollständigen !

Page 25: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

d = zneu–zalt

Ausgabe(bv100)

bv100 = bv/d*100

zneu <= zaltw f

Eingabe(bv)

Eingabe(zneu)

Eingabe(zalt)

zneu = zneu+1000

Ausgabe("Tachoüberlauf")

Page 26: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Aufgabe:Bestimmung des Maximums zweier ganzer Zahlen, also:

Struktogramm + Flussdiagramm +C-Programm !

Achtung: Bis jetzt können wir nur die einseitige Verzweigung in C umsetzen !!!

Page 27: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

max = b

Ausgabe(max)

a < bw f

Eingabe(b)

Eingabe(a)

max = a

a >= bw f

Ist es möglich, dass das Programm alle zwei false-Teile durchläuft?

Page 28: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

max = b

Ausgabe(max)

a < bw f

Eingabe(b)

Eingabe(a)

max = a

a >= bw f

Nein, denn wenn eine Bedingung false ist, muss die andere Bedingung true sein!

Page 29: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

a < bf

w

Eingabe(a)

Eingabe(b)

max = b

Ausgabe(max)

a >= bf

w

max = a

Page 30: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

import java.io.*;

public class MainMaximum1 { public static void main() throws IOException{ int a,b,max; String str;

Möglich: Trennen von Variablennamen mit Komma

Page 31: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

System.out.println("erste Zahl eingeben"); BufferedReader myinput = new BufferedReader(new InputStreamReader( System.in));

Page 32: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

str = myinput.readLine(); a=Integer.parseInt(str);

System.out.println("zweite Zahl eingeben"); str = myinput.readLine(); b=Integer.parseInt(str); // Wie geht es weiter ?

Kommentar

Page 33: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

if (a<b){  max = b; }

System.out.println(

"Max= "+max);

if (a>=b){  max = a; }

Logisch gleichwertig:!(a<b)

Page 34: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

}}

Page 35: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Wir machen ein paar Tests, denn die Wahrheit ist konkret

!

Um Platz zu sparen schreiben wir statt System.out.println

abgekürzt: sout

Page 36: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

if (a<b){  max = b;}

sout("Max=%d", max);

if (a>=b){  max = a;}

12 Für a werde 2 eingegeben

Für b werde 1 eingegeben

2 1

2

2

Page 37: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

if (a<b){  max = b;}

sout("Max=%d", max);

if (a>=b){  max = a;}

53 Für a werde 3 eingegeben

Für b werde 5 eingegeben

3 5

5

5

Page 38: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

if (a<b){  max = b;}

sout("Max=%d", max);

if (a>=b){  max = a;}

77 Für a werde 7 eingegeben

Für b werde 7 eingegeben

7 7

7

7

Page 39: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Andere Lösung mit einseitiger

Verzweigung:

Page 40: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

max = b

Ausgabe(max)

a < bw f

Eingabe(b)

Eingabe(a)

max = a

a > bw f

max = a

a == bw f

Page 41: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Andere Lösung mit einseitiger

Verzweigung:

Page 42: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

max = b

Ausgabe(max)

a < bw f

Eingabe(b)

Eingabe(a)

max = a;

Das vorläufige Maximum wird auf den Wert der Variablen a gesetzt.

Ist das vorläufige Maximum kleiner als die 2. Zahl, dann ist das endgültige Maximum gleich der 2. Zahl

Page 43: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

oder als eine elegantere Alternative:

Page 44: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Aufgabe:

Bestimmen des Maximums zweier ganzer Zahlen.

Flussdiagramm mit zweiseitiger Verzweigung !

Page 45: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

a < bf

w

Eingabe(a)

Eingabe(b)

max = b

Ausgabe(max)

max = a

Ende

Anfang

Page 46: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Und hier das zugehörige

Struktogramm für diese zweiseitige

Verzweigung

Page 47: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

a<bw

max = b

f

max = a

Page 48: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Java - Syntax für die zweiseitige

Verzweigung

Page 49: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

if (Ausdruck) Anweisung1;else Anweisung2;

Nächste Anweisung, wenn Bedingung wahr

Bedingung

Nächste Anweisung, wenn Bedingung falsch

wahr bedeutet:Wert des Ausdrucks: true

falsch bedeutet:Wert des Ausdrucks: false

Page 50: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Wie kann man also ganz allgemein die folgende

zweiseitige Verzweigung durch zwei einseitige

Verzweigungen darstellen ?

Page 51: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

if (B){  A1;}else{ A2;}

if(B){  A1;}if(!B){ A2;}

A1, A2 und B sind alles Ausdrücke

Page 52: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Aufgabe:

Bestimmung des Maximums zweier ganzer

Zahlen.Java-Programm

Page 53: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

if (a<b){  max = b;}else{ max = a;}

System.out.println("Maximum= " +max);

Bedingung

Nächste Anweisung, wenn Bedingung wahr

Nächste Anweisung, wenn Bedingung falsch

bei einer Anweisung sind Klammern nicht nötig.

Trotzdem:Immer Klammern machen.

Page 54: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

}

Page 55: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Programmverlauf

Page 56: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Annahme:

Bedingung wahr

Page 57: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

if (a<b){  max = b;}else{ max = a;}

sout("Maximum =%d", max);

1 22

2

Zum Beispiel ...

Page 58: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Annahme:

Bedingung falsch

Page 59: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

if (a<b){  max = b;}else{ max = a;}

sout("Maximum =%d", max);

2 1

2

2

Zum Beispiel ...

Page 60: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Warum ist folgende Lösung falsch ?

Frage:

Page 61: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

if (a<b){  max = b;}sout("Maximum =%d", max);

}

Page 62: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Programmverlauf

Page 63: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Annahme:

Bedingung wahr

Page 64: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

if (a<b){  max = b;}sout("Maximum = %d ", max);

1 2

Zum Beispiel ...2

2

Page 65: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Annahme:

Bedingung falsch

Page 66: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

if (a<b){  max = b;}

Wert von max ist unbekannt und deshalb mit hoher Wahrscheinlichkeit nicht gleich dem Wert von a

sout("Maximum = %d ", max);

2 1Zum Beispiel ...

?

Page 67: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Aufgabe:

Bestimmen des Maximums und Minimums zweier

ganzer Zahlen.Struktogramm +Java-Programm

Page 68: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

a<bw

max = b

f

max = a

min = a min = b

Eingabe(a,b)

Ausgabe (max,min)

Page 69: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

import java.io.*;

public class MainMaximum1 { public static void main() throws IOException{ int a,b,min,max; String str; // Eingabeteil wie immer // Dann weiter mit ...

Page 70: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

if (a<b){ max = b; min = a; }else{ max = a; min = b;}

Anweisungen in einem Block zusammenfassen

Blockbeginn

Blockende

kein Semikolon

Page 71: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

System.out.println("Max= "

+max+" Min= "+min); }}

Page 72: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Block: Fasst mehrere Anweisungen zusammen.

Page 73: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Vorschlag: In "nicht

einfachen" Anweisungen (wie z.B. if...else, bzw. if) immer Block

benutzen.

Page 74: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

WICHTIG: Nach einem Block

kommt keinSemikolon.

Page 75: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Stellen Sie den Algorithmus durch ein Struktogramm dar, der das Maximum dreier in beliebiger Reihenfolge eingegebener Zahlen berechnet.

Aufgabe:

Page 76: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Eingabe(z1,z2,z3)

z1<z2W F

max = z2 max = z1

max<z3W F

max = z3

Ausgabe(max)

Page 77: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Erstellen Sie das zu diesem Struktogramm zugehörige

Java-Programm

Page 78: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

import java.io.*;

public class MainMaximum1 { public static void main() throws IOException{ int z1,z2,z3,max; String str; // Eingabeteil wie immer // Dann weiter mit ...

Page 79: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

if(z1<z2){ max=z2; } else{ max=z1; } if(max<z3){ max=z3; } System.out.println("Max= " +max);}

Page 80: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Stellen Sie den Algorithmus durch ein Struktogramm dar, der das Maximum und Minimum dreier in beliebiger Reihenfolge eingegebener Zahlen berechnet.

Aufgabe:

Page 81: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Eingabe(z1,z2,z3)

z1<z2W Fmax = z2

Ausgabe(max, min)

min = z1max = z1min = z2

max<z3W F

max = z3

min>z3W F

min= z3

Page 82: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Erstellen Sie das zu diesem Struktogramm zugehörige

Java-Programm

Page 83: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

import java.io.*;

public class MainMaximum1 { public static void main() throws IOException{ int z1,z2,z3,max,min; String str; // Eingabeteil wie immer // Dann weiter mit ...

Page 84: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

if(z1<z2){ max=z2; min=z1; } else{ max=z1; min=z2; } if(max<z3){ max=z3; } if(min>z3){ min=z3; } sout("Max= "+max+" Min= "+min);}

Page 85: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Erzeugen Sie einen Algorithmus (und stellen Sie diesen durch ein Struktogramm dar), der drei in beliebiger Reihenfolge eingegebene Zahlen ihrer Größe nach sortiert und ausgibt (kleinste, mittlere, grösste).

Aufgabe:

Page 86: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

TESTEN Sie mit den gerade angegebenen Zahlenkombinationen dieses Struktogramm.

Page 87: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

TESTEN Sie Ihre Lösung (Struktogramm).Machen Sie dazu folgende Überlegungen:

Page 88: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Unter 3 Zahlen gibt es genau 3 verschiedene, genannt a, b und c.Wie viele verschiedene Möglichkeiten (bzgl. der Reihenfolge der Eingabe) gibt es diese 3 Zahlen einzugeben? Bitte notieren Sie diese Möglichkeiten.

Page 89: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

3 verschiedene Zahlen:a b ca c bb a cb c ac a bc b a

Page 90: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Unter 3 Zahlen gibt es genau 2 verschiedene, genannt a und b.Wie viele verschiedene Möglichkeiten (bzgl. der Reihenfolge der Eingabe) gibt es diese 3 Zahlen einzugeben? Bitte notieren Sie diese Möglichkeiten.

Page 91: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Genau 2 gleiche Zahlen:a a bb a aa b a b b aa b bb a b

Page 92: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Unter 3 Zahlen gibt es genau 3 gleiche, genannt a, a, und a.Wie viele verschiedene Möglichkeiten (bzgl. der Reihenfolge der Eingabe) gibt es diese 3 Zahlen einzugeben? Bitte notieren Sie diese Möglichkeiten.

Page 93: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Genau 3 gleiche Zahlen:a a a

Page 94: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Zusammengefasst:

a b ca c bb a cb c ac a bc b a

a a bb a aa b a b b aa b bb a b

a a a

Page 95: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Eine mögliche Lösung der vorigen Aufgabe:

Page 96: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Bemerkung:Die Lösung wird in der folgenden Folie durch ein Flußdiagramm dargestellt. Wandeln Sie dieses Flussdiagramm in ein Struktogramm um.

Page 97: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

w

k:=z3m:=z1g:=z2

z1 < z2 f

z3 < z1

z3 < z2

k:=z1m:=z3g:=z2

k:=z1m:=z2g:=z3

k:=z3m:=z2g:=z1

z3 < z2

z3 < z1

k:=z2m:=z3g:=z1

k:=z2m:=z1g:=z3

Ausgabe(k,m,g)

w

w

w

w

f f

ff

Page 98: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

z1<z2W F

z3<z1W F

k=z3m=z1g=z2

z3<z2W Fk=z1m=z3g=z2

k=z1m=z2g=z3

z3<z2W F

k=z3m=z2g=z1

z3<z1W Fk=z2m=z3g=z1

k=z2m=z1g=z3

Eingabe(z1, z2, z3)

Ausgabe(k, m, g)

Page 99: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

z1<z2W F

z3<z1W F

k=z3m=z1g=z2

z3<z2W Fk=z1m=z3g=z2

k=z1m=z2g=z3

z3<z2W F

k=z3m=z2g=z1

z3<z1W Fk=z2m=z3g=z1

k=z2m=z1g=z3

Eingabe(z1, z2, z3)

Ausgabe(k, m, g)

Wieviel if...else Anweisungen kommen in diesem Programm vor?

Genau eine (die rot umrandete)! Diese ist allerdings verschachtelt !!!

Page 100: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

TESTEN Sie mit den gerade angegebenen Zahlenkombinationen dieses Struktogramm.

Page 101: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Erstellen Sie das zu diesem Struktogramm zugehörige

Java-Programm

Page 102: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

import java.io.*;

public class MainMaximum1 { public static void main() throws IOException{ int z1,z2,z3,m,g,k; String str;

Page 103: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

System.out.println("1. Zahl eingeben"); BufferedReader myinput = new BufferedReader(new InputStreamReader( System.in));

str = myinput.readLine(); z1=Integer.parseInt(str);

System.out.println("2. Zahl eingeben"); str = myinput.readLine(); z2=Integer.parseInt(str);

System.out.println("3. Zahl eingeben"); str = myinput.readLine(); z3=Integer.parseInt(str);

Page 104: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

if (z1<z2){ if(z3<z1){ k=z3; m=z1; g=z2; } else{ if(z3<z2){ k=z1; m=z3; g=z2; } else{ k=z1; m=z2; g=z3; } } } else{ if(z3<z2){ k=z3; m=z2; g=z1; } else{ if(z3<z1){ k=z2; m=z3; g=z1; } else{ k=z2; m=z1; g=z3; } } }

Page 105: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

System.out.println("sortierte Reihenfolge=" +" "+k+" "+m+" "+g); }}

Page 106: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Nochmals zum EVA-Prinzip

Page 107: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Das EVA-Prinzip bedeutet:In einer Anweisung dürfen

nicht zwei verschiedene Komponenten von EVA stehen

(wie z.B. V und A)

Page 108: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Eingabe(zaehler , nenner)

nenner != 0W F

erg = zaehler / nenner

Ausgabe(erg)

Ausgabe("unerlaubte Division durch 0")

E

V

A+

Schlechter Programmierstil:

2 Komponenten in 1 Anweisung

Page 109: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Guter Programmierstil:

Page 110: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Eingabe(zaehler , nenner)

zaehler != 0W F

erg = zaehler / nenner

erlaubt = 1

erlaubt = 0

E

V

erlaubt == 1W F

Ausgabe(erg)A

Ausgabe("Division durch 0")

Page 111: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Eingabe(zaehler , nenner)

W F

erg = zaehler / nenner

erlaubt = 1

erlaubt = 0

E

V

erlaubt == 1W F

Ausgabe(erg)A

Ausgabe("Division durch 0")

Wieviel if...else Anweisungen kommen in diesem Programm vor?

Genau 2!

zaehler != 0

Page 112: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Aufgabe:Die Variablen n und t sollen den Datentyp integer haben.

Mit welcher Anweisung kann man nachprüfen, ob t ein Teiler von n ist, wie z.B. 3 ein Teiler

von 18 ist.

Page 113: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

... if(n % t == 0){ // t teilt n } else{ // t teilt n nicht } ...

Mit dem Operator % wird der Rest berechnet. Wenn t Teiler von n ist, ist

der Rest gleich 0.

Gibt es eine andere Lösung, die die Operatoren / und * benutzt?

Page 114: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

... if(n/t * t == n){ // t teilt n} else{ // t teilt n nicht } ...

Wenn n von t nicht geteilt wird, wird der Rest bei der Division abgeschnitten und

somit das Produkt n/t * t ungleich n

Page 115: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

Geben Sie dazu ein paar Beispiele ...

Page 116: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

... if(n/t * t == n){ // t teilt n} else{ // ... } ...

Also ist die nächste Anweisung im if-Teil der if ... else Anweisung.

21 7 7 21

3 * 7 21=

Page 117: Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tagestachometer).Wenn

... if(n/t * t == n){ // ...} else{ // t teilt n nicht } ...

Also ist die nächste Anweisung im else-Teil der if ... else Anweisung.

20 7 7 20

2 * 7 20≠