Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Verzweigung oder bedingte Anweisung Weiter mit PP.

Ähnliche Präsentationen


Präsentation zum Thema: "Verzweigung oder bedingte Anweisung Weiter mit PP."—  Präsentation transkript:

1 Verzweigung oder bedingte Anweisung Weiter mit PP.

2 Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei-stelliger Tageszähler).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 + C-Programm ! Teilziel 1: erkennen, dass das lineares C-Programm für bestimmte Fälle (zneu < zalt) nicht korrekt ist und dass eine einseitige Verzweigung nötig ist. Lehreraktivität: Lehrer stellt die Aufgabe. Hilfestellung: Wie kann man den Benzinverbrauch pro 100 km berechnen ? (siehe Arbeitsblatt, Aufgabe 1) Schüleraktivität: Lösung der Aufgabe

3 Eingabe(zalt) Eingabe(zneu) Eingabe(bv) d = zneu – zalt
bv100 = bv / d * 100 Ausgabe (bv100) Lehreraktivität: Präsentiert eine Lösung (Flussdiagramm)

4 int main(){ double zalt, zneu, d, bv, bv100; printf("\nKilometerstand "); scanf("%lf", &zalt); fflush(stdin); printf("\nKilometerstand "); scanf("%lf", &zneu); fflush(stdin); printf("\nBenzinverbrauch \n"); scanf("%lf", &bv); fflush(stdin); Lehreraktivität: Präsentiert den Eingabeteil (C-Programm)

5 Differenz kann negativ werden
Wann berechnet das C-Programm ein falsches Ergebnis ? Differenz kann negativ werden ... d = zneu - zalt; bv100 = bv/d * 100; printf("L/100 km %f",bv100); return 0; } Lehreraktivität: Präsentiert den Verarbeitungsteil (C-Programm). Lehreraktivität (Frage): Warum kann dieses Programm zu falschen Ergebnissen führen ? Schüleraktivität (Antwort): Wenn der neue Kilometerstand kleiner als der alte ist. Weiter mit PP Beschreiben Sie verbal den Algorithmus, der dies berücksichtigt ? Wenn zneu < zalt ist, dann muss zu zneu 1000 dazuaddiert werden.

6 Zählerstand beim 1. Tankvorgang: 900 km
Beispiel für negative Differenz Zählerstand beim 1. Tankvorgang: 900 km Es werden nun 200 km bis zum nächsten Tankvorgang gefahren. Welcher Kilometerstand steht dann auf dem Tacho? Zählerstand beim 2. Tankvorgang: 100 km Welche Differenz berechnet das Programm? Differenz = 100 – 900 = - 800km Welcher neue Kilometerstand müsste in Wirklichkeit aber auf dem Tacho stehen? Lehreraktivität: Präsentiert den Verarbeitungsteil (C-Programm). Lehreraktivität (Frage): Warum kann dieses Programm zu falschen Ergebnissen führen ? Schüleraktivität (Antwort): Wenn der neue Kilometerstand kleiner als der alte ist. Weiter mit PP Beschreiben Sie verbal den Algorithmus, der dies berücksichtigt ? Wenn zneu < zalt ist, dann muss zu zneu 1000 dazuaddiert werden. 1000 km km

7 Aufgabe: Verändern Sie das Flussdiagramm so, dass dieser Fall (Zählerüberlauf) berücksichtigt wird. Lehreraktivität: Lehrer stellt die Aufgabe. Schüleraktivität: Lösung der Aufgabe.

8 Eingabe(zalt) Eingabe(zneu) Eingabe(bv) d = zneu – zalt
bv100 = bv / d * 100 Ausgabe (bv100) Lehreraktivität: Präsentiert nochmals die alte Lösung.

9 Eingabe(zalt) Eingabe(zneu) Eingabe(bv) zneu  zalt zneu = zneu + 1000
f w zneu = zneu Lehreraktivität: Präsentiert eine Lösung (Flussdiagramm).

