82
Hamster-Programmierung Seite 1 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)

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

Embed Size (px)

Citation preview

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

Hamster-ProgrammierungSeite 1

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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)

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

Hamster-ProgrammierungSeite 2

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Methoden

Wiederholung: Testmethoden– liefern ein Ergebnis vom Typ boolean– benutzen eine boolesche return-Anweisung

Methoden können auch andere Informationen als Ergebnis liefern– die Anzahl gesammelter Körner

– zurückgelegte Schritte

– überwundene Höhenstufen

– …

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

Hamster-ProgrammierungSeite 3

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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;

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.

Beispiele:return -4;

return 3 * (4-5);

return i * (i + 1);

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

Hamster-ProgrammierungSeite 4

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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 }

Methodenkopf Methodenrumpf

Zusatzbedingung: – In jedem möglichen Weg durch den Methodenrumpf muss eine

Integer return-Anweisung stehen!

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

Hamster-ProgrammierungSeite 5

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Methoden / Beispiel

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

}

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

Hamster-ProgrammierungSeite 6

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Methoden / Aufruf

Methodenaufruf– wie bei booleschen Methoden

methodenName();

Ort des Aufrufs:– int-Methoden dürfen überall dort aufgerufen werden, wo

arithmetische Ausdrücke stehen dürfen. 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.

Beispiel:if (anzahlKoernerImMaul() < 5) gib();

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

Hamster-ProgrammierungSeite 7

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Methoden / Beispiele

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.

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.

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

Hamster-ProgrammierungSeite 8

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Methoden / Beispiele

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.

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.

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

Hamster-ProgrammierungSeite 9

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Methoden / Beispiele

Teilaufgaben– Berg hinaufklettern und absteigen

● Stufe aufsteigen

● Stufe absteigen

● Test-Methode für „Gipfel erreicht“

– Stufen zählen

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

Hamster-ProgrammierungSeite 10

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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; }

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

Hamster-ProgrammierungSeite 11

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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(); }

}

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

Hamster-ProgrammierungSeite 12

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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();}

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

Hamster-ProgrammierungSeite 13

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Methoden / Beispiele

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.

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

Hamster-ProgrammierungSeite 14

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Methoden / Beispiele

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.

Teilaufgaben (Seiteneffekte vermeiden)– Feld mit meisten Körnern ermitteln (Blickrichtung beibehalten)

– Körner vor dem Hamster ermitteln (Position und Blickrichtung beibehalten)

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

Hamster-ProgrammierungSeite 15

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Methoden / Beispiele

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

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

Hamster-ProgrammierungSeite 16

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Methoden / Beispiele

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.

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.

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

Hamster-ProgrammierungSeite 17

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Methoden / Beispiele

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

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.

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

Hamster-ProgrammierungSeite 18

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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)

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

Hamster-ProgrammierungSeite 19

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Datentypkonzept

Weitere Datentypen in Java für – reelle Zahlen

– Buchstaben

– Zeichenketten (Texte) 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

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

Hamster-ProgrammierungSeite 20

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Datentypkonzept

Definition von Variablen

<Datentyp> Variablen_Name = <Ausdruck> ;

<Datentyp> ist ein Platzhalter für eine Typbezeichnung

=> int

oder => boolean

<Ausdruck> ist ein Platzhalter für einen Ausdruck, der den gleichen Ergebnistyp hat wie die

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

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

Hamster-ProgrammierungSeite 21

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Datentypkonzept

Eine Zuweisung ändert den Wert einer Variablen:

variablen_name = <Ausdruck> ;

Zusatzbedingungen:– Variable und Ausdruck müssen vom gleichen Typ sein!

Semantik:– Ausdruck auf der rechten Seite berechnen (rechts von „=“ )

– Ergebnis in der Variable speichern

– Der zugewiesene Wert wird als Ergebnis geliefert!

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!

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

Hamster-ProgrammierungSeite 22

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Datentypkonzept

Ausdrücke – sind Verarbeitungsvorschriften zur Ermittlung eines Wertes

– können Ergebnisse unterschiedlichen Typs liefern Typen

boolesche Ausdrücke => boolean

arithmetische Ausdrücke => int Varianten von Ausdrücken

=> Variablenname

oder => Methodenaufruf

oder => Testbefehl

oder => <unärer Operator> Ausdruck

oder => Ausdruck <binärer Operator> Ausdruck

