Verzweigung oder bedingte Anweisung Weiter mit PP.

Slides:



Advertisements
Ähnliche Präsentationen
Programme in C++.
Advertisements

Funktionen.
Forschungszentrum caesar
Timm Grams Hochschule Fulda Fachbereich Elektrotechnik und Informationstechnik Rekursive Funktionen in C © Timm Grams, Fulda, (korr.: )
Zusammenfassung der Vorwoche
Einführung in JavaScript II
der Universität Oldenburg
Algorithmus. Ein Kochrezept, zum Beispiel: Kartoffelbrei.
SWITCH - Anweisung.
SWITCH - Anweisung.
Verzweigung oder bedingte Anweisung Weiter mit PP.
Datentyp- umwandlung. Literale sind: Bezeichner mit einem festen Wert wie z.B:
Java- Syntax.
ARRAY oder FELD oder VEKTOR
Funktionen.
Dynamischer Speicher und Struktur
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
WHILE - Anweisung.
Objekte werden als Adressen (Referenzen) übergeben. Dies führt manchmal zu unerwarteten Ergebnissen...
Programmier-sprache C Weiter mit PP..
WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
FOR Anweisung.
Der Präprozessor. Bevor der Compiler das Programm in Maschinencode übersetzt (nur dieser kann von der CPU, dem Herz des Computers, bearbeitet werden)
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
DO...WHILE Anweisung.
DO...WHILE Anweisung.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 2 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Formeln umstellen Zum Umstellen einer Formel gelten die Rechenregeln von Gleichungen Im Folgenden ein Beispiel am Dreieck:
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Programm besteht aus mehreren Bestandteilen: Schlüsselwörter Sonderzeichen Bezeichner Kommentare Texte.
Der C-Präprozessor EDV1 - 04Präprozessor.
DVG Ablaufsteuerung
Schleifen mit der Turtle
Informatik Grundkurse mit Java
Primzahlen Primzahlen sind natürliche Zahlen, die nur durch sich selbst und durch 1 teilbar sind? Bedingung: Die Zahl muss größer sein als 1.
Struktogramme IF-ELSE FOR – Schleife
Zur Kommunikation von Wahrscheinlichkeiten
Einführung in die Programmiersprache C 1
Informatik 1 Übung 2.
Informatik Grundlagen, WS04, Seminar 11
Guten Nachmittag!.
Wir haben gesehen Das Gerüst ist bei JavaKara fix vorgegeben
Universität Hamburg Philosophisches Seminar Philosophische Puzzle Probleme mit Wahrheit und Falschheit weiter.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Auswahlanweisungen, Iterationsanweisungen, Blöcke, Sprunganweisungen
C-Einstieg. Agenda 1Vorbereitung 2Aufbau eines Programms 2.1Header 2.2 Methoden 2.3Main 3Datentypen & Variablen 4Operatoren(+, -, *, /) 5Logik 5.1IF 5.2Switch.
Purga - Scriptengine Ein Einblick.
Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014.
BMEVIEEA100 Grundlagen der Programmierung
Vorlesung 3. if else Anweisung if (Ausdruck) Anweisung1 else Anweisung2 Ausdruck hat einen von 0 verschiedenen Wert, so wird Anweisung 1 ausgeführt. Bei.
Vorlesung 5. #include double fv(double x) { return sin(x); } int main(){ int i,N=10; double a=1,b=2,del,x,sum,f,integral; for(i=1,sum=0.0,del = (b-a)/N;i
Hochschule Fulda – FB ET Sommersemester 2014
A) Erklären Sie den Datentyp char. b) Erklären Sie den Datentyp Struct c) Erklären Sie die Wirkungsweise des Operators & bei Anwendung im Zusammenhang.
Software Engineering Struktogramme
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Einführung in die Programmiersprache C 2
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
Programmieren 1 C++ Aufgaben / Übungen.
Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tageszähler).Wenn.
Pointer. Grundsätzliches: Im Arbeitsspeicher werden Daten gespeichert. Um auf die Daten eindeutig zugreifen zu können, werden diesen Daten Adressen zugeordnet.
Funktionen, Felder und Parameter- übergabe. Funktionsaufruf mit Feld als Parameter: Parameter = Name des Feldes.
TRUE und FALSE in C Der Wert 0 steht für FALSE Jeder von 0 verschiedene Wert steht für TRUE FALSE wird als 0 dargestellt TRUE wird als 1 dargestellt.
Tutorium Software-Engineering SS14 Florian Manghofer.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
Inhalte der Übungen 1.Grundlagen, Ein- und Ausgabe 2.Kontrollstrukturen (Projekt 1) 3.Funktionen 4.Zeiger, Felder (Projekt 2) 5.Strings, Strukturen 6.Fileverarbeitung.
Java-Kurs - 2. Übung primitive Datentypen, Konstanten
Arrays in C Ein Array ist eine Variable, die aus einer Anzahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Rechenausdrücke (Terme) – Fachbegriffe - Rechenregeln
 Präsentation transkript:

Verzweigung oder bedingte Anweisung Weiter mit PP.

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

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

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)

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.

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 + 100 km

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.

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

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

Eingabe(zalt) Eingabe(zneu) Eingabe(bv) zneu  zalt zneu = zneu + 1000 f w zneu = zneu + 1000 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)

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

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

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.

bei einer Anweisung sind Klammern nicht nötig. ... if(zneu <= zalt){ zneu = zneu + 1000; } 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.

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

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.

Flussdiagramm für eine Einseitige Verzweigung Weiter mit PP.

f zneu <= zalt w zneu = zneu + 1000 Weiter mit PP.

Struktogramm für eine Einseitige Verzweigung Weiter mit PP.

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

Beispiel: Weiter mit PP.

//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 ?

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.

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)

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.

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?

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!

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)

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

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

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

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

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

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

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

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

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)

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

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)

oder als eine elegantere Alternative: Weiter mit PP.

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.

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

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

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;

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

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

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.

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.

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

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

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

Programmverlauf Weiter mit PP.

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

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

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

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

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

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

Programmverlauf Weiter mit PP.

Annahme: Bedingung wahr Weiter mit PP.

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): ...

Annahme: Bedingung falsch Weiter mit PP.

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

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.

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)

// 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.

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

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

Block: Fasst mehrere Anweisungen zusammen. Weiter mit PP.

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.

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

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

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

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

// 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.

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.

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

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)

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

// 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.

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.

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.

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

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.

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

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.

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.

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.

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

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.

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

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.

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)

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)

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 !!!

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

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

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.

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

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.

Nochmals zum EVA-Prinzip Weiter mit PP.

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.

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)

Guter Programmierstil: Weiter mit PP.

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

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!

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.

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?

... 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

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

... 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.

... 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.