10 Eingabe(zalt) Eingabe(zneu) Eingabe(bv) zneu  zalt zneu = zneu + 1000
f w zneu = zneu d = zneu – zalt Lehreraktivität: Präsentiert eine Lösung (Fortsetzung) Lehreraktivität(Frage): Wie muss das Flussdiagramm vervollständigt werden ? Schüleraktivität (Antwort): Jetzt geht es wie im alten Flussdiagramm weiter. bv100 = bv / d * 100 Ausgabe(bv100)

11 C-Syntax für die Einseitige Verzweigung
Weiter mit PP.

12 if (Ausdruck) Anweisung;
Bedingung Nächste auszuführende Anweisung, wenn Bedingung wahr. Wahr bedeutet: Wert des Ausdrucks: !=0 if (Ausdruck) Anweisung; Teilziel 2: Die C-Syntax einer einseitigen Verzweigung verstehen. Lehreraktivität: Präsentiert die C-Syntax einer einseitigen Verzweigung. Schüleraktivität: Abschreiben Nächste auszuführende (d.h. die diesem roten Rahmen folgende) Anweisung, wenn Bedingung falsch. Falsch bedeutet: Wert des Ausdrucks: 0

13 Aufgabe: Verändern Sie das C-Programm so, dass dieser Fall (Tachoüberlauf) berücksichtigt wird. Lehreraktivität: Lehrer stellt die Aufgabe. Schüleraktivität: Lösung der Aufgabe.

14 bei einer Anweisung sind Klammern nicht nötig.
... if(zneu <= zalt){ zneu = zneu ; } d = zneu - zalt; bv100 = bv/d * 100; printf("L/100km %f",bv100); return 0; } Lehreraktivität: Präsentiert die Lösung (C-Programm). bei einer Anweisung sind Klammern nicht nötig. Trotzdem: Immer Klammern machen.

15 als Alternative zu Flussdiagrammen
Struktogramme als Alternative zu Flussdiagrammen Weiter mit PP.

16 Eingaben, Ausgaben, einfache Anweisungen. Beispiele:
Fläche = Länge * Breite Umfang = 2*(Länge + Breite) Teilziel: Struktogramm (Anweisung, einseitige Verknüpfung) verstehen. Lehreraktivität: Lehrer stellt Strukogramm vor. Schüleraktivität: Abschreiben.

17 Flussdiagramm für eine Einseitige Verzweigung
Weiter mit PP.

18 f zneu <= zalt w zneu = zneu Weiter mit PP.

19 Struktogramm für eine Einseitige Verzweigung
Weiter mit PP.

20 w f zneu = zneu + 1000 zneu <= zalt
Bei einer zweiseitigen Verzweigung würde hier mindestens eine Anweisung stehen! zneu <= zalt w f zneu = zneu Lehreraktivität: Lehrer stellt Strukogramm vor. Schüleraktivität: Abschreiben.

21 Beispiel: Weiter mit PP.

22 //Eingabeteil (wurde weg- // gelassen)
Dem EVA-Prinzip ! Block (Verbundanweisung): fasst mehrere Anweisungen zusammen if (zneu <= zalt) { zneu = zneu+1000; printf("Zählerüberlauf"); } Lehreraktivität: Stellt ein C-Programm vor. d = zneu–zalt; erg = b/d*100; printf("\n L/100 km %f",erg); Übrigens: Welchem Prinzip widerspricht dieses Programm ?

23 Bitte Struktogramm zum vorigen C-Programm vervollständigen !
Eingabe(zalt) Eingabe(zneu) Eingabe(bv) Bitte Struktogramm zum vorigen C-Programm vervollständigen ! Lehreraktivität: Stellt eine Aufgabe. (siehe Aufgabenblatt, Aufgabe 2) Schüleraktivität: Lösung der Aufgabe.

24 Ausgabe("Zählerüberlauf")
Eingabe(zalt) Eingabe(zneu) Eingabe(bv) zneu <= zalt w f zneu = zneu+1000 Ausgabe("Zählerüberlauf") Lehreraktivität: Päsentiert eine Lösung (Struktogramm). d = zneu–zalt bv100 = bv/d*100 Ausgabe(bv100)