oder => ( Ausdruck )

oder => Zuweisungsausdruck

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

Hamster-ProgrammierungSeite 23

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Datentypkonzept

Operatoren mit Prioritäten für die Ausführung bei Ausdrücken

Prio. Op. Operanden Erg. Typ Funktion

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 && boolean boolean log. UND

7 || boolean boolean log. ODER

8 = int int Zuweisung

8 = boolean boolean Zuweisung

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

Hamster-ProgrammierungSeite 24

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Methoden / Verallgemeinerung Methoden können Ergebnisse unterschiedlicher Art (Datentypen)

liefern– boolean– int – void

Syntax der Definition und return-Anweisungen sind identisch boolean rechtsFrei() { boolean testWert; . . .

return testWert; }

int anzahlKoernerImMaul() { int anzahl; . . .

return anzahl; }

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

Hamster-ProgrammierungSeite 25

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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! 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.

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

Hamster-ProgrammierungSeite 26

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Methoden / Verallgemeinerung

Verallgemeinerte Form der Methodendefinition

<Typ> methodenName(){ Anweisungsfolge }

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.

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

Hamster-ProgrammierungSeite 27

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Methoden / Verallgemeinerung

Verallgemeinerte Form des Methodenaufrufs– Methodenaufrufe sind spezielle Ausdrücke

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

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

Hamster-ProgrammierungSeite 28

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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)

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

Hamster-ProgrammierungSeite 29

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Methodenparameter

Bisher benutzte Möglichkeiten von Methoden– Aktivitäten zusammenfassen in Prozeduren

– Testmethoden mit booleschen Ergebnissen

– Methoden, die Zahlenwerte bestimmen 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!

– . . .

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

Hamster-ProgrammierungSeite 30

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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;

}

}

Aufgabe: – Der Hamster soll 6 Schritte vorwärts gehen, falls möglich!

Änderung in der Prozedur: . . . while (schritte < 6 && vornFrei()) {

Aufgabe: – Der Hamster soll 4 Schritte vorwärts gehen, falls möglich!

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

Hamster-ProgrammierungSeite 31

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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; }}

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

Aufgabe: – Der Hamster soll eine variable Anzahl Schritte vorwärts gehen,

falls möglich!

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

Hamster-ProgrammierungSeite 32

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Methodenparameter / Definition

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.

Syntax einer Methodendefinition mit 1 Parameter

<Typ> methodenName(Datentyp formalerParameterName){

Anweisungsfolge}

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

Hamster-ProgrammierungSeite 33

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Methodenparameter / Beispiel

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!

Wie ruft man Methoden mit Parametern auf?

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

Hamster-ProgrammierungSeite 34

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Methodenparameter / Aufruf

Aufruf einer Methode

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.

aktueller Parameter– muss den gleichen Typ wie der formale Parameter haben

– erlaubt sind

● Werte, Variablen, Ausdrücke, Methodenaufrufe, . . .

methodenName(aktuellerParameter);

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

Hamster-ProgrammierungSeite 35

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Methodenparameter / Aufruf

Beispiele:void main() {

anzahlVor(5); anzahlVor(7 * 3 - 17);

// es gibt die Methode int anzahlKoernerImMaul()

anzahlVor(anzahlKoernerImMaul());

int anzahl = 4; anzahlVor(anzahl);

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

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

Hamster-ProgrammierungSeite 36

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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);

}

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

Hamster-ProgrammierungSeite 37

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / mehrere Methodenparameter

Syntax der Methodendefinition mit mehreren Parametern

<Typ> methodenName (Datentyp param1,

Datentyp param2, ...){

Anweisungsfolge}

Parameter– Anzahl ist nicht begrenzt

– sind lokale Variablen, die erst beim Aufruf initialisiert werden Beispiel für eine Methode mit 2 Parametern int summe(int wert1, int wert2)

{ return wert1 + wert2;}

formaleParameter-liste

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

Hamster-ProgrammierungSeite 38

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / mehrere Methodenparameter

Aufruf einer Methode mit n Parametern

Semantik:– Die Werte aller aktuellen Parameter werden von links nach

rechts ermittelt.

– Eine Kopie der Werte wird an die Methode übergeben. aktuelle Parameter

– müssen gleiche Anzahl und gleichen Typ wie die formalen Parameter haben

