Verzweigung oder bedingte Anweisung Weiter mit PP.

Slides:



Advertisements
Ähnliche Präsentationen
ALP II: Objektorientierte Programmierung Sommersemester 2006
Advertisements

der Universität Oldenburg
der Universität Oldenburg
der Universität Oldenburg
Verzweigung oder bedingte Anweisung Weiter mit PP.
Zusammenfassung der Vorwoche
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik F Verteilte Software - Java.
Verteilte Software - Java - Prozedurale Programmierung 1
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik Verteilte Software - Java -
Internetzugriff mit Strings und Streams
3 Sprachelemente und Anweisungen JavaHS Merseburg (FH) WS 06/07 Strings (Zeichenketten)
Ausnahmen HS Merseburg (FH) WS 06/07.
Java: Dynamische Datentypen
FH-Hof Servlets Richard Göbel. FH-Hof Konzept Servlets werden auf der Server-Seite durch ein Formular aufgerufen werten die Eingaben aus einem Formular.
FH-Hof Sockets in Java Richard Göbel. FH-Hof Kommunikation über das Internet - Grundlagen Ein Rechner wird im Internet über die so genannte IP- Adresse.
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
SWITCH - Anweisung.
IF-ELSE-IF-Ketten Weiter mit PP..
Programmier-sprache Java Weiter mit PP..
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,
Konstruktoren.
Objekte werden als Adressen (Referenzen) übergeben. Dies führt manchmal zu unerwarteten Ergebnissen...
Assoziationen (Beziehungen) 1 : n. Zu einem Auto gibt es mehrere Fahrer (2) und zu diesen 2 Fahrern gibt es genau dieses Auto.
WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Exceptions. import java.sql.*; public class MyException{ boolean b; Statement stat; public MyException(){ b = stat.execute("xyz"); } Beim Übersetzen dieses.
DO...WHILE Anweisung.
ARRAY oder FELD oder VEKTOR
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
Programmieren mit JAVA
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Programm besteht aus mehreren Bestandteilen: Schlüsselwörter Sonderzeichen Bezeichner Kommentare Texte.
PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen.
DVG Ausnahmen. DVG Was sind Programmfehler? 4 Programm erzielt gar kein Ergebnis. 4 Berechnetes Ergebnis stimmt nicht mit dem erwarteten.
1DVG3 - anonyme Klassen Anonyme Klassen. DVG3 - anonyme Klassen 2 Syntax new BasisKlasse(Parameterliste) { Modifikationen und Erweiterungen der Basisklasse.
DVG Ausnahmen1 Ausnahmen. DVG Ausnahmen 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht.
DVG Einführung in Java1 Einführung in JAVA.
DVG Methoden 1 Methoden. 2 int dezi = Integer.parseInt(args[0]); boolean vz = (dezi>=0); dezi = Math.abs(dezi); String Bin = ""; do { } while.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
Thema: Fibonacci-Zahlen
Verzweigung.
Informatik Grundkurse mit Java
Ein Textadventure AIP Aufgabe Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen.
Grundkonzepte Java - Klassendefinition
Rekursive Funktionen (Fakultät)
Socket-Programmierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
CuP - Java Eingabe über Tastatur, AudioClips, überschreiben, Quiz Montag, 18. November 2002.
Die Klasse String und ihre Methoden
Unterprogramme in JAVA
Optimale Ursprungsgerade
CuP - Java Neunte Vorlesung Entspricht Kapitel 4.2 und 5 des Skriptums
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
CuP - Java Sechste Vorlesung Entspricht ungefähr Kapitel 3. 1 – 3
Learning By Doing Ausnahmebehandlung Exceptions (Ausnahmebehandlung) Typische Fehlverhalten zur Laufzeit: s. Buch S. 287ff -Verwendung von null-Objekten.
Programmierung von Agenten in Java: Implementierung einer Supply-Chain
Programmiervorkurs WS 2014/15 Methoden
Programmiervorkurs WS 2014/15 Schleifen
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
3. Beschreibung von Abläufen durch Algorithmen 3.4 Zufall
Natürliches Programmieren
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
© 2004 Pohlig Informatik Kurse © 2004 Pohlig Informatik Kurse Der Tramp tanzt die Rekursion zünderUntersuchen(…) Basisfall Rückmeldung:
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Abteilung für Telekooperation Softwareentwicklung 2 UE WS 2008/09 SE2UE_ Ausnahmen (Exceptions)
Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tageszähler).Wenn.
Schleifen mit der Turtle
 Präsentation transkript:

Verzweigung oder bedingte Anweisung Weiter mit PP.

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

import java. io. BufferedReader; import java. io 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; Lehreraktivität: Präsentiert den Eingabeteil (C-Programm)

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); Lehreraktivität: Präsentiert den Eingabeteil (C-Programm)