25 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 !!! Konsolidierungsphase: Für die Gesamtwiederholung sollen die Schüler selbständig eine weiter Aufgabe lösen. Lehreraktivität: Lehrer stellt die Aufgabe. (siehe Arbeitsblatt, Aufgabe 3) Schüleraktivität: Lösung der Aufgabe.

26 Ist es möglich, dass das Programm alle zwei false-Teile durchläuft?
Eingabe(a) Eingabe(b) a < b w f max = b a >= b w f max = a Lehreraktivität: Päsentiert eine Lösung (Struktogramm). Ausgabe(max) Ist es möglich, dass das Programm alle zwei false-Teile durchläuft?

27 Eingabe(a) Eingabe(b) w f max = b w f max = a Ausgabe(max) a < b
Lehreraktivität: Päsentiert eine Lösung (Struktogramm). Ausgabe(max) Nein, denn wenn eine Bedingung false ist, muss die andere Bedingung true sein!

28 Eingabe(a) Eingabe(b) a < b max = b a >= b max = a Ausgabe(max)
f w max = b a >= b f w Lehreraktivität: Präsentiert eine Lösung (Flussdiagramm). max = a Ausgabe(max)

29 Möglich: Trennen von Variablennamen mit Komma
#include "stdafx.h" #include <stdio.h> int main(){ int a,b,max;   printf("\nEingabe der ersten Zahl: "); scanf("%d", &a); fflush(stdin);  printf("\nEingabe der zweiten Zahl: "); scanf("%d", &b); fflush(stdin); // Wie geht es weiter ? Möglich: Trennen von Variablennamen mit Komma Lehreraktivität: Präsentiert eine Lösung (C-Programm). Kommentar

30 Logisch gleichwertig:
if (a<b){  max = b; } Logisch gleichwertig: !(a<b) if (a>=b){  max = a; } Lehreraktivität: Präsentiert eine Lösung (Fortsetzung). printf("Max=%d", max);

31 return 0; } Lehreraktivität: Präsentiert eine Lösung (Fortsetzung).

32 Wir machen ein paar Tests, denn die Wahrheit ist konkret !
Weiter mit PP.

33 if (a<b){ max = b; } if (a>=b){ max = a; }
2 1 Für a werde 2 eingegeben Für b werde 1 eingegeben if (a>=b){  max = a; } 2 1 2 Lehreraktivität: Präsentiert eine Lösung (Fortsetzung). printf("Max=%d", max); 2

34 if (a<b){ max = b; } if (a>=b){ max = a; }
3 5 Für a werde 3 eingegeben Für b werde 5 eingegeben 5 if (a>=b){  max = a; } 3 5 Lehreraktivität: Präsentiert eine Lösung (Fortsetzung). printf("Max=%d", max); 5

35 if (a<b){ max = b; } if (a>=b){ max = a; }
7 7 Für a werde 7 eingegeben Für b werde 7 eingegeben if (a>=b){  max = a; } 7 7 7 Lehreraktivität: Präsentiert eine Lösung (Fortsetzung). printf("Max=%d", max); 7

36 Andere Lösung mit einseitiger Verzweigung:
Weiter mit PP.

37 Eingabe(a) Eingabe(b) w f max = b w f max = a w f max = a Ausgabe(max)
Lehreraktivität: Päsentiert eine Lösung (Struktogramm). a > b w f max = a Ausgabe(max)

38 Andere Lösung mit einseitiger Verzweigung:
Weiter mit PP.

39 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 Eingabe(a) Eingabe(b) max = a; Lehreraktivität: Päsentiert eine Lösung (Struktogramm). w a < b f max = b Ausgabe(max)

40 oder als eine elegantere Alternative:
Weiter mit PP.

41 Bestimmen des Maximums zweier ganzer Zahlen. Flussdiagramm
Aufgabe: Bestimmen des Maximums zweier ganzer Zahlen. Flussdiagramm mit zweiseitiger Verzweigung ! Teilziel: Zweiseitige Verzweigung (Struktogramm, C-Syntax) verstehen. Lehreraktivität: Stellt eine Aufgabe Schüleraktivität: Stellen Lösungen vor.