– können Werte, Variablen, Ausdrücke, Methodenaufrufe, . . .sein

Beispiele:int ergebnis = 0;

ergebnis = summe( 3, 5 – 6 );

// es gibt die Methode int anzahlKoernerImMaul()

ergebnis = summe(anzahlKoernerImMaul() * ergebnis);

methodenName(aktParam1, aktParam2, ..., aktParamn);

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

Hamster-ProgrammierungSeite 39

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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);

}

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

Hamster-ProgrammierungSeite 40

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / überladene Methoden

Überladene Methoden

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.

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

Hamster-ProgrammierungSeite 41

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Parametrierte Methoden / Aufgaben

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.

Aufgabe 28 - Auftrag– Der Hamster soll das Korn finden und fressen.

Aufgabe 28 - Nebenbedingungen– Globale Variablen dürfen zur Lösung nicht benutzt werden.

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

Hamster-ProgrammierungSeite 42

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Parametrierte Methoden / Aufgaben

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

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.

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

Hamster-ProgrammierungSeite 43

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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();}

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

Hamster-ProgrammierungSeite 44

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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();}

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

Hamster-ProgrammierungSeite 45

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Parametrierte Methoden / Aufgaben

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.

Aufgabe 29 - Auftrag– Der Hamster soll das Körnerfeld abgrasen.

Aufgabe 29 - Nebenbedingungen– Globale Variablen dürfen zur Lösung nicht benutzt werden.

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

Hamster-ProgrammierungSeite 46

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Parametrierte Methoden / Aufgaben

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

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.

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

Hamster-ProgrammierungSeite 47

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Parametrierte Methoden / Aufgaben

Aufgabe 29 – weitere Test-Territorien

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

Hamster-ProgrammierungSeite 48

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Parametrierte Methoden / Aufgaben

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.

4 6

25

8

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

Hamster-ProgrammierungSeite 49

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Parametrierte Methoden / Aufgaben

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.

4 6

25

8

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

Hamster-ProgrammierungSeite 50

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Parametrierte Methoden / Aufgaben

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.

4 6

25

8

Aufgabe 30 - Nebenbedingungen– Globale Variablen dürfen zur Lösung nicht benutzt werden.

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

Hamster-ProgrammierungSeite 51

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Parametrierte Methoden / Aufgaben

Aufgabe 30 – weitere Schatzkarte

5

4

10

3

1

8

31

4

5

35

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

Hamster-ProgrammierungSeite 52

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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)

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

Hamster-ProgrammierungSeite 53

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Rekursion / Motivation

Ein Hund lief in die Küche

Ein Hund lief in die Kücheund stahl dem Koch ein Ei,da nahm der Koch die Kelle

und schlug den Hund entzwei.Da kamen alle Hunde

und gruben ihm ein Grabund setzten einen Grabstein

worauf geschrieben war:

Ein Hund lief in die Kücheund stahl dem Koch ein Ei,da nahm der Koch die Kelle

und schlug den Hund entzwei.Da kamen alle Hunde

und gruben ihm ein Grabund setzten einen Grabstein

worauf geschrieben war:Ein Hund lief in die Küche ...

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

Hamster-ProgrammierungSeite 54

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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();}

Aufgabe– Der Hamster soll bis zur nächsten Wand laufen, kehrt machen und zum

Ausgangspunkt zurücklaufen. Lösung mit Schleifen (iterativ)

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

Hamster-ProgrammierungSeite 55

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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();}

Aufgabe– Der Hamster soll bis zur nächsten Wand laufen, kehrt machen und zum

Ausgangspunkt zurücklaufen. Lösung mit Rekursion

Rekursion– Die Prozedur hinUndZurueckR() ruft sich selbst auf!

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

Hamster-ProgrammierungSeite 56

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Rekursion / Definitionen

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.

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.

Rekursionstiefe– Anzahl der gleichzeitig existierenden Inkarnationen einer

Funktion minus 1

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

Hamster-ProgrammierungSeite 57

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Rekursion / Definitionen

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.

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.

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.

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

Hamster-ProgrammierungSeite 58

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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();}

Inkarnation

main() laufUndSammle()sammle() sammle() Inkarnationen

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

Hamster-ProgrammierungSeite 59

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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();}

Ausführung eines rekursiven Programms

main() hinUndZurueck Inkarnationen

Territorium:

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

Hamster-ProgrammierungSeite 60

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Territorium:Territorium:

