Post on 05-Apr-2015
transcript
Hamster-ProgrammierungSeite 1
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
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)
Hamster-ProgrammierungSeite 2
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
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.
Hamster-ProgrammierungSeite 3
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
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– Boolesche Werte
– Testbefehle
Hamster-ProgrammierungSeite 4
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
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()
Hamster-ProgrammierungSeite 5
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
Hamster-Modell / Boolesche Ausdrücke / Eigenschaften Priorität („Punkt vor Strich“)
– Wie wird der folgende boolesche Ausdruck abgearbeitet?
» 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() )
» maulLeer() || ! vornFrei() && kornDa()
Hamster-ProgrammierungSeite 6
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
Hamster-Modell / Boolesche Ausdrücke / Eigenschaften
– Assoziativität» Auswertungsreihenfolge bei gleicher PrioritätBeispiele:
maulLeer() || vornFrei() || kornDa() !!maulLeer()
&&, || Linksassoziativ („von links nach rechts“)
! Rechtsassoziativ („von rechts nach links“)
Beispiele: ( 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.
Hamster-ProgrammierungSeite 7
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
Hamster-Modell / Bedingte Anweisung
Bedingte Anweisung (Abzweigung): – Ausführung einer Anweisung in Abhängigkeit von der Gültigkeit
eines booleschen Ausdrucksif ( 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
Hamster-ProgrammierungSeite 8
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
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
Hamster-ProgrammierungSeite 9
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
Hamster-Modell / Blockanweisung
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
Hamster-ProgrammierungSeite 10
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
Hamster-Modell / Blockanweisung / Beispiele
if (kornDa() && vornFrei())
{ nimm(); vor();}linksUm(); // wird immer ausgeführt
void sicheresGib() { if (!maulLeer())
{ gib(); }}
Hamster-ProgrammierungSeite 11
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
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
– AlternativanweisungAuswahlanweisung,
Fallunterscheidung
Hamster-ProgrammierungSeite 12
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
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();
if (vornFrei()) { if (kornDa())
nimm(); else vor();}
Zu welchem if gehört das else, d.h. was geschieht, wenn vornFrei() den Wert false liefert?
Das else gehört immer zu dem letzten if, dem noch kein else zugeordnet ist.
Hamster-ProgrammierungSeite 13
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
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(); laufeInDieNaechsteEcke();
if (!maulLeer()) gib(); laufeInDieNaechsteEcke();
if (!maulLeer()) gib();}void laufeInDieNaechsteEcke()
{ vor(); vor(); vor(); vor(); linksUm(); }
Hamster-ProgrammierungSeite 14
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
Hamster-Modell / Aufgaben Aufgabe 5:
– 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).
Hamster-ProgrammierungSeite 15
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
Hamster-Modell / Aufgaben Aufgabe 7:
– 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örnerliegen. 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.
Hamster-ProgrammierungSeite 16
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
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)
Hamster-ProgrammierungSeite 17
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
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(); vor();}
void main(){ vor(); vor(); vor(); vor();}
Allgemeingültig: solange vornFrei() wiederhole vor();
Hamster-ProgrammierungSeite 18
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
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
Hamster-ProgrammierungSeite 19
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
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).
Hamster-ProgrammierungSeite 20
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
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.
Programmvoid main(){
while (vornFrei()) vor();}
Hamster-ProgrammierungSeite 21
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
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.
Hamster-ProgrammierungSeite 22
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
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.
Programmvoid main() {
sammle(); laufeBisZurNaechstenWandUndSammle(); linksUm(); laufeBisZurNaechstenWandUndSammle();}
void sammle() { while (kornDa())
{ nimm(); }}void laufeBisZurNaechstenWandUndSammle() { while (vornFrei()) { vor(); sammle(); }}
Hamster-ProgrammierungSeite 23
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
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-AnweisungSchleifen
Hamster-ProgrammierungSeite 24
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
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());}
Hamster-ProgrammierungSeite 25
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
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.
Hamster-ProgrammierungSeite 26
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
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.
Programmvoid main() { // sammle(); laufeInDieNaechsteEckeUndSammle(); linksUm(); laufeInDieNaechsteEckeUndSammle(); linksUm(); laufeInDieNaechsteEckeUndSammle(); linksUm(); laufeInDieNaechsteEckeUndSammle(); legAb();}void sammle() { do { nimm(); } while (kornDa());}...
Hamster-ProgrammierungSeite 27
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
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());}
Hamster-ProgrammierungSeite 28
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
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-Schleifenvoid main() { while (vornFrei()) { // sammle while (kornDa()) nimm(); vor(); }}
Hamster-ProgrammierungSeite 29
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
Hamster-Modell / Wiederholung / Endlosschleife
Endlosschleife– die Schleifenbedingung hat immer den Wert true
ergibt sich eine Endlosschleife.
Beispiel:Bei der Ausführung des Programms
void main() { while (vornFrei()) { while (kornDa()) nimm(); }
}mit dem Hamster-Territorium
Hamster-ProgrammierungSeite 30
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
Hamster-Modell / Aufgaben Aufgabe 8:
– 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.
Hamster-ProgrammierungSeite 31
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
Hamster-Modell / Aufgaben Aufgabe 9:
– 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.
Hamster-ProgrammierungSeite 32
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
Hamster-Modell / Aufgaben Aufgabe 10:
– 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.
Hamster-ProgrammierungSeite 33
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
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)
Hamster-ProgrammierungSeite 34
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
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()
Hamster-ProgrammierungSeite 35
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
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
Hamster-ProgrammierungSeite 36
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
Hamster-Modell / return-Anweisung / Beispiele
Beispiele für die Anwendung der booleschen return-Anweisung– return true;
– return vornFrei();
– return maulLeer() || vornFrei();
– return (kornDa() && !vornFrei());
Hamster-ProgrammierungSeite 37
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
boolean MethodenName() { Anweisungsfolge }
Methodenkopf Methodenrumpf
Beispiel:
boolean mauerDa(){ return !vornFrei();}
Zusatzbedingung:
» In jedem möglichen Weg durch den Methodenrumpf muß eine boolesche return-Anweisung stehen!
Hamster-Modell / Boolesche Methoden / Deklaration
Boolesche Methodedeklaration: – Vereinbarung eines neuen Testbefehls
Hamster-ProgrammierungSeite 38
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
Hamster-Modell / Boolesche Methoden / Aufruf Methodenaufruf:
– 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();}
Hamster-ProgrammierungSeite 39
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
Hamster-Modell / Boolesche Methoden / Programm
Methoden: – 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.
Hamster-ProgrammierungSeite 40
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
Hamster-Modell / Boolesche Methoden / Beispiel
Programm
void main(){ if (linksFrei()) linksUm(); else { linksUm(); linksUm(); }}
boolean linksFrei(){ linksUm(); return vornFrei();}
Programmvoid main(){ if (linksFrei()) linksUm(); if (!linksFrei()) { linksUm(); linksUm(); }}
boolean linksFrei(){ linksUm(); return vornFrei();}
Hamster-ProgrammierungSeite 41
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
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.
Hamster-ProgrammierungSeite 42
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
Hamster-Modell / Boolesche Methoden / Beispiel
Boolesche Methode linksFrei() ohne Seiteneffektboolean linksFrei() { linksUm(); if (vornFrei()) { rechtsUm(); return true; }
else { rechtsUm(); return false; }
}
Hamster-ProgrammierungSeite 43
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
Hamster-Modell / Aufgaben Aufgabe 11:
– 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.
Hamster-ProgrammierungSeite 44
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
Hamster-Modell / Aufgaben Aufgabe 12:
– 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.
Hamster-ProgrammierungSeite 45
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
Hamster-Modell / Aufgaben Aufgabe 13:
– 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.
Hamster-ProgrammierungSeite 46
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
Hamster-Modell / Aufgaben Aufgabe 14:
– 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.
Hamster-ProgrammierungSeite 47
Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik
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)