42 Anfang Eingabe(a) Eingabe(b) a < b max = b max = a Ausgabe(max)
w max = b max = a Lehreraktivität: Präsentiert eine Lösung (Fortsetzung) Schüleraktivität: Lösung der Aufgabe. Ausgabe(max) Ende

43 Und hier das zugehörige Struktogramm für diese zweiseitige Verzweigung
Weiter mit PP.

44 a<b max = b max = a w f Lehreraktivität (Frage):
Welche Eintragungen müssen in den linken bzw. rechten Strukturblock eingetragen werden ? Schüleraktivität (Antwort): linker Block: max = b; rechter Block: max = a;

45 C - Syntax für die zweiseitige Verzweigung
Weiter mit PP.

46 if (Ausdruck) Anweisung1; else Anweisung2;
Bedingung Nächste Anweisung, wenn Bedingung wahr if (Ausdruck) Anweisung1; else Anweisung2; Lehrer: Präsentiert die allgemeine C-Syntax der if ... else Anweisung. Weiter mit PP. Schüler: Abschreiben. wahr bedeutet: Wert des Ausdrucks != 0 falsch bedeutet: Wert des Ausdrucks = 0 Nächste Anweisung, wenn Bedingung falsch

47 Wie kann man also ganz allgemein die folgende zweiseitige Verzweigung durch zwei einseitige Verzweigungen darstellen ? Lehrer: Präsentiert die allgemeine C-Syntax der if ... else Anweisung. Weiter mit PP. Schüler: Abschreiben.

48 A1, A2 und B sind alles Ausdrücke
if (B){  A1; } else{ A2; } if(B){  A1; } if(!B){ A2; } Lehrer: Präsentiert die allgemeine C-Syntax der if ... else Anweisung. Weiter mit PP. Schüler: Abschreiben.

49 Bestimmung des Maximums zweier ganzer Zahlen.
Aufgabe: Bestimmung des Maximums zweier ganzer Zahlen. C-Programm Weiter mit PP.

50 if (a<b){ max = b; } else{ max = a; }
Bedingung if (a<b){  max = b; } else{ max = a; } Nächste Anweisung, wenn Bedingung wahr bei einer Anweisung sind Klammern nicht nötig. Trotzdem: Immer Klammern machen. Lehreraktivität (Frage): Welche Anweisung wird als nächstes ausgeführt ? Schüleraktivität (Antwort): ... Nächste Anweisung, wenn Bedingung falsch printf("Maximum =%d", max);

51 return 0; } Lehreraktivität (Frage):
Welche Anweisung wird als nächstes ausgeführt ? Schüleraktivität (Antwort): ...

52 Programmverlauf Weiter mit PP.

53 Annahme: Bedingung wahr
Lehreraktivität: Präsentiert die Lösung.

54 if (a<b){ max = b; } else{ max = a; }
2 Zum Beispiel ... 1 2 if (a<b){  max = b; } else{ max = a; } Lehreraktivität (Frage): Welche Anweisung wird als nächstes ausgeführt ? Schüleraktivität (Antwort): ... 2 printf("Maximum =%d", max);

55 Annahme: Bedingung falsch
Lehreraktivität (Frage): Fall: Bedingung ist nicht erfüllt.

56 if (a<b){ max = b; } else{ max = a; }
Zum Beispiel ... 2 1 if (a<b){  max = b; } else{ max = a; } 2 Lehreraktivität (Frage): Welche Anweisung wird als nächstes ausgeführt ? Schüleraktivität (Antwort): ... 2 printf("Maximum =%d", max);

57 Warum ist folgende Lösung falsch ?
Frage: Warum ist folgende Lösung falsch ? Weiter mit PP.

58 if (a<b){ max = b; } printf("Maximum =%d", max); }
Lehreraktivität (Frage): Warum ist die Lösung falsch ? Schüleraktivität (Antwort): ...

59 Programmverlauf Weiter mit PP.

60 Annahme: Bedingung wahr
Weiter mit PP.