Hamster-Modell / Rekursion / Definitionen / Beispiele

void hinUndZurueckR() { if (vornFrei()) { vor(); hinUndZurueckR(); vor(); } else { linksUm(); linksUm(); // kehrt }}void main() { hinUndZurueck();}

Ausführung eines rekursiven Programms

main() hinUndZurueck (1)

InkarnationenhinUndZurueck (2) hinUndZurueck (3)

vor();

vor();

vor();

vor();

// kehrt

Territorium:Territorium:Territorium:Territorium:Territorium:Territorium:Territorium:Territorium:Territorium:Territorium:

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

Hamster-ProgrammierungSeite 61

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Rekursion / Definitionen / Beispiele

void sammleR() { if (kornDa()) { nimm(); sammleR(); }}

void main() { sammleR();}

Ausführung eines rekursiven Programms

main() sammleR (1)

InkarnationensammleR (2) sammleR(3)

nimm();

nimm();

sammleR(4)

nimm();

Territorium: 3

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

Hamster-ProgrammierungSeite 62

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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();}

Ausführung eines indirekt rekursiven Programms

main() hinUndZurueck (1)

InkarnationenTerritorium:laufe (1) hinUndZurueck (2)

vor();

vor();

vor();

void laufe() { vor(); hinUndZurueckR(); vor();}

laufe (2) hinUndZurueck (3)

// kehrt

vor();

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

Hamster-ProgrammierungSeite 63

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Rekursion / Definitionen / Beispiele

int bisZurMauerR() { if (vornFrei()) { vor(); return bisZurMauerR()+1; } else { return 0; }}

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

bisZurMauer (2) bisZurMauer (3)

vor();

vor();

return 0 + 1;

return 1 + 1;

return 0;

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

Hamster-ProgrammierungSeite 64

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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; }}

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)InkarnationenDer Hamster hat 2 Körner im Maul.

gib(); int anzahl

gib(); int anzahl

anzahl = 0; nimm();return anzahl+1;

return 0

anzahlKoernerR (2) anzahlKoernerR (3)

anzahl = 1; nimm();return anzahl+1;

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

Hamster-ProgrammierungSeite 65

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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); }}

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

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

Hamster-ProgrammierungSeite 66

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Rekursion / Definitionen / Beispiele

// Endlosrekursionvoid sammleR() { if (kornDa()) { sammleR(); nimm(); }}

Endlosrekursion

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

Hamster-ProgrammierungSeite 67

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Rekursion / Beispiele

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.

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

Hamster-ProgrammierungSeite 68

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Rekursion / Aufgaben 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.

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

Hamster-ProgrammierungSeite 69

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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();}

Aufgabe 31 – Programm

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

Hamster-ProgrammierungSeite 70

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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();}

Aufgabe 31 – Programm (Fortsetzung)

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

Hamster-ProgrammierungSeite 71

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Rekursion / Beispiele 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.

Aufgabe 32 - Auftrag– Der Hamster soll das Korn finden und fressen.

Aufgabe 32 - Nebenbedingungen– Die Suche soll kreisförmig erfolgen.

– Zur Lösung dürfen keine Wiederholungsanweisungen verwendet werden.

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

Hamster-ProgrammierungSeite 72

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Rekursion / Backtracking

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

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

Hamster-ProgrammierungSeite 73

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Rekursion / Backtracking

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)

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

Hamster-ProgrammierungSeite 74

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Rekursion / Backtracking / Beispiele

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.

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

Hamster-ProgrammierungSeite 75

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Rekursion / Backtracking / Beispiele

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.

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

Hamster-ProgrammierungSeite 76

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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(); } . . .

Aufgabe 33 – Programm

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

Hamster-ProgrammierungSeite 77

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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();}. . .

Aufgabe 33 – Programm (Fortsetzung)

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

Hamster-ProgrammierungSeite 78

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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();}

Aufgabe 33 – Programm (Fortsetzung)

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

Hamster-ProgrammierungSeite 79

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Rekursion / Backtracking / Aufgaben

Aufgabe 34 - SituationDer 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

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

Hamster-ProgrammierungSeite 80

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Rekursion / Backtracking / Aufgaben

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.

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

Hamster-ProgrammierungSeite 81

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Rekursion / Backtracking / Aufgaben

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:

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

Hamster-ProgrammierungSeite 82

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich 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