Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Ähnliche Präsentationen


Präsentation zum Thema: ""—  Präsentation transkript:

38 Hamster-Modell / Auswahl
Auswahlanweisungen Wiederholungsanweisungen Boolesche Methoden Strukturieren von Programmen Hamster mit Gedächtnis (Boolesche Variablen) Hamster mit Gedächtnis (Zahlen) Integer-Methoden Verallgemeinerungen von Daten und Methoden Prozeduren und Methoden mit Parametern Prozeduren und Methoden, die sich selbst aufrufen (Rekursion)

39 Hamster-Modell / Auswahl / Test-Befehle
3 Testbefehle, u. a. zur Vermeidung von Laufzeitfehlern vornFrei() liefert den Wert true (wahr), falls sich in Blickrichtung direkt vor dem Hamster keine Mauer befindet, false (falsch) sonst. maulLeer() liefert den Wert false, falls der Hamster mindestens ein Korn im Maul hat, true sonst. kornDa() liefert den Wert true, falls auf der Kachel, auf der der Hamster sich gerade befindet, mindestens ein Korn liegt, false sonst. Sinn und Zweck nur wenn der Testbefehl vornFrei() den Wert true liefert, darf der Befehl vor(); ausgeführt werden. nur wenn der Testbefehl maulLeer() den Wert false liefert, darf der Befehl gib(); ausgeführt werden. nur wenn der Testbefehl kornDa() den Wert true liefert, darf der Befehl nimm(); ausgeführt werden.

40 Hamster-Modell / Boolesche Ausdrücke
Ziel: Verknüpfung von Testbefehlen vornFrei() && maulLeer() Aussage der Aussagenlogik Satz, dem eindeutig ein Wahrheitswert wahr (true) oder falsch (false) zugeordnet werden kann „Ein Tisch ist ein Möbelstück“, "die Sonne scheint" „Geh nach Hause“ (keine Aussage) vornFrei(), maulLeer(), kornDa() Boolesche Werte Menge der Wahrheitswerte: { true, false } Einfache (elementare) boolesche Ausdrücke Testbefehle

41 Hamster-Modell / Boolesche Ausdrücke
Verknüpfung von booleschen Ausdrücken durch logische Operatoren zu booleschen Ausdrücken Negation „nicht“ („!“) ! A liefert true, wenn der boolesche Ausdruck A den Wert false hat, false sonst. Beispiel: !vornFrei() Konjunktion „und“ („&&“) A1 && A2 liefert true, wenn die booleschen Ausdrücke A1 und A2 den Wert true haben, false sonst. Beispiel: vornFrei() && !maulLeer() Disjunktion „oder“ („||“) A1 || A2 liefert true, wenn mindestens einer der beiden booleschen Ausdrücke A1 und A2 den Wert true hat, false sonst. Beispiel: !kornDa() || vornFrei()

42 Hamster-Modell / Boolesche Ausdrücke / Eigenschaften
Priorität („Punkt vor Strich“) Wie wird der folgende boolesche Ausdruck abgearbeitet? maulLeer() || ! vornFrei() && kornDa() maulLeer() || ! vornFrei() && kornDa()  ! vor && vor || Durch Klammerung kann die Priorität beeinflusst werden: Ein in runde Klammern eingeschlossener boolescher Ausdruck wird immer zuerst ausgeführt. Beispiele: ( maulLeer() || !vornFrei() ) && kornDa() !( kornDa() && maulLeer() )

43 Hamster-Modell / Boolesche Ausdrücke / Eigenschaften
Assoziativität Auswertungsreihenfolge bei gleicher Priorität Beispiele: maulLeer() || vornFrei() || kornDa() !!maulLeer()  &&, || Linksassoziativ („von links nach rechts“)  ! Rechtsassoziativ („von rechts nach links“) ( maulLeer() || vornFrei() ) || kornDa() !( !maulLeer() ) Auswertungsreihenfolge („Der Hamster ist ein faules Tier“) Boolescher Ausdruck A1 && A2 Der Wert des booleschen Teilausdrucks A2 wird nur dann ermittelt, wenn der Teilausdruck A1 den Wert true liefert. Boolescher Ausdruck A1 || A2 Der Wert des booleschen Teilausdrucks A2 wird nur dann ermittelt, wenn der Teilausdruck A1 den Wert false liefert.

