Bedingte Wiederholungen


Wiederholungen mit fester Anzahl genügen nicht

Karol soll irgendwo in seiner Welt platziert sein und eine Ziegelreihe bis zur Wand legen. Er darf aber nicht gegen eine Wand laufen!

Wie würden Sie Karol anleiten, die Aufgabe zu erfüllen? Warum geht das nicht mit der Wiederholung mit fester Anzahl? Was muss Karol in Erfahrung bringen können?

Ziegelreihe zur Wand legen

Lösung: Karol muss in Erfahrung bringen können, wann er die Wand erreicht hat. Er muss die Sequenz Hinlegen - Schritt solange wiederholen, solange er die Wand noch nicht erreicht hat. Da vorher nicht bekannt ist wo Karol steht, ist eine unterschiedliche Anzahl von Wiederholungen der Sequenz nötig. Eine Wiederholung mit fester Anzahl scheidet deshalb aus.

[Seitenanfang]

Bedingungen

Zur Lösung der Aufgabe ist es notwendig, Karol die Botschaft "Stehst du vor einer Wand?" zu senden. Karol antwortet auf diese Frage mit wahr oder falsch. Um auf diese Botschaft reagieren zu können, hat Karol die Methode IstWand(), welche die gewünschte Antwort liefert.

Im Sinne unserer Problematik "Steuern und Regeln" verfügt der Roboter über Sensoren mit denen er seine Umgebung wahrnehmen kann. Mit ihrer Hilfe kann er z.B. entscheiden, ob folgende Aussagen zutreffen:

Der Sensor meldet "wahr", wenn die zugehörige Frage mit "Ja" beantwortet wird, bzw. "falsch", wenn die Antwort "Nein" lautet.

Methoden und Ausdrücke, die nach ihrer Ausführung den Wahrheitswert "wahr" oder "falsch" annehmen, heißen Bedingungen oder Prädikate.

Beispiele für Bedingungen

Methode Bedeutung
IstWand() Liefert wahr, wenn Karol vor einer Wand steht und falsch, wenn vor ihm keine Wand ist.
IstZiegel() Liefert wahr, wenn auf dem Feld vor Karol ein Ziegel liegt und falsch, wenn auf dem Feld vor ihm kein Ziegel liegt.
IstMarke() Liefert wahr, wenn das Feld auf dem Karol steht, markiert ist, und falsch, wenn dieses Feld nicht markiert ist.
IstNorden() Liefert wahr, wenn Karol in Richtung Norden blickt, und falsch, wenn dies nicht der Fall ist. Ein ähnliches Prädikat gibt es natürlich auch für die anderen Himmelsrichtungen.

Karol kennt zu jeder dieser Methoden auch eine zweite mit gegenteiliger Bedeutung (NichtIstWand(), NichtIstZiegel() NichtIstMarke(), NichtIstNorden()). Die Methode NichtIstWand() liefert wahr, wenn vor Karol keine Wand steht, und falsch, wenn vor ihm eine Wand ist.

[Seitenanfang]

Bedingungen mit Wiederholung

Die Bedingte Wiederholung wird verwendet, wenn eine Sequenz solange wiederholt werden soll, wie eine Bedingung wahr ist. Sie hat folgende Form:

Anweisungstext Struktogramm
wiederhole solange Bedingung
Sequenz
*wiederhole
Struktogramm bedingte Wiederholung

Die Sequenz innerhalb der Wiederholung wird in Abhängigkeit von der Bedingung gar nicht, einmal oder mehrfach abgearbeitet.

Jetzt können wir unsere Beispielaufgabe lösen:

Anweisungstext Struktogramm
wiederhole solange NichtIstWand
Hinlegen
Schritt
*wiederhole
Ziegel bis zur Wand legen
Übung 1:

Schreiben Sie nun ein Programm, welches Karol, unabhängig von seinem Standpunkt, eine Ziegelreihe bis zur nächsten Wand in seiner Blickrichtung legen lässt!

[Seitenanfang]

Übungsaufgaben

Übung 2: Zimmer verschönern

Karol soll den Rand des Zimmers mit Ziegelsteinen belegen (siehe Abbildung unten links). Der Startpunkt ist beliebig. Hinweis: Lassen Sie Karol erst in die Ecke links vor ihm gehen. Dort beginnt er mit dem Auslegen und dort hört er am Ende auch wieder auf.

