Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Hamster-ProgrammierungSeite 151 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell.

Ähnliche Präsentationen


Präsentation zum Thema: "Hamster-ProgrammierungSeite 151 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell."—  Präsentation transkript:

1 Hamster-ProgrammierungSeite 151 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell 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)

2 Hamster-ProgrammierungSeite 152 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methoden n Wiederholung: Testmethoden – liefern ein Ergebnis vom Typ boolean – benutzen eine boolesche return -Anweisung n Methoden können auch andere Informationen als Ergebnis liefern – die Anzahl gesammelter Körner – zurückgelegte Schritte – überwundene Höhenstufen –…–…

3 Hamster-ProgrammierungSeite 153 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methoden / return-Anweisung Integer return -Anweisung – liefert den Wert einer int -Methode return arithmetischer Ausdruck; n Semantik (Bedeutung): 1.Der Wert des arithmetischen Ausdrucks wird berechnet. 2.Die Ausführung der int -Methode wird beendet. 3.Der Wert des arithmetischen Ausdrucks wird als Ergebnis der int -Methode wird zurückgegeben. n Beispiele: return -4; return 3 * (4-5); return i * (i + 1);

4 Hamster-ProgrammierungSeite 154 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methoden / Definition Definition von int -Methoden – Syntax ist identisch zu Test-Methoden int Methodenname () { Anweisungsfolge } MethodenkopfMethodenrumpf n Zusatzbedingung: – In jedem möglichen Weg durch den Methodenrumpf muss eine Integer return -Anweisung stehen!