44 Hamster-Modell / Bedingte Anweisung
Bedingte Anweisung (Abzweigung): Ausführung einer Anweisung in Abhängigkeit von der Gültigkeit eines booleschen Ausdrucks if ( Boolescher Ausdruck ) Anweisung Semantik (Bedeutung) Zuerst wird der boolesche Ausdruck ausgewertet. Falls die Auswertung den Wert true liefert, wird die Anweisung ausgeführt, sonst nicht. Anweisung Grundanweisung (Grundbefehl) Prozeduraufruf Bedingte Anweisung

45 Hamster-Modell / Bedingte Anweisung / Beispiele
Sichere Grundbefehle void sicheresVor() { if (vornFrei()) vor(); } void sicheresGib() { if (!maulLeer()) gib(); void sicheresNimm() { if (kornDa()) nimm(); if (kornDa()) nimm(); linksUm(); // wird immer ausgeführt

46 Hamster-Modell / Blockanweisung
Zusammenfassung von mehreren Anweisungen zu einer Einheit { Anweisung1 ... Anweisungn } Semantik (Bedeutung) Die in geschweifte Klammern eingeschlossenen Anweisungen werden in der angegebenen Reihenfolge ausgeführt. Anweisung Grundanweisung (Grundbefehl) Prozeduraufruf Bedingte Anweisung Blockanweisung

47 Hamster-Modell / Blockanweisung / Beispiele
if (kornDa() && vornFrei()) { nimm(); vor(); } linksUm(); // wird immer ausgeführt void sicheresGib() { if (!maulLeer()) gib();

48 Hamster-Modell / Alternativanweisung
Alternativanweisung (Verzweigung): Von 2 gegebenen Anweisungen wird genau eine Anweisung in Abhängigkeit von der Gültigkeit bzw. Nichtgültigkeit eines booleschen Ausdrucks ausgeführt if ( Boolescher Ausdruck ) Anweisung1 else Anweisung2 Semantik (Bedeutung) Zuerst wird der boolesche Ausdruck ausgewertet. Falls die Auswertung den Wert true liefert, wird die Anweisung1 ausgeführt, sonst die Anweisung2. Anweisung Grundanweisung (Grundbefehl) Prozeduraufruf Blockanweisung Bedingte Anweisung Alternativanweisung Auswahlanweisung, Fallunterscheidung

49 Hamster-Modell / Alternativanweisung / Beispiele
if (vornFrei()) vor(); else if (kornDa()) nimm(); else if (!maulLeer()) gib(); else linksUm(); linksUm(); // wird immer ausgeführt if (vornFrei()) if (kornDa()) nimm(); else vor(); Zu welchem if gehört das else, d.h. was geschieht, wenn vornFrei() den Wert false liefert? if (vornFrei()) { if (kornDa()) nimm(); else vor(); } Das else gehört immer zu dem letzten if, dem noch kein else zugeordnet ist.

50 Hamster-Modell / Auswahlanweisungen / Beispiel
Aufgabe: Gegeben sei das folgende Hamster-Territorium. Der Hamster weiß nicht, wieviele Körner er im Maul hat. Falls möglich, soll er in jeder Ecke seines Territoriums genau ein Korn ablegen. Programm: void main() { if (!maulLeer()) gib(); laufeInDieNaechsteEcke(); if (!maulLeer()) gib(); } void laufeInDieNaechsteEcke() { vor(); vor(); vor(); vor(); linksUm(); }

51 Hamster-Modell / Aufgaben
Gegeben sei das folgende Hamster-Territorium. Der Hamster weiß nicht, wieviele Körner er im Maul hat. Falls möglich, soll er in jeder Ecke seines Territoriums genau ein Korn ablegen. Wenn er keine Körner mehr im Maul hat, soll er nicht weiterlaufen. Aufgabe 6: Gegeben sei das folgende Hamster-Territorium. Auf jeder Kachel liegen ein oder zwei Körner. Der Hamster soll dafür sorgen, dass auf jeder Kachel genau ein Korn liegt (mit Feld aufg6a.ter und aufg6b.ter testen).

52 Hamster-Modell / Aufgaben
Gegeben sei das folgende Hamster-Territorium. In den Eckfeldern liegen jeweils 1, 2 oder 3 Körner. Der Hamster weiß nicht, wieviele Körner er im Maul hat. Nach der Ausführung des Programms sollen in der unteren linken Ecke 1 Korn, in der unteren rechten Ecke 2 Körner, in der oberen rechten Ecke 3 Körner und in der oberen linken Ecke 4 Körner liegen. Außerdem soll der Hamster, sobald er feststellt, daß er kein Korn mehr ablegen kann oder nachdem er in der oberen linken Ecke das 4. Korn abgelegt hat, zurück in die Ausgangsposition laufen.

53 Hamster-Modell / Wiederholung
Auswahlanweisungen  Wiederholungsanweisungen Boolesche Methoden Strukturieren von Programmen Hamster mit Gedächtnis (Boolesche Variablen) Hamster mit Gedächtnis (Zahlen) Integer-Methoden Verallgemeinerungen von Daten und Methoden Prozeduren und Methoden mit Parametern Prozeduren und Methoden, die sich selbst aufrufen (Rekursion)

54 Hamster-Modell / Wiederholung / Motivation
Aufgabe Gegeben seien die beiden folgenden Hamster-Territorien: Der Hamster soll in Blickrichtung bis zur nächsten Wand laufen. Programme void main() { vor(); } void main() { vor(); vor(); } Allgemeingültig: solange vornFrei() wiederhole vor();

55 Hamster-Modell / Wiederholung / while-Anweisung
while-Anweisung (while-Schleife): Wiederholte Ausführung einer Anweisung (Iterationsanweisung) in Abhängigkeit von der Gültigkeit eines booleschen Ausdrucks while ( Boolescher Ausdruck ) Anweisung Semantik (Bedeutung) 1. Zuerst wird der boolesche Ausdruck ausgewertet. 2. Falls die Auswertung den Wert true liefert, wird die Anweisung ausgeführt. Anschließend werden die Punkte 1 und 2 ein weiteres Mal ausgeführt. 3. Wenn die Auswertung den Wert false liefert, ist die Ausführung der while-Anweisung beendet. Anweisung Grundanweisung (Grundbefehl) Prozeduraufruf Blockanweisung Bedingte Anweisung Alternativanweisung while-Anweisung

56 Hamster-Modell / Korrekte Hamster-Programme
Gegeben: eine Hamster-Aufgabe mit der Charakterisierung von Hamsterlandschaften, also i. a. kein spezielles Hamster-Territorium. Ein Hamster-Programm ist korrekt, wenn es alle folgenden Bedingungen erfüllt: Es muß syntaktisch korrekt sein. Es muß die Aufgabenstellung für alle sich aus der Landschaftscharakterisierung ergebenden möglichen Ausgangssituationen korrekt und vollständig lösen. Das Programm verursacht keine Laufzeitfehler und hält nach endlicher Zeit an (terminiert).

57 Hamster-Modell / Wiederholung / Beispiel
Aufgabe Der Hamster befindet sich auf einer beliebigen Kachel in einem durch Mauern abgeschlossenen Hamster-Territorium unbekannter Größe. Typische Hamsterlandschaften: Der Hamster soll in Blickrichtung bis zur nächsten Wand laufen. Programm void main() { while (vornFrei()) vor(); }

58 Hamster-Modell / Wiederholung / Beispiel
Aufgabe Der Hamster befindet sich auf einer beliebigen Kachel in einem durch Mauern abgeschlossenen ansonsten aber mauerlosen Hamster-Territorium unbekannter Größe. Typische Hamsterlandschaften: Der Hamster soll in eine Ecke laufen und dabei alle Körner einsammeln.

59 Hamster-Modell / Wiederholung / Beispiel
Aufgabe (Fortsetzung) Der Hamster befindet sich auf einer beliebigen Kachel in einem durch Mauern abgeschlossenen ansonsten aber mauerlosen Hamster-Territorium unbekannter Größe. Der Hamster soll in eine Ecke laufen und dabei alle Körner einsammeln. Programm void main() { sammle(); laufeBisZurNaechstenWandUndSammle(); linksUm(); laufeBisZurNaechstenWandUndSammle(); } void sammle() { while (kornDa()) { nimm(); } void laufeBisZurNaechstenWandUndSammle() { while (vornFrei()) { vor(); sammle();

60 Hamster-Modell / Wiederholung / do-Anweisung
do-Anweisung (do-Schleife): die Iterationsanweisung wird mindestens einmal ausgeführt do Anweisung while ( Boolescher Ausdruck ); Semantik (Bedeutung) 0. Ausführung der Anweisung 1. Der boolesche Ausdruck wird ausgewertet. 2. Falls die Auswertung den Wert true (!) liefert, wird die Anweisung ausgeführt. Anschließend werden die Punkte 1 und 2 ein weiteres Mal ausgeführt. 3. Wenn die Auswertung den Wert false liefert, ist die Ausführung der do-Anweisung beendet. Anweisung Grundanweisung (Grundbefehl) Prozeduraufruf Blockanweisung Bedingte Anweisung Alternativanweisung while-Anweisung do-Anweisung Schleifen

61 Hamster-Modell / Wiederholung / Beispiel
Aufgabe Der Hamster hat eine bestimmte Anzahl (>0) von Körnern im Maul, die er alle ablegen soll. Programm void main() { do { gib(); } while (!maulLeer()); }

62 Hamster-Modell / Wiederholung / Beispiel
Aufgabe Der Hamster befindet sich mit Blickrichtung Ost in der linken unteren Ecke eines durch Mauern abgeschlossenen ansonsten aber mauerlosen Hamster-Territoriums unbekannter Größe. Auf jeder Kachel innerhalb der Mauern befindet sich mindestens ein Korn. Typische Hamsterlandschaften: Der Hamster soll entlang der Mauern laufen und dabei alle Körner einsammeln. Alle Körner, die er im Maul hat, soll er anschließend in der linken unteren Ecke ablegen.

63 Hamster-Modell / Wiederholung / Beispiel
Aufgabe (Fortsetzung) Der Hamster Auf jeder Kachel innerhalb der Mauern befindet sich mindestens ein Korn. Der Hamster soll entlang der Mauern laufen und dabei alle Körner einsammeln. Alle Körner, die er im Maul hat, soll er anschließend in der linken unteren Ecke ablegen. Programm void main() { // sammle(); laufeInDieNaechsteEckeUndSammle(); linksUm(); laufeInDieNaechsteEckeUndSammle(); legAb(); } void sammle() { do { nimm(); while (kornDa()); ...

64 Hamster-Modell / Wiederholung / Beispiel
Aufgabe (Fortsetzung) Der Hamster Auf jeder Kachel innerhalb der Mauern befindet sich mindestens ein Korn. Der Hamster soll entlang der Mauern laufen und dabei alle Körner einsammeln. Alle Körner, die er im Maul hat, soll er anschließend in der linken unteren Ecke ablegen. Programm ... void laufeInDieNaechsteEckeUndSammle(){ while (vornFrei()) { vor(); sammle(); } void legAb() { do { gib(); while (!maulLeer());

65 Hamster-Modell / Wiederholung geschachtelte Schleifen
Aufgabe Der Hamster befindet sich auf einer beliebigen Kachel in einem durch Mauern abgeschlossenen ansonsten aber mauerlosen Hamster-Territorium unbekannter Größe. Der Hamster soll in Blickrichtung bis zur nächsten Wand laufen und dabei alle Körner einsammeln, ausgenommen die Körner auf der letzten Kachel vor der Mauer. Programm mit geschachtelten while-Schleifen void main() { while (vornFrei()) { // sammle while (kornDa()) nimm(); vor(); }

66 Hamster-Modell / Wiederholung / Endlosschleife
die Schleifenbedingung hat immer den Wert true Beispiel: Bei der Ausführung des Programms void main() { while (vornFrei()) { while (kornDa()) nimm(); } mit dem Hamster-Territorium ergibt sich eine Endlosschleife.

67 Hamster-Modell / Aufgaben
In einem rechteckigen, geschlossenen Raum unbekannter Größe ohne innere Mauern sind wahllos eine unbekannte Anzahl an Körnern verstreut. Typische Hamsterlandschaften: Der Hamster, der sich zu Anfang in der linken unteren Ecke des Hamster-Territoriums mit Blickrichtung Ost befindet, soll alle Körner aufsammeln und dann stehenbleiben.

68 Hamster-Modell / Aufgaben
Der Hamster steht vor einer regelmäßigen Mulde unbekannter Tiefe. Es liegen keine Körner im Hamster-Territorium. Typische Hamsterlandschaften: Der Hamster, der anfangs genau ein Korn im Maul hat, soll bis zur tiefsten Stelle der Mulde hinabsteigen, sich umdrehen, wieder hinaufsteigen und an seiner Anfangsposition stehenbleiben.

69 Hamster-Modell / Aufgaben
Der Hamster befindet sich in der unteren Ecke eines gleichmäßigen rautenförmigen Territoriums beliebiger Größe. Er schaut gen Norden. Das Territorium ist durch Mauern abgeschlossen; ansonsten existieren jedoch keine Mauern. In dem Territorium befindet sich genau ein Korn. Typische Hamsterlandschaften: Der Hamster soll sich auf die Suche nach dem Korn machen und es schließlich fressen.

70 Hamster-Modell / Wiederholung
Auswahlanweisungen  Wiederholungsanweisungen  Boolesche Methoden Strukturieren von Programmen Hamster mit Gedächtnis (Boolesche Variablen) Hamster mit Gedächtnis (Zahlen) Integer-Methoden Verallgemeinerungen von Daten und Methoden Prozeduren und Methoden mit Parametern Prozeduren und Methoden, die sich selbst aufrufen (Rekursion)

71 Hamster-Modell / Test-Methoden / Motivation
Prozeduren definieren neue Befehle (Anweisungen) Beispiel: rechtsUm(); Test-Methoden definieren neue Testbefehle (boolesche Methoden) liefern als Ergebnis einen booleschen Wert Beispiele: mauerDa() linksFrei() rechtsFrei() fuenfKoernerDa()

72 Hamster-Modell / return-Anweisung
Boolesche return-Anweisung: liefern des Wertes einer booleschen Methode return Boolescher Ausdruck; Semantik (Bedeutung) 1. Der Wert des Booleschen Ausdrucks wird berechnet. 2. Die Ausführung der booleschen Methode, die diese return-Anweisung enthält, wird beendet. 3. Der Wert des Booleschen Ausdrucks wird als Ergebnis der booleschen Methode zurückgegeben. Anweisung Grundanweisung (Grundbefehl) Prozeduraufruf Blockanweisung Bedingte Anweisung Alternativanweisung while-Anweisung do-Anweisung return-Anweisung

73 Hamster-Modell / return-Anweisung / Beispiele
Beispiele für die Anwendung der booleschen return-Anweisung return true; return vornFrei(); return maulLeer() || vornFrei(); return (kornDa() && !vornFrei());

74 Hamster-Modell / Boolesche Methoden / Deklaration
Boolesche Methodedeklaration: Vereinbarung eines neuen Testbefehls boolean MethodenName() { Anweisungsfolge } Methodenkopf Methodenrumpf Zusatzbedingung: In jedem möglichen Weg durch den Methodenrumpf muß eine boolesche return-Anweisung stehen! Beispiel: boolean mauerDa() { return !vornFrei(); }

75 Hamster-Modell / Boolesche Methoden / Aufruf
Aufruf einer booleschen Methode MethodenName() Zusatzbedingung: Boolesche Methodenaufrufe dürfen überall dort auftreten, wo auch die 3 vordefinierten Testbefehle aufgerufen werden dürfen, nämlich in booleschen Ausdrücken. Semantik (Bedeutung) Ausführung des Methodenrumpfs Der zurückgegebene Wert wird bei der weiteren Auswertung des booleschen Ausdrucks an der Stelle verwendet, an der der Methodenaufruf stand. Beispiel: void main(){ if (mauerDa()) linksUm(); }

76 Hamster-Modell / Boolesche Methoden / Programm
Prozeduren boolesche Methoden Programm mit Methoden void main() { Anweisungsfolge } Methodendeklaration Methodendeklaration Dabei müssen die folgenden Bedingungen gelten: Die Methodennamen sind paarweise verschieden. Innerhalb der Methodenrümpfe werden nur Methoden aufgerufen, die auch deklariert sind. Es spielt keine Rolle, ob die aufgerufene Methode vor oder nach dem Aufruf deklariert wird! Die Methodendeklarationen sind nicht geschachtelt.

77 Hamster-Modell / Boolesche Methoden / Beispiel
Programm void main() { if (linksFrei()) linksUm(); else { } boolean linksFrei() { linksUm(); return vornFrei(); Programm void main() { if (linksFrei()) linksUm(); if (!linksFrei()) { } boolean linksFrei() { linksUm(); return vornFrei();

78 Hamster-Modell / Boolesche Methoden / Seiteneffekt
Seiteneffekt einer booleschen Methode nach Beendigung des Methodenaufrufs ist nicht nur der Ergebniswert berechnet, sondern auch der Zustand des Hamsters oder der Hamsterlandschaft verändert. Boolesche Methoden sollten in der Regel wegen des besseren Verständnisses der Reduzierung der Komplexität der geringeren Fehleranfälligkeit keine Seiteneffekte hervorrufen.  Die von einer booleschen Methode bewirkten Zustandsänderungen müssen von dieser vor der Beendigung wieder rückgängig gemacht werden.

79 Hamster-Modell / Boolesche Methoden / Beispiel
Boolesche Methode linksFrei() ohne Seiteneffekt boolean linksFrei() { linksUm(); if (vornFrei()) { rechtsUm(); return true; } else { return false;

80 Hamster-Modell / Aufgaben
Der Hamster steht mit Blickrichtung Ost vor einer unregelmäßigen und mit Körnern gefüllten Mulde (ohne Überhänge!). Er weiß nicht, wie breit und tief die Mulde ist. Typische Hamsterlandschaften: Der Hamster soll alle Körner einsammeln und anschließend auf einer beliebigen Kachel der tiefsten Ebene sitzen bleiben.

81 Hamster-Modell / Aufgaben
Der Hamster, der genau ein Korn im Maul hat, sitzt in einem geschlossenen, körnerlosen Raum unbekannter Größe. Rechts von ihm befindet sich eine Wand; das Feld vor ihm ist frei. Typische Hamsterlandschaften: Der Hamster soll solange an der Wand entlang laufen, bis er wieder sein Ausgangsfeld erreicht.

82 Hamster-Modell / Aufgaben
Der Hamster ist zum Skifahrer mutiert. Vor ihm befindet sich ein Slalom-Parcours mit einem Korn am Ende, das das Ziel markiert. Typische Hamsterlandschaft mit Wegbeschreibung: Der Hamster soll den Slalom-Parcours bewältigen und das Korn fressen.

83 Hamster-Modell / Aufgaben
Der Hamster steht in der linken unteren Ecke eines Labyrinths. Dieses besteht aus Gängen, die jeweils so breit sind, wie eine Mauer. Die Gänge können verzweigen, es gibt jedoch keine Rundgänge. Typische Hamsterlandschaft: Der Hamster „riecht“ das einzige Korn im Labyrinth. Da er Hunger hat, versucht er natürlich, das Korn zu finden und zu fressen.

84 Hamster-Modell / Ausblick
Auswahlanweisungen  Wiederholungsanweisungen  Boolesche Methoden  Strukturieren von Programmen Hamster mit Gedächtnis (Boolesche Variablen) Hamster mit Gedächtnis (Zahlen) Integer-Methoden Verallgemeinerungen von Daten und Methoden Prozeduren und Methoden mit Parametern Prozeduren und Methoden, die sich selbst aufrufen (Rekursion)


Herunterladen ppt ""

Ähnliche Präsentationen


Google-Anzeigen