61 if (a<b){ max = b; } printf("Maximum = %d ", max); Zum Beispiel ...
2 1 2 if (a<b){  max = b; } 2 printf("Maximum = %d ", max); Lehreraktivität (Frage): Warum ist die Lösung falsch ? Schüleraktivität (Antwort): ...

62 Annahme: Bedingung falsch
Weiter mit PP.

63 if (a<b){ max = b; } printf("Maximum = %d ", max); Zum Beispiel ...
2 1 if (a<b){  max = b; } ? printf("Maximum = %d ", max); Lehreraktivität (Frage): Welche Anweisung wird als nächstes ausgeführt ? Schüleraktivität (Antwort): ... Wert von max ist unbekannt und deshalb mit hoher Wahrscheinlichkeit nicht gleich dem Wert von a

64 Bestimmen des Maximums und Minimums zweier ganzer Zahlen.
Aufgabe: Bestimmen des Maximums und Minimums zweier ganzer Zahlen. Struktogramm + C-Programm Konsolidierungsphase: Für die Widerholung der Verbundanweisung (Block) sollen die Schüler selbständig eine weiter Aufgabe lösen. Lehreraktivität (Lehrer): Stellt Aufgabe. Schülerativität (Schüler): Stellen Lösungen vor.

65 a<b max = b max = a min = a min = b
Eingabe(a,b) a<b w f max = b max = a min = a min = b Lehreraktivität (Frage): Welche Eintragungen müssen in den linken bzw. rechten Strukturblock eingetragen werden ? Schüleraktivität (Antwort): linker Block: max = b; rechter Block: max = a; Ausgabe (max,min)

66 // Eingabeteil wie immer // Dann weiter mit ...
#include "stdafx.h" #include <stdio.h> int main(){ int a; int b; int min; int max; // Eingabeteil wie immer // Dann weiter mit ... Konsolidierungsphase: Für die Widerholung der Verbundanweisung (Block) sollen die Schüler selbständig eine weiter Aufgabe lösen. Lehreraktivität (Lehrer): Stellt Aufgabe. Schülerativität (Schüler): Stellen Lösungen vor.

67 if (a<b){ max = b; min = a; } else{ max = a; min = b; }
Blockbeginn Anweisungen in einem Block zusammenfassen Lehreraktivität: Präsentiert eine Lösung. Blockende kein Semikolon

68 printf("Max=%d, Min=%d", max, min); return 0; }
Weiter mit PP.

69 Block: Fasst mehrere Anweisungen zusammen.
Weiter mit PP.