5 Hamster-ProgrammierungSeite 155 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methoden / Beispiel n Anzahl der Körner im Maul ermitteln: int AnzahlKoernerImMaul() { int anzahl = 0; while (!maulLeer()) { // Koerner ablegen + zaehlen gib(); anzahl = anzahl + 1; } // Koerner wieder aufnehmen, sonst Seiteneffekt int i = anzahl; while (i > 0) { nimm(); i = i – 1; } return anzahl; // ermittelte Anzahl zurueckgeben }

6 Hamster-ProgrammierungSeite 156 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methoden / Aufruf n Methodenaufruf – wie bei booleschen Methoden methodenName(); n Ort des Aufrufs: – int -Methoden dürfen überall dort aufgerufen werden, wo arithmetische Ausdrücke stehen dürfen. n Semantik (Bedeutung): – Ausführen des Methodenrumpfes – Der von der Methode zurückgegebene Wert wird an der Stelle im Programm verwendet, an der der Methodenaufruf stand. n Beispiel: if (anzahlKoernerImMaul() < 5) gib();

7 Hamster-ProgrammierungSeite 157 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methoden / Beispiele n Aufgabe 25: Situation – Der Hamster steht direkt vor einem regelmäßigen Berg unbekannter Höhe. Er selbst hat keine Körner im Maul. Auf der Kachel, auf der er steht, liegt eine bestimmte Anzahl Körner. Ansonsten liegen keine Körner im Feld. n Auftrag: – Der Hamster soll den Berg erklimmen und dabei solange wie möglich auf jeder Stufe ein Korn ablegen. Er soll dabei jedoch keinen unnötigen Ballast mitschleppen.

8 Hamster-ProgrammierungSeite 158 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methoden / Beispiele n Aufgabe 25 – Der Hamster soll den Berg erklimmen und dabei solange wie möglich auf jeder Stufe ein Korn ablegen. Er soll dabei jedoch keinen unnötigen Ballast mitschleppen. n Lösungsidee – Der Hamster ermittelt zunächst die Höhe des Berges und kehrt an seine Ausgangsposition zurück. – Anschließend nimmt er falls möglich die benötigte Körnerzahl auf und marschiert erneut los.

9 Hamster-ProgrammierungSeite 159 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methoden / Beispiele n Teilaufgaben – Berg hinaufklettern und absteigen Stufe aufsteigen Stufe absteigen Test-Methode für Gipfel erreicht – Stufen zählen

10 Hamster-ProgrammierungSeite 160 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methoden / Beispiele Lösung: Stufen zählen: int zaehleStufen() { // erklimme die Stufen und merke die Anzahl int anzahl = 0; while (!gipfelErreicht()) { erklimmeStufe(); anzahl = anzahl + 1; } // zur Vermeidung von Seiteneffekten wieder absteigen kehrt(); int schritte = anzahl; while (schritte > 0) { klettereStufeHinunter(); schritte = schritte - 1; } kehrt(); return anzahl; }

11 Hamster-ProgrammierungSeite 161 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methoden / Beispiele Lösung für das Hauptprogramm: void main() { int stufen_anzahl = zaehleStufen(); // nimm genuegend Koerner ins Maul while ((stufen_anzahl > 0) && kornDa()) { nimm(); stufen_anzahl = stufen_anzahl - 1; } erklimmeBergUndVerteile(); } Verteilen der Körner: void erklimmeBergUndVerteile() { while (!gipfelErreicht()) { erklimmeStufe(); if (!maulLeer()) gib(); } }

12 Hamster-ProgrammierungSeite 162 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methoden / Beispiele Hilfsmethoden: boolean gipfelErreicht() { return vornFrei(); } void erklimmeStufe() { linksUm(); vor(); rechtsUm(); vor(); } void klettereStufeHinunter() { vor(); linksUm(); vor(); rechtsUm(); }

13 Hamster-ProgrammierungSeite 163 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methoden / Beispiele n Aufgabe 26 – Der Hamster steht in einem durch Mauern abgeschlossenen Raum unbekannter Größe. Solange auf einem seiner vier Nachbarfelder (links, rechts, oberhalb, unterhalb) noch Körner liegen, soll er folgendes tun: Er soll das Nachbarfeld ermitteln, auf dem die meisten Körner liegen, sich dorthin bewegen und die Körner fressen.

14 Hamster-ProgrammierungSeite 164 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methoden / Beispiele n Aufgabe 26 -Teilaufgaben – Solange auf einem seiner vier Nachbarfelder (links, rechts, oberhalb, unterhalb) noch Körner liegen, soll er folgendes tun: Er soll das Nachbarfeld ermitteln, auf dem die meisten Körner liegen, sich dorthin bewegen und die Körner fressen. n Teilaufgaben (Seiteneffekte vermeiden) – Feld mit meisten Körnern ermitteln (Blickrichtung beibehalten) – Körner vor dem Hamster ermitteln (Position und Blickrichtung beibehalten)

15 Hamster-ProgrammierungSeite 165 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methoden / Beispiele n Teilaufgabe: Feld mit den meisten Körnern ermitteln – Richtung mit den meisten Körnern ermitteln (Anzahl der Linksdrehungen: 0.. 3) – Sonderfall: keine Körner Rückgabe: -1 – In jeder Blickrichtung die Körner vor dem Hamster zählen (danach wieder hinlegen) – Richtung mit den meisten Körnern merken Vorhergehende Anzahl mit aktueller Anzahl vergleichen Falls aktuell mehr Körner => aktuelle Richtung hat Maximum nächste Richtung betrachten

16 Hamster-ProgrammierungSeite 166 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methoden / Beispiele n Aufgabe 27: Situation – Der Hamster steht irgendwo in einem abgeschlossenen mauerlosen rechteckigen Raum unbekannter Größe. Er hat eine bestimmte Anzahl Körner im Maul. Im Feld liegen keine Körner. n Auftrag: – Der Hamster soll zunächst die Größe des Raumes ermitteln. – Anschließend soll er, falls er genügend Körner im Maul hat, auf den Randkacheln des Raumes jeweils ein Korn ablegen.

17 Hamster-ProgrammierungSeite 167 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methoden / Beispiele n Teilaufgaben: – in eine Ecke laufen – Breite und Höhe des Rechtecks ermitteln (Länge einer Seite) – Körner im Maul bestimmen – Körner auf Randfeld (Zeile) ablegen n Aufgabe 27: – Der Hamster soll zunächst die Größe des Raumes ermitteln. – Anschließend soll er, falls er genügend Körner im Maul hat, auf den Randkacheln des Raumes jeweils ein Korn ablegen.

18 Hamster-ProgrammierungSeite 168 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell 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 Methoden, die sich selbst aufrufen (Rekursion)

19 Hamster-ProgrammierungSeite 169 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Datentypkonzept n Weitere Datentypen in Java für – reelle Zahlen – Buchstaben – Zeichenketten (Texte) n Variablen (allgemein): – sind Behälter für Werte benötigen Speicherplatz der Name identifiziert den Behälter (Speicherplatz) – haben einen Typ => definierter Wertebereich => erlaubte Operationen – werden initialisiert (automatisch oder explizit) – können durch Zuweisung andere Werte bekommen – können nur mit Variablen des gleichen Typs verknüpft werden

20 Hamster-ProgrammierungSeite 170 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Datentypkonzept n Definition von Variablen Variablen_Name = ; ist ein Platzhalter für eine Typbezeichnung => int oder=> boolean ist ein Platzhalter für einen Ausdruck, der den gleichen Ergebnistyp hat wie die Variable n Gültigkeitsbereich von Variablen – ist abhängig vom Ort der Definition – lokale Variablen werden innerhalb von Methoden definiert – globale Variablen werden außerhalb von Methoden definiert (im Definitionsteil eines Programms)

21 Hamster-ProgrammierungSeite 171 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Datentypkonzept n Eine Zuweisung ändert den Wert einer Variablen: variablen_name = ; n Zusatzbedingungen: – Variable und Ausdruck müssen vom gleichen Typ sein! n Semantik: – Ausdruck auf der rechten Seite berechnen (rechts von = ) – Ergebnis in der Variable speichern – Der zugewiesene Wert wird als Ergebnis geliefert! n Beispiele: int i1; int i2; int i3; i1 = i2 = i3 = 3; if ((i1 = i1 + 1) == (i1 = i1 - 1)) Auch Zuweisungen können als Ausdruck benutzt werden! Die Reihenfolge der Berechnung der Ausdrücke ist wichtig!

22 Hamster-ProgrammierungSeite 172 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Datentypkonzept n Ausdrücke – sind Verarbeitungsvorschriften zur Ermittlung eines Wertes – können Ergebnisse unterschiedlichen Typs liefern n Typen boolesche Ausdrücke=> boolean arithmetische Ausdrücke=> int n Varianten von Ausdrücken => Variablenname oder=> Methodenaufruf oder=> Testbefehl oder=> Ausdruck oder=> Ausdruck Ausdruck oder=> ( Ausdruck ) oder=> Zuweisungsausdruck

23 Hamster-ProgrammierungSeite 173 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Datentypkonzept n Operatoren mit Prioritäten für die Ausführung bei Ausdrücken Prio. Op. OperandenErg. TypFunktion 1 +,-int int Vorzeichen 1 !boolean boolean log. Negation 2 *,/,%int int Punktrechenarten 3 +,-int int Strichrechenarten 4,>=int boolean Vergleichsop. 5 ==,!=int boolean Gleichheitsop. 6 &&booleanboolean log. UND 7 ||booleanboolean log. ODER 8 =intint Zuweisung 8 =booleanboolean Zuweisung

24 Hamster-ProgrammierungSeite 174 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methoden / Verallgemeinerung n Methoden können Ergebnisse unterschiedlicher Art (Datentypen) liefern – boolean – int – void n Syntax der Definition und return-Anweisungen sind identisch boolean rechtsFrei() { boolean testWert;... return testWert; } int anzahlKoernerImMaul() { int anzahl;... return anzahl; }

25 Hamster-ProgrammierungSeite 175 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methoden / Verallgemeinerung Verallgemeinerte Form der return -Anweisung – Dem Schlüsselwort return kann ein Ausdruck folgen – muss aber nicht! n Einschränkungen: – return -Anweisungen mit einem booleschen Ausdruck dürfen nur in booleschen Methoden stehen. – return -Anweisungen mit einem int -Ausdruck dürfen nur in int -Methoden stehen. – return -Anweisungen ohne Ausdruck dürfen nur in Prozeduren stehen.

26 Hamster-ProgrammierungSeite 176 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methoden / Verallgemeinerung n Verallgemeinerte Form der Methodendefinition methodenName (){ Anweisungsfolge } n Zusätzliche Bedingungen: – Ist der Typ der Methode void (handelt es sich also um eine Prozedur), dürfen im Methodenrumpf nur return -Anweisungen ohne Ausdruck auftreten. – Hat die Methode einen anderen Typ, so müssen alle return -Anweisungen im Methodenrumpf Werte liefern, die zum Methodentyp passen. In jedem möglichen Weg durch die Methode muss eine return -Anweisung passenden Typs auftreten.

27 Hamster-ProgrammierungSeite 177 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methoden / Verallgemeinerung n Verallgemeinerte Form des Methodenaufrufs – Methodenaufrufe sind spezielle Ausdrücke n Einschränkungen: – Methodenaufrufe dürfen nur für Operanden benutzt werden, die den gleichen Typ haben boolean- Methode für booleschen Operanden int- Methoden für arithmetischen Operanden – Prozeduren ( void ) dürfen nur anstelle von Anweisungen stehen

28 Hamster-ProgrammierungSeite 178 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell 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 Methoden, die sich selbst aufrufen (Rekursion)

29 Hamster-ProgrammierungSeite 179 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methodenparameter n Bisher benutzte Möglichkeiten von Methoden – Aktivitäten zusammenfassen in Prozeduren – Testmethoden mit booleschen Ergebnissen – Methoden, die Zahlenwerte bestimmen n Wie kann man den Auftrag an den Hamster, also die Aktivitäten in einer Methode oder einer Prozedur, noch besser steuern? – Der Hamster soll 4 Schritte vorwärts gehen! – Der Hamster soll 3 Körner einsammeln! – Der Hamster soll 2 Schritte vorwärts laufen und 3 Körner sammeln! –...

30 Hamster-ProgrammierungSeite 180 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methodenparameter / Motivation void vierVor() { int schritte = 0; while (schritte < 4 && vornFrei()) { vor(); schritte = schritte + 1; } n Aufgabe: – Der Hamster soll 6 Schritte vorwärts gehen, falls möglich! n Änderung in der Prozedur:... while (schritte < 6 && vornFrei()) { n Aufgabe: – Der Hamster soll 4 Schritte vorwärts gehen, falls möglich!

31 Hamster-ProgrammierungSeite 181 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methodenparameter / Motivation void anzahlVor() { // erwarte einen int-Wert "Anzahl" int schritte = 0; while ((schritte < Anzahl) && vornFrei()) { vor(); schritte = schritte + 1; } } n Problem: Wie übermittelt man die Anzahl der Schritte? – Globale Variablen sind ungünstig wegen der unbeabsichtigten Änderungen in anderen Programmteilen. – Übergabe der Anzahl beim Aufruf als Parameter n Aufgabe: – Der Hamster soll eine variable Anzahl Schritte vorwärts gehen, falls möglich!

32 Hamster-ProgrammierungSeite 182 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methodenparameter / Definition n Definition: (formale) Parameter – sind lokale Variablen von Methoden, – die dadurch initialisiert werden, dass der Methode bei ihrem Aufruf ein entsprechender Initialisierungswert für die Variable übergeben wird. n Syntax einer Methodendefinition mit 1 Parameter methodenName (Datentyp formalerParameterName) { Anweisungsfolge }

33 Hamster-ProgrammierungSeite 183 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methodenparameter / Beispiel n Beispiel für Methode mit einem Parameter: void anzahlVor(int anzahl) { int schritte = 0; while ((schritte < anzahl) && vornFrei()) { vor(); schritte = schritte + 1; } } – Der Parameter (die Variable) anzahl kann bei jedem Aufruf unterschiedliche Werte haben! n Wie ruft man Methoden mit Parametern auf?

34 Hamster-ProgrammierungSeite 184 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methodenparameter / Aufruf n Aufruf einer Methode n Semantik (call-by-value-Parameterübergabe): – Der Wert des aktuellen Parameters wird ermittelt. – Für den formalen Parameter wird im Methodenrumpf eine lokale Variable angelegt. – Die lokale Variable wird mit einer Kopie des Wertes des aktuellen Parameters initialisiert. n aktueller Parameter – muss den gleichen Typ wie der formale Parameter haben – erlaubt sind Werte, Variablen, Ausdrücke, Methodenaufrufe,... methodenName(aktuellerParameter);

35 Hamster-ProgrammierungSeite 185 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methodenparameter / Aufruf n Beispiele: void main() { anzahlVor(5); anzahlVor(7 * ); // es gibt die Methode int anzahlKoernerImMaul() anzahlVor(anzahlKoernerImMaul()); int anzahl = 4; anzahlVor(anzahl); } n Der Wert einer als aktueller Parameter übergebenen Variablen kann durch den Aufruf einer Methode nicht geändert werden, auch dann nicht, wenn formaler und aktueller Parameter den gleichen Namen haben! – Variable anzahl im Programm bleibt unverändert!

36 Hamster-ProgrammierungSeite 186 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Methodenparameter / Beispiele void drehDich(int grad) { // Der Hamster dreht sich "grad"-mal int anzahl_drehungen = grad / 90; while (anzahl_drehungen > 0) { linksUm(); anzahl_drehungen = anzahl_drehungen - 1; } } void main() { int links = 90; int kehrt = 180; drehDich(links); drehDich(kehrt); drehDich(links+kehrt); drehDich(100); }

37 Hamster-ProgrammierungSeite 187 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / mehrere Methodenparameter n Syntax der Methodendefinition mit mehreren Parametern methodenName (Datentyp param 1, Datentyp param 2,...) { Anweisungsfolge } n Parameter – Anzahl ist nicht begrenzt – sind lokale Variablen, die erst beim Aufruf initialisiert werden n Beispiel für eine Methode mit 2 Parametern int summe(int wert1, int wert2) { return wert1 + wert2; } formale Parameter- liste

38 Hamster-ProgrammierungSeite 188 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / mehrere Methodenparameter n Aufruf einer Methode mit n Parametern n Semantik: – Die Werte aller aktuellen Parameter werden von links nach rechts ermittelt. – Eine Kopie der Werte wird an die Methode übergeben. n aktuelle Parameter – müssen gleiche Anzahl und gleichen Typ wie die formalen Parameter haben – können Werte, Variablen, Ausdrücke, Methodenaufrufe,... sein n Beispiele: int ergebnis = 0; ergebnis = summe( 3, 5 – 6 ); // es gibt die Methode int anzahlKoernerImMaul() ergebnis = summe(anzahlKoernerImMaul() * ergebnis); methodenName(aktParam 1, aktParam 2,..., aktParam n );

39 Hamster-ProgrammierungSeite 189 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / mehrere Methodenparameter / Beispiele void vertausche(int x, int y) { // vertauscht die Werte von x und y int zwerg = x; x = y; y = zwerg; } void main() { int zahl1 = 4711, zahl2 = 27; vertausche(zahl1, zahl2); }

40 Hamster-ProgrammierungSeite 190 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / überladene Methoden n Überladene Methoden n Beispiele: int summe(int op1, int op2) { return op1 + op2; } int summe(int op1, int op2, int op3) { return op1 + op2 + op3; } int summe(int op1, int op2, boolean minus) { if (minus) return -(op1 + op2); else return (op1 + op2); } void main() { summe(2,3); summe(2,3,4); summe(2,3,true); } In einem Programm dürfen 2 oder mehrere Methoden mit dem selben Namen definiert werden, falls sich ihre formalen Parameterlisten durch - die Parameteranzahl oder - die Datentypen der Parameter unterscheiden. Eine Unterscheidung allein durch den Ergebnisdatentyp ist nicht erlaubt.

41 Hamster-ProgrammierungSeite 191 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Parametrierte Methoden / Aufgaben n Aufgabe 28 - Situation – Der Hamster befindet sich in einem geschlossenen, rechteckigen Territorium unbekannter Größe. Im Innern des Territoriums befinden sich keine weiteren Mauern. Auf irgendeinem Feld des Territoriums liegt ein Korn. Der Hamster sitzt anfangs in der linken unteren Ecke mit Blickrichtung Ost. n Aufgabe 28 - Auftrag – Der Hamster soll das Korn finden und fressen. n Aufgabe 28 - Nebenbedingungen – Globale Variablen dürfen zur Lösung nicht benutzt werden.

42 Hamster-ProgrammierungSeite 192 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Parametrierte Methoden / Aufgaben n Aufgabe 27 - Teilaufgaben – einen Kreis mit einem variablen Durchmesser testen (ein Kreis besteht aus vier Richtungen der Länge Durchmesser ) – eine Richtung mit einem variablen Durchmesser (Länge ) testen n Aufgabe 28 - Lösungsidee – Der Hamster grast das Territorium in zyklischen Kreisen ab. Irgendwann stößt er dann zwangsläufig auf das Korn und frisst es.

43 Hamster-ProgrammierungSeite 193 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Parametrierte Methoden / Aufgaben void testeEinenKreis(int durchmesser) { // ein Kreis besteht aus vier Richtungen int richtungen = 0; while (!kornDa() && (richtungen < 4)) { testeEineRichtung(durchmesser); richtungen = richtungen + 1; } } void testeEineRichtung(int durchmesser) { // die Ueberpruefung einer Richtung besteht aus der // Ueberpruefung von so vielen Feldern, wie der Durchmesser // des Kreises angibt int schritte = 0; while (!kornDa() && (schritte < durchmesser) && vornFrei()) { vor(); schritte = schritte + 1; } if (!kornDa()) linksUm(); }

44 Hamster-ProgrammierungSeite 194 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Parametrierte Methoden / Aufgaben void main() { int durchmesser = 1; // lokale Variable; speichert die // Groesse des aktuellen Durchmessers while (!kornDa()) { testeEinenKreis(durchmesser ); durchmesser = durchmesser + 1; // nach jeder Runde wird der Durchmesser ein Feld // groesser } nimm(); }

45 Hamster-ProgrammierungSeite 195 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Parametrierte Methoden / Aufgaben n Aufgabe 29 - Situation – Im Hamster-Territorium befindet sich ein mit Körnern gefülltes rechteckiges Teilgebiet. Der Hamster sitzt irgendwo in diesem Körnerfeld mit Blickrichtung Ost. n Aufgabe 29 - Auftrag – Der Hamster soll das Körnerfeld abgrasen. n Aufgabe 29 - Nebenbedingungen – Globale Variablen dürfen zur Lösung nicht benutzt werden.

46 Hamster-ProgrammierungSeite 196 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Parametrierte Methoden / Aufgaben n Aufgabe 29 - Teilaufgaben – Ermittlung der Breite Seiteneffekt: der Hamster steht anschließend am Rand des Kornfeldes – Ermittlung der Höhe Seiteneffekt: der Hamster steht anschließend in einer Ecke des Kornfeldes – Abgrasung des Kornfelds mit den variablen Ausmaßen Breite und Höhe – Abgrasung einer Reihe des Kornfelds mit der variablen Höhe n Aufgabe 29 - Lösungsidee – Zunächst bestimmt der Hamster die Größe des Kornfeldes und merkt sich die Ausmaße. Anschließend grast er die einzelnen Körnerreihen ab, wobei er die ermittelten Werte benutzt.

47 Hamster-ProgrammierungSeite 197 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Parametrierte Methoden / Aufgaben n Aufgabe 29 – weitere Test-Territorien

48 Hamster-ProgrammierungSeite 198 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Parametrierte Methoden / Aufgaben n Aufgabe 30 - Situation – Der Hamster hat eine "verschlüsselte" Schatzkarte gefunden. Der "Schatz" besteht aus einem ganz besonders leckerem Korn. Nach intensivem Überlegen hat der Hamster den Verschlüsselungsalgorithmus entdeckt. Nun will er sich auf die Schatzsuche begeben.

49 Hamster-ProgrammierungSeite 199 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Parametrierte Methoden / Aufgaben n Aufgabe 30 - Lösungsalgorithmus – Die Anzahl an Körnern auf einer Kachel teilt dem Hamster mit, wie viele Kacheln er in welche Richtung laufen muss. Ist die Anzahl durch die Zahl 4 teilbar, dann muss der Hamster die der Körneranzahl entsprechende Anzahl an Feldern nach Osten laufen. Dort trifft er erneut auf einen Kornhaufen, der ihm den weiteren Weg andeutet. Ist die Zahl nicht durch 4, wohl aber durch 3 teilbar, dann ist die einzuschlagende Richtung Norden. Bei einer weder durch 4 noch durch 3 aber durch 2 teilbaren Zahl, muss sich der Hamster nach Westen durchschlagen. Ansonsten ist die Zielrichtung Süden.

50 Hamster-ProgrammierungSeite 200 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Parametrierte Methoden / Aufgaben n Aufgabe 30 - Lösungsalgorithmus – Der Hamster erkennt den Schatz daran, dass ein gefundener Kornhaufen aus nur einem einzigen Korn besteht. – Anfangs steht der Hamster mit Blickrichtung Ost im Kornfeld. Außerdem ist sichergestellt, dass der Weg von einem Kornhaufen zum nächsten nicht durch Mauern versperrt ist und dass die Schatzkarte auf jeden Fall korrekt ist. n Aufgabe 30 - Nebenbedingungen – Globale Variablen dürfen zur Lösung nicht benutzt werden.

51 Hamster-ProgrammierungSeite 201 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Parametrierte Methoden / Aufgaben n Aufgabe 30 – weitere Schatzkarte

52 Hamster-ProgrammierungSeite 202 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell 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 Methoden, die sich selbst aufrufen (Rekursion)

53 Hamster-ProgrammierungSeite 203 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Motivation Ein Hund lief in die Küche und stahl dem Koch ein Ei, da nahm der Koch die Kelle und schlug den Hund entzwei. Da kamen alle Hunde und gruben ihm ein Grab und setzten einen Grabstein worauf geschrieben war: Ein Hund lief in die Küche und stahl dem Koch ein Ei, da nahm der Koch die Kelle und schlug den Hund entzwei. Da kamen alle Hunde und gruben ihm ein Grab und setzten einen Grabstein worauf geschrieben war: Ein Hund lief in die Küche...

54 Hamster-ProgrammierungSeite 204 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Motivation void hinUndZurueck() { int schritte = 0; // laufe zur Wand while (vornFrei()) { vor(); schritte = schritte + 1; } linksUm(); linksUm(); // kehrt // laufe zurück while (schritte > 0) { vor(); schritte = schritte - 1; } } void main() { hinUndZurueck(); } n Aufgabe – Der Hamster soll bis zur nächsten Wand laufen, kehrt machen und zum Ausgangspunkt zurücklaufen. n Lösung mit Schleifen (iterativ)

55 Hamster-ProgrammierungSeite 205 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Motivation void hinUndZurueckR() { if (vornFrei()) { vor(); hinUndZurueckR(); vor(); } else { linksUm(); linksUm(); // kehrt } } void main() { hinUndZurueck(); } n Aufgabe – Der Hamster soll bis zur nächsten Wand laufen, kehrt machen und zum Ausgangspunkt zurücklaufen. n Lösung mit Rekursion n Rekursion – Die Prozedur hinUndZurueckR() ruft sich selbst auf!

56 Hamster-ProgrammierungSeite 206 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Definitionen n Inkarnation einer Funktion – Wird bei der Ausführung eines Programms eine Funktion aufgerufen, dann wird eine Inkarnation dieser Funktion erzeugt. Nach der vollständigen Abarbeitung der Funktion wird die Inkarnation wieder zerstört. n Rekursive Funktion – Eine Funktion ist rekursiv, wenn zu einem Zeitpunkt während der Programmausführung 2 oder mehrere Inkarnationen dieser Funktion existieren. – Eine Funktion heißt direkt rekursiv, wenn sie sich selbst erneut aufruft. – Eine Funktion heißt indirekt rekursiv, wenn von der Funktion mehrere Inkarnationen existieren, obwohl sich diese nicht selbst aufruft. n Rekursionstiefe – Anzahl der gleichzeitig existierenden Inkarnationen einer Funktion minus 1

57 Hamster-ProgrammierungSeite 207 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Definitionen n Funktionen mit lokalen Variablen – Jede Funktionsinkarnation arbeitet mit einem eigenen Satz von lokalen Variablen, insbesondere ist es einer Funktionsinkarnation nicht möglich, auf lokale Variablen anderer Funktionsinkarnationen zuzugreifen. Bei der Zerstörung einer Funktionsinkarnation wird auch deren Satz von lokalen Variablen zerstört. n Funktionen mit Parametern – Auch in rekursiven Funktionen werden Parameter wie lokale Variable behandelt, wobei die lokale Variable auch hier mit einer Kopie des Wertes des aktuellen Parameters initialisiert wird. In rekursiven Funktionen wird der neuen Inkarnation häufig ein veränderter Parameterwert übergeben. Außerdem wird der Parameterwert in der Abbruchbedingung verwendet. n Endlosrekursion – Im Gegensatz zu Programmen mit Endlosschleifen enden Funktionen mit einer Endlosrekursion mit einem Laufzeitfehler, weil beim Erzeugen einer Inkarnation stets weiterer Speicherplatz benötigt wird.

58 Hamster-ProgrammierungSeite 208 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Definitionen / Beispiele void main() { sammle(); laufUndSammle(); } void laufUndSammle() { while (vornFrei()) { vor(); sammle(); } } void sammle() { while (kornDa()) nimm(); } n Inkarnation main()laufUndSammle()sammle() Inkarnationen

59 Hamster-ProgrammierungSeite 209 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Definitionen / Beispiele void hinUndZurueckR() { if (vornFrei()) { vor(); hinUndZurueckR(); vor(); } else { linksUm(); linksUm(); // kehrt } } void main() { hinUndZurueck(); } n Ausführung eines rekursiven Programms main()hinUndZurueck Inkarnationen Territorium:

60 Hamster-ProgrammierungSeite 210 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Territorium: Hamster-Modell / Rekursion / Definitionen / Beispiele void hinUndZurueckR() { if (vornFrei()) { vor(); hinUndZurueckR(); vor(); } else { linksUm(); linksUm(); // kehrt } } void main() { hinUndZurueck(); } n Ausführung eines rekursiven Programms main()hinUndZurueck (1) Inkarnationen hinUndZurueck (2)hinUndZurueck (3) vor(); // kehrt Territorium:

61 Hamster-ProgrammierungSeite 211 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Definitionen / Beispiele void sammleR() { if (kornDa()) { nimm(); sammleR(); } } void main() { sammleR(); } n Ausführung eines rekursiven Programms main()sammleR (1) Inkarnationen sammleR (2) sammleR(3) nimm(); sammleR(4) nimm(); Territorium: 3

62 Hamster-ProgrammierungSeite 212 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Definitionen / Beispiele void hinUndZurueckR() { if (vornFrei()) { laufe(); } else { // kehrt linksUm(); linksUm(); } } void main() { hinUndZurueck(); } n Ausführung eines indirekt rekursiven Programms main()hinUndZurueck (1) InkarnationenTerritorium: laufe (1)hinUndZurueck (2) vor(); void laufe() { vor(); hinUndZurueckR(); vor(); } laufe (2)hinUndZurueck (3) // kehrt vor();

63 Hamster-ProgrammierungSeite 213 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Definitionen / Beispiele int bisZurMauerR() { if (vornFrei()) { vor(); return bisZurMauerR()+1; } else { return 0; } } n Ausführung einer rekursiven (echten) Funktion – Die Funktion bisZurMauer() lässt den Hamster bis zur Mauer laufen und liefert die Anzahl der benötigten Schritte als Ergebnis. main()bisZurMauer (1) Inkarnationen Territorium: bisZurMauer (2)bisZurMauer (3) vor(); return 0 + 1; return 1 + 1; return 0;

64 Hamster-ProgrammierungSeite 214 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Definitionen / Beispiele int anzahlKoernerR() { if (!maulLeer()) { gib(); int anzahl = anzahlKörnerR(); nimm(); // zur Vermeidung von Seiteneffekten return anzahl + 1; } else { return 0; } } n Ausführung einer rekursiven Funktion mit lokalen Variablen – Die Funktion anzahlKoerner() liefert (ohne Seiteneffekte) die Anzahl der Körner, die der Hamster aktuell im Maul hat. main()anzahlKoernerR (1) Inkarnationen Der Hamster hat 2 Körner im Maul. gib(); int anzahl anzahl = 0; nimm(); return anzahl+1; return 0 anzahlKoernerR (2)anzahlKoernerR (3) anzahl = 1; nimm(); return anzahl+1;

65 Hamster-ProgrammierungSeite 215 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Definitionen / Beispiele void vorR(int anzahl) { if (anzahl > 0 && vornFrei()) { vor(); vorR(anzahl-1); } } n Ausführung einer rekursiven Prozedur mit Parametern – Die Prozedur vor(int anzahl) lässt den Hamster anzahl Felder nach vorne laufen, maximal jedoch bis zur nächsten Mauer. main()vorR (1) Inkarnationen vor(); vorR(1); vorR (2)VorR (3) Territorium: Aufruf in main() : vorR(2); vor(); vorR(0); vorR(2);

66 Hamster-ProgrammierungSeite 216 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Definitionen / Beispiele // Endlosrekursion void sammleR() { if (kornDa()) { sammleR(); nimm(); } } n Endlosrekursion

67 Hamster-ProgrammierungSeite 217 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Beispiele n Aufgabe 31 - Situation – Der Hamster steht direkt vor einem regelmäßigen Berg unbekannter Höhe. Er hat keine Körner im Maul und im Territorium befinden sich auch keine Körner. – Der Hamster soll den Berg übersteigen.

68 Hamster-ProgrammierungSeite 218 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Aufgaben n Aufgabe 31 – Lösungsidee – Falls der Hamster schon auf dem Gipfel steht, ist das Problem gelöst. – Wenn der Gipfel noch nicht erreicht ist, erklimmt der Hamster eine Stufe, wodurch er die Komplexität der Situation verringert hat. Auf die komplexitätsreduzierte Situation wendet er rekursiv den gleichen Algorithmus an. Nach dessen Abarbeitung befindet er sich damit auf der entsprechenden Ebene auf der anderen Seite des Bergs. Er muss also nur noch eine Stufe wieder hinuntergehen und hat das Problem gelöst.

69 Hamster-ProgrammierungSeite 219 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Aufgaben void main() { uebersteigeBerg(); } void uebersteigeBerg() { if (!gipfelErreicht()) { klettereStufeHoch(); uebersteigeBerg(); // rekursiver Aufruf klettereStufeHinunter(); } } boolean gipfelErreicht() { return vornFrei(); } void klettereStufeHoch() { linksUm(); vor(); rechtsUm(); vor(); } n Aufgabe 31 – Programm

70 Hamster-ProgrammierungSeite 220 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Aufgaben void klettereStufeHinunter() { vor(); rechtsUm(); vor(); linksUm(); } void rechtsUm() { kehrt(); linksUm(); } void kehrt() { linksUm(); linksUm(); } n Aufgabe 31 – Programm (Fortsetzung)

71 Hamster-ProgrammierungSeite 221 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Beispiele n Aufgabe 32 - Situation – Der Hamster sitzt in einem beliebig großen, quadratischen Territorium in der linken unteren Ecke mit Blickrichtung nach Osten. Er hat keine Körner im Maul. Irgendwo im Territorium liegt ein Korn. n Aufgabe 32 - Auftrag – Der Hamster soll das Korn finden und fressen. n Aufgabe 32 - Nebenbedingungen – Die Suche soll kreisförmig erfolgen. – Zur Lösung dürfen keine Wiederholungsanweisungen verwendet werden.

72 Hamster-ProgrammierungSeite 222 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Backtracking n Backtracking – Lösungsverfahren, bei dem versucht wird, eine bereits gefundene Teillösung T systematisch zur Gesamtlösung L eines gegebenen Problems auszubauen. T L T' – Falls in einem bestimmten Stadium der Lösungssuche ein weiterer Ausbau einer vorliegenden Teillösung nicht mehr möglich ist (Sackgasse), werden ein oder mehrere der letzten Teilschritte rückgängig gemacht. Die dann reduzierte Teillösung versucht man dann auf einem anderen Weg zu erweitern. L T

73 Hamster-ProgrammierungSeite 223 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Backtracking n Backtracking – Das Zurücknehmen von Teilschritten und erneute Probieren anderer Teilschritte wird solange wiederholt, bis eine Lösung des gegebenen Problems gefunden ist oder erkannt wird, dass keine Lösung existiert. Versuch-Irrtum-Methode (Try-and-Error-Verfahren)

74 Hamster-ProgrammierungSeite 224 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Backtracking / Beispiele n Aufgabe 33 - Situation – Der Hamster steht am Eingang eines zyklenfreien Labyrinths. Er soll das Labyrinth nach Körnern durchsuchen. Sobald er ein Korn findet, soll er dies fressen und auf dem schnellsten Weg wieder zum Eingang zurückkehren.

75 Hamster-ProgrammierungSeite 225 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Backtracking / Beispiele n Aufgabe 33 - Lösungsidee – Der Hamster durchsucht den vor ihm liegenden Gang nach Körnern und kehrt zurück, falls er entweder ein Korn gefunden oder eine Wand erreicht hat. – Falls er auf seinem Weg nach vorne an eine Abzweigung oder Kreuzung gerät, dreht er sich in die entsprechende Richtung um und versucht zunächst in diesem Gang das Korn zu finden. – Wenn er an die Abzweigung oder Kreuzung ohne Korn zurückkehrt, versucht er das Korn in einem noch nicht betrachteten Gang zu finden. – Sobald er das Korn gefunden hat, muss er keine weiteren Gänge durchsuchen und kehrt direkt zum Ausgangspunkt zurück.

76 Hamster-ProgrammierungSeite 226 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Aufgaben void main() { sucheGangAb(); } boolean gefunden = false; void sucheGangAb() { // Lösung gefunden? if (kornDa()) { nimm(); gefunden = true; } // Suche an Kreuzungen if (!gefunden && linksFrei()) { // links vorhandenen Gang absuchen linksUm(); vor(); sucheGangAb(); vor(); linksUm(); }... n Aufgabe 33 – Programm

77 Hamster-ProgrammierungSeite 227 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Aufgaben... if (!gefunden && rechtsFrei()) { // rechts vorhandenen Gang absuchen rechtsUm(); vor(); sucheGangAb(); vor(); rechtsUm(); } if (!gefunden && vornFrei()) { // restlichen Gang absuchen vor(); sucheGangAb(); vor(); // zurücklaufen } else kehrt(); }... n Aufgabe 33 – Programm (Fortsetzung)

78 Hamster-ProgrammierungSeite 228 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Aufgaben... boolean linksFrei() { linksUm(); boolean frei = vornFrei(); rechtsUm(); return frei; } boolean rechtsFrei() { rechtsUm(); boolean frei = vornFrei(); linksUm(); return frei; } void rechtsUm() { linksUm(); kehrt(); } void kehrt() { linksUm(); linksUm(); } n Aufgabe 33 – Programm (Fortsetzung)

79 Hamster-ProgrammierungSeite 229 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Backtracking / Aufgaben n Aufgabe 34 - Situation Der Hamster soll das bekannte Springerproblem lösen: – Der Hamster steht irgendwo mit 25 Körnern im Maul auf einem eingemauerten Schachbrett-Feld mit 5 Zeilen und 5 Spalten (ohne innere Mauern und ohne Körner auf den Kacheln). – Er soll entsprechend der Bewegungsmöglichkeiten eines Springers beim Schachspiel versuchen, nacheinander alle Felder des Schachbretts mit genau einem Korn zu besetzen. – Dabei darf er jedes Feld, außer für Tests, nur höchstens einmal betreten. Zugmöglichkeiten eines Springers

80 Hamster-ProgrammierungSeite 230 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Backtracking / Aufgaben n Aufgabe 34 - Lösungsidee – Der Hamster löst das Springerproblem mit Hilfe des Backtracking-Verfahrens. – Dazu hüpft er von seinem Ausgangsfeld zu einem zulässigen Zielfeld. Von dort aus begibt er sich auf ein weiteres bislang noch unberührtes Feld usw. – Im allgemeinen wird der Hamster nicht direkt eine Lösung des Problems finden, sondern irgendwann auf ein Feld geraten, von dem aus kein weiteres unberührtes Feld mehr angesprungen werden kann, d.h. er ist in eine Sackgasse geraten. In diesem Fall nimmt der Hamster so viele Züge zurück, bis er wieder einen anderen zulässigen Zug machen kann.

81 Hamster-ProgrammierungSeite 231 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Rekursion / Backtracking / Aufgaben n Aufgabe 35 - Situation – Der Hamster soll das bekannte Acht-Damenproblem lösen: – Er soll eine Stellung für 8 Schachdamen auf einem Schachbrett finden, so dass sich keine zwei Damen gegenseitig schlagen können. Die Damen sind also so zu platzieren, dass jede Zeile, jede Spalte, und jede Diagonale des Schachbretts höchstens eine Dame enthält. Die Damen werden dabei jeweils durch ein Korn repräsentiert; der Hamster hat anfangs genau 8 Körner im Maul. Ingesamt existieren für ein 8x8 Schachbrett 92 Lösungen, eine davon ist die folgende:

82 Hamster-ProgrammierungSeite 232 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell Auswahlanweisungen Wiederholungsanweisungen Funktionen Hamster, die nicht mehr auf einer fest vorgegebenen Landschaft operieren, sondern auf allen, die bestimmte Voraussetzungen erfüllen Vermeidung von Laufzeitfehlern Hamster mit Gedächtnis (Boolesche Variablen) Hamster mit Gedächtnis (Zahlen) Integer-Funktionen Verallgemeinerung von Daten und Funktionen Prozeduren und Funktionen mit Parametern Rekursive Funktionen


Herunterladen ppt "Hamster-ProgrammierungSeite 151 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell."

Ähnliche Präsentationen


Google-Anzeigen