Differenz kann negativ werden 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); } } Lehreraktivität: Präsentiert den Eingabeteil (C-Programm) Differenz kann negativ werden Wann berechnet das Java-Programm ein falsches Ergebnis?

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 (Tachoü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)

Java-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: true 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: false

Aufgabe: Verändern Sie das Java-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; System.out.println("L/100 km:" +bv100); } 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; System.out.println("Tacho- überlauf"); } Lehreraktivität: Stellt ein C-Programm vor. Übrigens: Welchem Prinzip widerspricht dieses Programm ? d = zneu–zalt; erg = b/d*100; System.out.println("L/100 km:" +erg);

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

Ausgabe("Tachoüberlauf") Eingabe(zalt) Eingabe(zneu) Eingabe(bv) zneu <= zalt w f zneu = zneu+1000 Ausgabe("Tachoü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 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 Lehreraktivität: Präsentiert eine Lösung (C-Programm).

System.out.println("erste Zahl eingeben"); BufferedReader myinput = new BufferedReader(new InputStreamReader( System.in)); Lehreraktivität: Präsentiert eine Lösung (C-Programm).

str = myinput. readLine(); a=Integer. parseInt(str);. System. out str = myinput.readLine(); a=Integer.parseInt(str); System.out.println("zweite Zahl eingeben"); str = myinput.readLine(); b=Integer.parseInt(str); // Wie geht es weiter ? 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). System.out.println( "Max= "+max);

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

Wir machen ein paar Tests, denn die Wahrheit ist konkret Wir machen ein paar Tests, denn die Wahrheit ist konkret ! Um Platz zu sparen schreiben wir statt System.out.println abgekürzt: sout Weiter mit PP.

if (a<b){ max = b; } if (a>=b){ max = a; } sout("Max=%d", max); 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). sout("Max=%d", max); 2

if (a<b){ max = b; } if (a>=b){ max = a; } sout("Max=%d", max); 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). sout("Max=%d", max); 5

if (a<b){ max = b; } if (a>=b){ max = a; } sout("Max=%d", max); 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). sout("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;

Java - 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: true falsch bedeutet: Wert des Ausdrucks: false 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. Java-Programm Weiter mit PP.

if (a<b){ max = b; } else{ max = a; } Bedingung 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 System.out.println("Maximum= " +max);

} 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 sout("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 sout("Maximum =%d", max);

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

if (a<b){ max = b; } sout("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; } sout("Maximum = %d ", max); Zum Beispiel ... 2 1 2 if (a<b){  max = b; } 2 sout("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; } sout("Maximum = %d ", max); Zum Beispiel ... 2 1 if (a<b){  max = b; } ? sout("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 + Java-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)

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

System.out.println("Max= " +max+" Min= "+min); } } 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 Java-Programm Weiter mit PP.

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 ... 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; } System.out.println("Max= " +max); } 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 Java-Programm Weiter mit PP.

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 ... 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; } sout("Max= "+max+" Min= "+min); } 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.

TESTEN Sie mit den gerade angegebenen Zahlenkombinationen dieses Struktogramm. 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 Java-Programm Weiter mit PP.

import java.io.*; public class MainMaximum1 { public static void main() throws IOException{ int z1,z2,z3,m,g,k; String str; Weiter mit PP.

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); Weiter mit PP.

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

System.out.println("sortierte Reihenfolge=" +" "+k+" "+m+" "+g); } 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) zaehler != 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) zaehler != 0 W F Wieviel if...else Anweisungen kommen in diesem Programm vor? E Eingabe(zaehler , nenner) zaehler != 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.