70 Vorschlag: In "nicht einfachen" Anweisungen (wie z. B. if. else, bzw
Vorschlag: In "nicht einfachen" Anweisungen (wie z.B. if...else, bzw. if) immer Block benutzen. Lehreraktivität (Frage): Warum ? Schüleraktivität (Antwort): Falls man nachträglich eine Anweisung hinzufügt und dann die Klammerung vergisst, bekommt man einen Fehler.

71 WICHTIG: Nach einem Block kommt kein Semikolon.
Weiter mit PP.

72 Aufgabe: Stellen Sie den Algorithmus durch ein Struktogramm dar, der das Maximum dreier in beliebiger Reihenfolge eingegebener Zahlen berechnet. Weiter mit PP.

73 Eingabe(z1,z2,z3) z1<z2 W F max = z2 max = z1 max<z3 W F
Weiter mit PP. max = z3 Ausgabe(max)

74 Erstellen Sie das zu diesem Struktogramm zugehörige C-Programm
Weiter mit PP.

75 // Eingabeteil wie immer // Dann weiter mit ...
#include "stdafx.h" #include <stdio.h> int main(){ int z1; int z2; int z3; int max; // Eingabeteil wie immer // Dann weiter mit ... Konsolidierungsphase: Für die Widerholung der Verbundanweisung (Block) sollen die Schüler selbständig eine weiter Aufgabe lösen. Lehreraktivität (Lehrer): Stellt Aufgabe. Schülerativität (Schüler): Stellen Lösungen vor.

76 if(z1<z2){ max=z2; } else{ max=z1; } if(max<z3){ max=z3; } printf("Max=%d\n", max); return 0;
Konsolidierungsphase: Für die Widerholung der Verbundanweisung (Block) sollen die Schüler selbständig eine weiter Aufgabe lösen. Lehreraktivität (Lehrer): Stellt Aufgabe. Schülerativität (Schüler): Stellen Lösungen vor.

77 Aufgabe: Stellen Sie den Algorithmus durch ein Struktogramm dar, der das Maximum und Minimum dreier in beliebiger Reihenfolge eingegebener Zahlen berechnet. Weiter mit PP.

78 Eingabe(z1,z2,z3) W F W F W F Ausgabe(max, min) z1<z2 max = z2
Weiter mit PP. min>z3 F min= z3 Ausgabe(max, min)

79 Erstellen Sie das zu diesem Struktogramm zugehörige C-Programm
Weiter mit PP.

80 // Eingabeteil wie immer // Dann weiter mit ...
#include "stdafx.h" #include <stdio.h> int main(){ int z1; int z2; int z3; int max; int min; // Eingabeteil wie immer // Dann weiter mit ... Konsolidierungsphase: Für die Widerholung der Verbundanweisung (Block) sollen die Schüler selbständig eine weiter Aufgabe lösen. Lehreraktivität (Lehrer): Stellt Aufgabe. Schülerativität (Schüler): Stellen Lösungen vor.

81 if(z1<z2){ max=z2; min=z1; } else{ max=z1; min=z2; } if(max<z3){ max=z3; } if(min>z3){ min=z3; } printf("Max=%d Min=%d\n", max, min); return 0; } Konsolidierungsphase: Für die Widerholung der Verbundanweisung (Block) sollen die Schüler selbständig eine weiter Aufgabe lösen. Lehreraktivität (Lehrer): Stellt Aufgabe. Schülerativität (Schüler): Stellen Lösungen vor.

82 Aufgabe: 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). Weiter mit PP.

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

84 Unter 3 Zahlen gibt es genau 3 verschiedene, genannt a, b und c
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. Weiter mit PP.

85 3 verschiedene Zahlen: a b c a c b b a c b c a c a b c b a
Weiter mit PP.

86 Unter 3 Zahlen gibt es genau 2 verschiedene, genannt a und b
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. Weiter mit PP.

87 Genau 2 gleiche Zahlen: a a b b a a a b a b b a a b b b a b
Weiter mit PP.

88 Unter 3 Zahlen gibt es genau 3 gleiche, genannt a, a, und a
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. Weiter mit PP.

89 Genau 3 gleiche Zahlen: a a a Weiter mit PP.

90 Zusammengefasst: a a b a b c a a a b a a a c b a b a b a c b b a b c a
c a b c b a a a b b a a a b a b b a a b b b a b a a a Weiter mit PP.

91 Eine mögliche Lösung der vorigen Aufgabe:
Weiter mit PP.

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

93 z1 < z2 z3 < z1 z3 < z2 k:=z3 m:=z1 g:=z2 k:=z3 m:=z2 g:=z1
f w z3 < z1 z3 < z2 f f w w k:=z3 m:=z1 g:=z2 k:=z3 m:=z2 g:=z1 z3 < z2 z3 < z1 f f w w k:=z1 m:=z3 g:=z2 k:=z1 m:=z2 g:=z3 k:=z2 m:=z3 g:=z1 k:=z2 m:=z1 g:=z3 Frage: Wieviele Variablen werden gebraucht ? Antwort: zwei. Weiter mit PP. Ausgabe(k,m,g)

94 Eingabe(z1, z2, z3) z1<z2 W F z3<z1 z3<z2 W F W F z3<z2
k=z1 k=z1 k=z2 k=z2 k=z3 k=z3 Weiter mit PP. m=z1 m=z3 m=z2 m=z3 m=z1 m=z2 g=z2 g=z2 g=z3 g=z1 g=z3 g=z1 Ausgabe(k, m, g)