Diese Aufgabe soll exemplarisch mit der Strategie Bottom-Up gelöst werden. Entwickeln Sie daher gemäß der zugrunde liegenden Stategie zunächst die Module (siehe Aufgaben a., b. und c.) und anschließend das Hauptprogramm!

  1. Vereinbaren Sie eine Methode ZurWandGehen, die Karol bis zur Wand vor ihm gehen lässt!
  2. Vereinbaren Sie eine Methode ZurEckeGehen, die Karol in die Ecke links vor ihm schickt! Verwenden Sie dafür Ihre Methode ZurWandGehen!
  3. Vereinbaren Sie eine Methode ZiegelLegen, die Karol eine Reihe Ziegelsteine bis zur gegenüberliegenden Wand legen lässt! Orientieren Sie sich dabei an der Lösung der Übung 1!
  4. Erstellen Sie nun das Hauptprogramm!
  5. Erstellen Sie eine Welt mit einer ungeradzahligen Seitenlänge und Breite! Karol soll wiederum irgendwo im Zimmer stehen. Er soll nun eine Mustergirlande am Rand des Zimmers legen, d.h. er legt nur jeden zweiten Ziegel. (siehe Abbildung unten rechts)
Zimmer verschönern Mustergirlande
[Seitenanfang]
Übung 3: Lastentransport
  1. Entwerfen Sie eine Methode Transportiere, die es Karol ermöglicht, einen Ziegelstapel, der vor ihm steht, um drei Felder nach rechts zu versetzen. Achtung! Die Eigenschaft "Anzahl der Ziegel, die Karol maximal hoch-/tiefspringen kann", muss hier geändert werden.
  2. Entwerfen Sie eine Methode Addieren, mit der Karol einen Ziegelstapel auf einen zweiten Stapel setzt, der sich drei Felder rechts vor ihm befindet (siehe Abbildung)!
Ziegelstapel addieren
[Seitenanfang]
Übung 4: Aufräumen

Vereinbaren Sie eine Methode Aufraeumen, mit der Karol alle Ziegelsteine aufhebt, die er auf seinem geraden Weg zur Wand vor sich sieht. Dabei dürfen sich auf jedem Feld beliebig viele Ziegelsteine befinden (siehe Abbildung). Verwenden Sie dafür die bereits vorgefertigte Welt, die Sie sich hier herunterladen können!

Aufräumen
[Seitenanfang]
Übung 5: Lange Treppe

Karol soll Reihe für Reihe eine Treppe von der Stelle, wo er steht, bis zur Wand bauen (siehe Abbildung). Hinweis: Ehe Karol eine Reihe Ziegel zur Wand legt, legt er zunächst erst einen, stellt sich darauf und markiert das Feld. Dann weiß er, wie weit er für die nächste Reihe zurückgehen muss.

Lange Treppe
[Seitenanfang]
Übung 6: Staubsauger

Von einer Wand des Raumes zu einer anderen Wand liegt eine Kette von Ziegelsteinen. Die Steine am Anfang und am Ende haben nur einen Nachbarstein. Jeder andere Stein hat genau zwei Nachbarsteine (jedoch nicht diagonal). Über Eck dürfen sich die Ziegel berühren. Die bereits vorgefertigte Welt können Sie hier herunterladen.

  1. Zu Beginn steht Karol auf dem Kettenanfang und blickt zur Kette. Er soll die ganze Kette der Reihe nach aufheben. Entwickeln Sie ein Programm dafür!
  2. Testen Sie Ihr Programm mit einer anderen Kette!
  3. Karol steht anfangs irgendwo im Raum (siehe Abbildung). Er muss zuerst den Anfang der Kette finden und dann mit dem Programm aus a) die ganze Kette aufheben.
Staubsauger
[Seitenanfang]
Übung 7: Mähen

Karol steht vor einem Viereck aus Ziegeln. Er soll alle Steine einsammeln. Zur Vereinfachung dürfen Sie davon ausgehen, dass Karol an einer Ecke des Vierecks steht und in Richtung Ziegelsteine blickt (siehe Abbildung). Die fertige Welt können Sie hier herunterladen.

Mähen
[Seitenanfang]
zuletzt geändert am:
Eine Seite von Mirko Hans