95 Eingabe(z1, z2, z3) z1<z2 W F z3<z1 z3<z2 W F W F z3<z2
Wieviel if...else Anweisungen kommen in diesem Programm vor? Eingabe(z1, z2, z3) z1<z2 W F z3<z1 z3<z2 W F W F z3<z2 z3<z1 W F W F k=z1 k=z1 k=z2 k=z2 k=z3 k=z3 Weiter mit PP. m=z1 m=z3 m=z2 m=z3 m=z1 m=z2 g=z2 g=z2 g=z3 g=z1 g=z3 g=z1 Ausgabe(k, m, g) Genau eine (die rot umrandete)! Diese ist allerdings verschachtelt !!!

96 TESTEN Sie mit den gerade angegebenen Zahlenkombinationen dieses Struktogramm. Weiter mit PP.

97 Erstellen Sie das zu diesem Struktogramm zugehörige C-Programm
Weiter mit PP.

98 printf("Eingabe der 1. Zahl: \n"); scanf("%d", &z1); fflush(stdin);
#include "stdafx.h" #include "stdio.h" int main(){ int z1, z2, z3, m, k, g; // Eingabe printf("Eingabe der 1. Zahl: \n"); scanf("%d", &z1); fflush(stdin); printf("Eingabe der 2. Zahl: \n"); scanf("%d", &z2); printf("Eingabe der 3. Zahl: \n"); scanf("%d", &z3); // gleich kommt die Ausgabe Weiter mit PP.

99 if (z1<z2){ if(z3<z1){ k=z3; m=z1; g=z2; } else{ if(z3<z2){
Weiter mit PP.

100 printf("sortierte Reihenfolge %d %d %d: \n", k, m, g); return 0; }
// Ausgabe printf("sortierte Reihenfolge %d %d %d: \n", k, m, g); return 0; } Weiter mit PP.

101 Nochmals zum EVA-Prinzip
Weiter mit PP.

102 Das EVA-Prinzip bedeutet:
In einer Anweisung dürfen nicht zwei verschiedene Komponenten von EVA stehen (wie z.B. V und A) Weiter mit PP.

103 Schlechter Programmierstil: 2 Komponenten in 1 Anweisung
Eingabe(zaehler , nenner) nenner != 0 W F Weiter mit PP. V + erg = zaehler / nenner Ausgabe("unerlaubte Division durch 0") A Ausgabe(erg)

104 Guter Programmierstil:
Weiter mit PP.

105 E V A Eingabe(zaehler , nenner) nenner != 0 W F erg = zaehler / nenner
erlaubt = 0 erlaubt = 1 erlaubt == 1 Weiter mit PP. W F A Ausgabe(erg) Ausgabe("Division durch 0")

106 E V A Eingabe(zaehler , nenner) nenner != 0 W F erg = zaehler / nenner
Wieviel if...else Anweisungen kommen in diesem Programm vor? E Eingabe(zaehler , nenner) nenner != 0 W F V erg = zaehler / nenner erlaubt = 0 erlaubt = 1 erlaubt == 1 Weiter mit PP. W F A Ausgabe(erg) Ausgabe("Division durch 0") Genau 2!

107 Aufgabe: Die Variablen n und t sollen den Datentyp integer haben
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. Weiter mit PP.

108 Gibt es eine andere Lösung, die die Operatoren / und * benutzt?
... 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. Weiter mit PP. Gibt es eine andere Lösung, die die Operatoren / und * benutzt?

109 ... if(n/t * t == n){ // t teilt n } else{ // t teilt n nicht
Weiter mit PP. Wenn n von t nicht geteilt wird, wird der Rest bei der Division abgeschnitten und somit das Produkt n/t * t ungleich n

110 Geben Sie dazu ein paar Beispiele ...
Weiter mit PP.

111 ... if(n/t * t == n){ // t teilt n } else{ // ... = 21 7 7 21 3 * 7 21
Weiter mit PP. Also ist die nächste Anweisung im if-Teil der if ... else Anweisung.

112 ... if(n/t * t == n){ // ... } else{ // t teilt n nicht ≠ 20 7 7 20 2
Weiter mit PP. Also ist die nächste Anweisung im else-Teil der if ... else Anweisung.


Herunterladen ppt "Verzweigung oder bedingte Anweisung Weiter mit PP."

Ähnliche Präsentationen


Google-Anzeigen