Robot Karol - Einführung - Mirko Hans

Transcrição

Robot Karol - Einführung - Mirko Hans
Robot Karol - Einführung
http://www.mirko-hans.de/info/profil/nawi/algo/einfuehrung_robot_kar...
Robot Karol - Einführung
Im Informatikteil des Lernbereichs "Messen Steuern Regeln" steht das Programmieren (der Informatiker nennt es vornehmer
"Problemlösen mit Hilfe von Algorithmen") im Vordergrund. Als Entwicklungsumgebung für unsere Programme verwenden
wir "Robot Karol". Mit Hilfe eigener Anweisungen kann hier ein virtueller kleiner Roboter über den Bildschirm gesteuert
werden. Dabei kann er Mauern aus Ziegeln legen oder entfernen bzw. Markierungen längs seines Weges legen oder entfernen.
Robot Karol ist eine speziell für SchülerInnen entwickelte einfache Entwicklungsumgebung und ist unter folgender
Internetadresse frei verfügbar: www.schule.bayern.de/karol/
Einordnung in den Lernbereich
Gegenstand des Lernbereichs ist das Steuern und Regeln von technischen,
biologischen und chemischen Anlagen und Prozessen. Schematisch lassen sich
solche Vorgänge mit Hilfe eines Regelkreises darstellen (s. Abbildung).
In unserem Fall ist die zu steuernde Anlage unser kleiner, virtueller Miniroboter Karol. Er ist in der Lage über Sensoren Signale
aus seiner Umwelt aufzunehmen (z.B. "Stehe ich vor einer Wand?" oder "Liegt vor mir ein Ziegel?"). Die aufgenommenen
Signale verarbeitet Karol mit Hilfe so genannter Algorithmen, die ihm der Programmierer eingibt. Im Ergebnis der Abarbeitung
dieser Anweisungen ermittelt Karol wie er sich im weiteren Verlauf verhalten und auf die Signale aus seiner Umwelt reagieren
soll. Über seine Aktoren (Hände und Füße) setzt Karol die Anweisungen in die Praxis um, indem er durch seine Welt läuft und
dabei Ziegel und Markierungen legt oder entfernt.
Karol ist also ein sehr schönes Beispiel für einen Regelkreis. Unsere Aufgabe wird es sein Anweisungen zu schreiben, wie
Karol auf Signale aus seiner Umwelt reagieren und entsprechend handeln soll.
Die Oberfläche der Entwicklungsumgebung
1 von 3
11.09.2011 10:08
Robot Karol - Einführung
http://www.mirko-hans.de/info/profil/nawi/algo/einfuehrung_robot_kar...
Der Bildschirm von Karol ist viergeteilt (siehe Abbildung oben).
Oben links: Mit einem Rechtsklick in das Programmfenster (Eingabe, Programmtest) können alle verfügbaren Befehle
und Strukturen angezeigt und gewählt werden. Natürlich können die Anweisungen auch "von Hand" geschrieben werden.
Die Abarbeitung der Anweisungen durch das Programm erfolgt von links nach rechts und von oben nach unten.
Oben rechts: Die Welt von Karol (steuerbar durch Tastatur, Maus oder Programm) veranschaulicht den Programmablauf.
Unten links: Das Anweisungsfenster zeigt alle zur Verfügung stehenden Befehle und Strukturen zum Programmieren.
Aus diesem Grund ist es nicht nötig, die Befehle auswendig zu lernen.
In der Mitte: Die Symbolleiste dient zum Speichern, Öffnen, Ausführen und Testen von Programmen.
Unten rechts: Hinweise und Meldungen (Programmname, Name der Welt oder eventuelle Fehlermeldungen während des
Programmablaufs) werden im rechten unteren Teilfenster angezeigt.
Nützliche Programmierhinweise
Programmcode wird bereits während der Eingabe auf Korrektheit überprüft. Bei korrekt erkannter Schreibweise werden
Kontrollstrukturen schwarz, vordefinierte Bedingungen und Anweisungen blau dargestellt
Kommentare für den Programmierer beginnen mit // und dienen der übersichtlichen Gestaltung. Kommentare über
mehrere Zeilen müssen in geschweifte Klammern {...} gesetzt werden.
Eingerückte Zeilen demonstrieren deren logische Zusammengehörigkeit. Besonders wichtig ist dies bei komplexeren
Anweisungen.
Will man eine bestimmte vordefinierte Welt zu einem bestimmten Programm gleich mit öffnen, muss die Welt vorher
per Hand aufgebaut und im gleichen Ordner unter dem gleichen Namen wie das Programm gespeichert werden.
Die Konfiguration von Karol
Karol lässt sich über das Menü Einstellungen -> Karol konfigurieren.
Aufgabe: Konfigurieren Sie Karol so, dass er folgende Eigenschaften erfüllt:
Karol soll überprüfen können, wie viele Ziegel er bei sich trägt. Er soll maximal 10 Ziegel tragen können und aktuell 3
Ziegel tragen.
Karol soll maximal einen Ziegel überspringen können.
Bei einem Programmfehler bricht das Programm ab.
Steuern von Karol im Direktmodus (Handsteuermodus)
Über die Symbolleiste in der Mitte der Oberfläche erreicht man die Steuerbefehle für Robot Karol. Die Sensoren sind im
Direktmodus nicht verfügbar.
Aufgabe: Bewegen Sie Robot Karol durch seine Welt und lassen Sie ihn verschiedene Aktionen ausführen. Überprüfen Sie auch
sein Verhalten bei folgenden Aktionen:
6 Ziegel übereinander stapeln,
einen Ziegel auf eine Marke legen,
auf verschiedene und von verschiedenen Stufen einer Treppe springen.
Ein erstes Beispielprogramm: Robot Karol holt Material
2 von 3
11.09.2011 10:08
Robot Karol - Einführung
http://www.mirko-hans.de/info/profil/nawi/algo/einfuehrung_robot_kar...
Aufgabe: Karol will einen Stapel aus drei Ziegeln bearbeiten. Dazu muss er ihn erst holen (s. Abbildung). Schreiben Sie ein
einfaches Programm für dieses Problem!
Ausgangssituation
Endzustand
Hinweise:
Die Ausgangssituation (siehe linkes Bild) müssen Sie zunächst im Direktmodus erzeugen. Speichern Sie danach die
erzeugte Welt ab.
Das Programm sollte wegen der besseren Lesbarkeit in die Anweisungen Programm ... *Programm
eingeschlossen werden.
Theoretischer Exkurs: Wiederholung Algorithmen
Die Steuerung von Karol erfolgt durch die Angabe einer Folge von Anweisungen, die vom Programmierer erstellt und
anschließend vom Roboter abgearbeitet werden. Eine solche Folge von Anweisungen, die so formuliert sind, dass sie von
einer automatisch arbeitenden Maschine abgearbeitet werden können nennt man einen Algorithmus. Der Name
Algorithmus geht zurück auf den arabischen Mathematiker Al-Chwarizmi, der in seinem Mathematiklehrbuch eine Reihe
von Rechenverfahren zur Lösung mathematischer Probleme beschrieb. In der lateinischen Übersetzung wurde aus
Al-Chwarizmi Al-gorismus und später Algorithmus.
Mit Algorithmen haben Sie sich schon im Informatikunterricht der Klasse 8 beschäftigt.
Aufgabe: Wiederholen Sie hierzu im LB Informatische Grundbildung auf den Seiten 10 bis 13 die Definition,
Eigenschaften und Darstellungsmöglichkeiten von Algorithmen!
3 von 3
11.09.2011 10:08
Einfache Sequenzen
1 von 3
Einfache Sequenzen
Damit Karol sich bewegt oder andere Tätigkeiten ausführt, muss man ihm
entsprechende Anweisungen (oder auch Befehle) geben. Karol wird die entsprechenden
Anweisungen dann in die Tat umsetzen.
Übung 1
Karol soll eine gerade Reihe von 5 Ziegelsteinen legen. Das Ergebnis der Abarbeitung
des Programms ist in der linken Abbildung dargestellt. Wegen der besseren
Übersichtlichkeit ist das Ergebnis der Aufgabe auch noch einmal im 2D-Modus zu
sehen. Überlegen Sie, welche Anweisungen nacheinander für die Lösung der Aufgabe
notwendig sind! Schreiben und testen Sie das Programm!
Zur Lösung der Übung 1 muss Karol mehrere Anweisungen nacheinander abarbeiten.
Eine Folge solcher nacheinander auszuführender Anweisungen heißt Sequenz.
Eine Folge von Anweisungen, die hintereinander ausgeführt werden, heißt
Sequenz (Folge). Im speziellen Fall kann eine Sequenz auch aus keiner oder einer
Anweisung bestehen.
Übung 2
Schreiben Sie ein Programm, in dem Karol eine Reihe von Ziegelsteinen im Zickzack
legt (siehe Abbildungen)!
Einfache Sequenzen
2 von 3
Übung 3
Ändern Sie Ihr Programm aus Übung 2 so ab, dass Karol die Ziegelsteine über Eck legt
(siehe Abbildungen)!
Theoretischer Exkurs: Übersetzer (Compiler und Interpreter)
Wie arbeitet der Computer eigentlich das Programm ab? Es ist kaum zu glauben, dass
der Computer Anweisungen wie Schritt oder Hinlegen versteht. Deshalb muss ein
Computerprogramm vor seiner Abarbeitung erst in so genannte Maschinensprache (eine
Folge von Nullen und Einsen, d.h. es fließt Strom (entspricht einer Eins) oder es fließt
kein Strom (entspricht einer Null)) übersetzt werden.
Arbeiten Sie den folgenden Abschnitt durch und lösen Sie die folgenden Aufgaben:
Erläutern Sie die Vorgehensweise eines Compilers bzw. Interpreters beim
Übersetzen des Quellcodes in Maschinensprache!
Vergleichen Sie die Tätigkeit dieser maschinellen Übersetzer mit der eines
menschlichen Dolmetschers bzw. eines Übersetzers!
Überlegen Sie, ob Karol einen Interpreter oder einen Compiler zum Übersetzen
des Quellcodes verwendet!
Übersetzung des Programms:
Bevor ein Programm ausgeführt werden kann, muss der Quellcode noch in
Maschinensprache übersetzt werden. Hier unterscheidet man zwei Möglichkeiten:
Einfache Sequenzen
3 von 3
Ein Compiler überträgt zuerst den gesamten Quellcode von der
Programmiersprache in ein für den Computer ausführbares
Maschinenprogramm. Erst nach Abschluss des gesamten
Übersetzungsvorganges kann das Programm ausgeführt werden. Nach der
Übersetzung des Quellcodes liegt ein ausführbares Programm vor (z.B.
*.exe), so dass der Übersetzungsvorgang später nicht noch einmal
wiederholt werden muss.
Ein Interpreter überträgt den Quellcode schrittweise, Anweisung für
Anweisung, in die Zielsprache und führt die Anweisung anschließend sofort
aus. Dieser Vorgang muss bei jeder Ausführung des Programms wiederholt
werden.
Übung 4
Lassen Sie Karol Ihre Initialen (d.h. die Anfangsbuchstaben Ihres Vor- und
Nachnamens) legen!
Karol aus objektorientierter Sicht
1 von 3
Karol aus objektorientierter Sicht
Objektorientierte Programmierung - ein wenig Theorie
Seit etwa 1990 hat sich in der Informatik das Prinzip der Objektorientierung
durchgesetzt. Dabei werden real existierende Objekte durch Datenstrukturen im
Computer nachgebildet. Diese werden mit bestimmten Eigenschaften und Fähigkeiten
versehen. Das folgende Beispiel aus der Textverarbeitung soll zeigen, dass diese
Herangehensweise an das Verarbeiten von Daten nicht nur auf die Programmierung
bezogen ist, sondern eine in allen Bereichen der Informatik gängige Methode ist.
Die Klasse "Zeichen" der Textverarbeitung
Eigenschaften
Schriftstil
Schriftart Schriftgröße Schriftposition Schriftfarbe
Arial,
fett,
Times
Eigenschaftswerte unterstrichen, New
...
Roman,
...
Methoden
8 Punkt, 12
Punkt, ...
hochgestellt,
tiefgestellt, ...
schwarz,
rot, ...
Loeschen(), Kopieren(), Einfuegen()
Wie man sieht ist jedes Objekt einer Klasse durch entsprechende Eigenschaften und
Eigenschaftswerte gekennzeichnet. Um eine Eigenschaft eines Objekts zu ändern
braucht man bestimmte Methoden. Damit das Objekt eine seiner Eigenschaften ändert
muss es eine Botschaft erhalten, die einer seiner Methoden entspricht.
In der folgenden Tabelle werden die soeben genannten Begriffe noch etwas
ausführlicher erläutert. Die Erläuterung bezieht sich nun weniger auf
Standardanwendungen sondern mehr auf das objektorientierte Programmieren (OOP).
Fachbegriff
Erläuterung
Klasse
bezeichnet alle Objekte, welche die gleiche Struktur und
die gleichen Methoden besitzen ("Bauplan" für die
Objekte)
Objekt
Exemplar einer Klasse; Objekte der selben Klasse haben
die gleichen Eigenschaften; grundlegende Bestandteile
einer Anwendung
Eigenschaft
Merkmale der Objekte
Eigenschaftswert
mögliche Merkmalsausprägungen der jeweiligen
Eigenschaft
Methode
verändert die Eigenschaften eines Objektes bzw. gibt
Auskunft über die momentanen Eigenschaften des
Objektes
Karol aus objektorientierter Sicht
2 von 3
Botschaft,
Nachricht
dient der Kommunikation zwischen verschiedenen
Objekten; ruft Methoden auf, welche die Eigenschaften
von Objekten verändern
Übung 1
Öffnen Sie die auf Ihrem Computer installierte Tabellenkalkulation und notieren
Sie die dort vorhandenen Klassen!
Legen Sie in Ihrem Hefter eine Tabelle wie die obige zur Klasse Zeichen in der
Textverarbeitung an und notieren Sie dort für eine Klasse der Tabellenkalkulation
einige mögliche Eigenschaften, Eigenschaftswerte und Methoden!
Übung 2
Öffnen Sie ein auf Ihrem Computer installiertes Grafikprogramm (z.B. Paint) und
notieren Sie mindestens drei Beispiele für dort vorhandene Klassen!
Legen Sie wiederum in Ihrem Hefter eine Tabelle an und notieren Sie dort für
eine Klasse des Grafikprogramms einige mögliche Eigenschaften,
Eigenschaftswerte und Methoden!
Karol aus objektorientierter Sichtweise
Aus objektorientierter Sicht ist Karol ein Objekt der Klasse Roboter und Welt
ein Objekt der Klasse Welt. Beide Klassen lassen sich durch ihre Eigenschaften
und Methoden beschreiben.
Welt
x-Größe
Eigenschaften y-Größe
...
NeueWeltErzeugen()
Öffnen()
Methoden
Speichern()
...
Übung 3
Erstellen Sie in Ihrem Hefter eine weitere Tabelle, in der Sie einige Eigenschaften und
Methoden der Klasse Roboter zusammenstellen!
Objektorientierte Programmierung mit Karol
Karol aus objektorientierter Sicht
3 von 3
Natürlich kann man mit Karol auch objektorientiert programmieren. Das folgende
Beispiel zeigt ein Programm für Karol, das in objektorientierter Schreibweise notiert
wurde.
Typisch für die objektorientierte Programmierung ist die Punktschreibweise
(Objekt.Methode()). Leider erhöht diese Schreibweise den Aufwand für das
Schreiben des Quelltextes erheblich, so dass wir auf diese Schreibweise verzichten
werden und unsere Programme wie gehabt in der einfachen Notation schreiben.
Wiederholungen mit fester Anzahl
1 von 3
Wiederholungen mit fester Anzahl
Bei vielen Programmen, z.B. beim Legen einer Reihe von 6 Ziegeln, muss immer wieder
"das Gleiche gemacht werden" (Hinlegen - Schritt -> Hinlegen - Schritt
usw.). Karol muss sechsmal einen Stein ablegen und anschließend einen Schritt machen,
d.h. er wiederholt die Sequenz Hinlegen - Schritt insgesamt sechsmal. Solche
Wiederholungen kommen sehr oft vor. Deshalb gibt es dafür eine eigene Anweisung
Wiederholung mit fester Anzahl.
Einführungsbeispiel
Ein Vorschlag zur Lösung unseres Problems könnte folgendermaßen aussehen:
Leider ist dieser Vorschlag sehr unklar formuliert, da aus dem Programmtext nicht
hervorgeht welche Anweisungen Karol wiederholen soll:
a) Nur die Anweisung Hinlegen,
b) die Anweisungen Hinlegen und Schritt oder
c) alle drei Anweisungen?
Übung 1
Überlegen Sie, wie das Ergebnis der Fälle a) bis c) aussehen würde! Kontrollieren Sie
anschließend Ihre Überlegungen, indem Sie diese mit den Lösungen vergleichen.
Sie sehen also, dass bei einer Wiederholung immer ganz genau angegeben werden muss,
welche Anweisungen wiederholt werden sollen. Für die Fälle a) bis c) müssen die
Anweisungen dementsprechend wie folgt aussehen:
Übung 2
Geben Sie die Programmtexte ein und testen Sie die drei Programme! (Hinweis: Das
Einrücken der zu wiederholenden Anweisungen ist nicht notwendig, es verbessert aber
die Lesbarkeit des Programmtextes.)
Wiederholungen mit fester Anzahl
2 von 3
Zusammenfassung
Die Wiederholung mit fester Anzahl wird verwendet, wenn eine Sequenz
mehrfach ausgeführt werden soll und die Anzahl der Wiederholungen bereits
vorher feststeht.
Wiederhole n mal
Sequenz
*Wiederhole
Die Anweisungsfolge innerhalb der Wiederholungsanweisung wird dann so oft
ausgeführt, wie die Zahl n vorgibt. Die Wiederholung mit fester Anzahl wird auch
oft als Zählschleife bezeichnet.
Das Struktogramm als grafische Darstellung des Programmtextes
Neben der Darstellung des Programmes in Form des Programmtextes gibt es noch eine
weitere Form der Darstellung des Programmes in grafischer Form: das Struktogramm.
Das Struktogramm steigert die Übersichtlichkeit, vor allem bei komplexeren
Programmen. Aus diesem Grund wird es in der Praxis sehr oft verwendet, um sich das
Programm vor der eigentlichen Programmierung am Computer grafisch zu
veranschaulichen. Für unser Einführungsbeispiel sehen die Struktogramme
folgendermaßen aus:
Das Struktogramm ist eine grafische Darstellung von Programmtexten.
Regeln für das Zeichnen von Struktogrammen
Sequenzen von Anweisungen werden
jeweils von einem Rechteck umrandet.
Wiederholungen mit fester Anzahl
3 von 3
Wiederholungen werden von den
vorangegangenen und folgenden
Anweisungen durch waagerechte
Striche abgetrennt. Die zu
wiederholende Sequenz wird in ein
kleineres, inneres Rechteck
eingetragen, vor dem die Anzahl der
Wiederholungen angegeben ist.
Anzeigen von Struktogrammen in der Entwicklungsumgebung ROBOT KAROL
In der Entwicklungsumgebung ROBOT KAROL kann man sich das Struktogramm eines
Programms anzeigen lassen: Menü Struktogramm. Es gibt die Möglichkeit das
Struktogramm auszudrucken, in die Zwischenablage zu kopieren, bzw. als Grafik
abzuspeichern.
Übung 3
Öffnen Sie eines Ihrer erstellten Beispielprogramme und lassen Sie sich das
Struktogramm dazu anzeigen!
Übungen zu Anweisungen mit fester Anzahl der Wiederholung
Übung 4 - Sechs Ziegel
a. Formulieren Sie die Methode SechserReiheLegen mit Hilfe der
Wiederholung mit fester Anzahl!
b. Testen Sie auch Methoden für das Bauen des Turms und der Doppeltreppe (siehe
Einführungsbeispiel a) und c))!
Übung 5 - Trepp' auf, Trepp' ab
Lassen Sie Karol eine Treppe wie in nebenstehender
Abbildung bauen! Dabei kann Karol auf zwei völlig
verschiedene Arten vorgehen.
a. Karol legt zuerst die unterste Reihe (Methode Reihe7Legen), geht zurück
(Methode Laufe6), legt die nächste Reihe (Methode Reihe5Legen) usw.
b. Karol legt das rechte Ende, geht einen Schritt vor, legt den Stapel mit den zwei
Ziegelsteinen (Methode Lege2), geht wieder einen Schritt vor usw.
Bedingte Wiederholungen
1 von 5
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?
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.
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 Roboter steht vor einem Hindernis.
Der Roboter steht vor einem Ziegel.
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.
Bedingte Wiederholungen
2 von 5
Liefert wahr, wenn das Feld auf dem Karol steht, markiert ist, und
falsch, wenn dieses Feld nicht markiert ist.
IstMarke()
Liefert wahr, wenn Karol in Richtung Norden blickt, und falsch,
IstNorden() 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.
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
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
Ü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!
Übungsaufgaben
Bedingte Wiederholungen
3 von 5
Übung 2: Zimmer verschönern
a. Vereinbaren Sie eine Methode ZurWandGehen, die Karol bis zur Wand vor ihm
gehen lässt!
b. Vereinbaren Sie eine Methode ZurEckeGehen, die Karol in die Ecke links vor
ihm schickt! Verwenden Sie dafür Ihre Methode ZurWandGehen!
c. 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.
d. 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)
Übung 3: Lastentransport
a. 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.
b. 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)!
Ü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!
Bedingte Wiederholungen
4 von 5
Ü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.
Ü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.
a. 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!
b. Testen Sie Ihr Programm mit einer anderen Kette!
c. 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.
Bedingte Wiederholungen
5 von 5
Ü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.
Bedingte Anweisungen
1 von 3
Bedingte Anweisungen
In vielen Situationen müssen
Entscheidungen getroffen
werden. Je nachdem ob eine
bestimmte Situation eingetreten
ist oder nicht muss man sich für
die eine oder andere Alternative
entscheiden (siehe rechts).
Auch Robot Karol steht oft vor solchen Entscheidungen. Je nachdem welche Signale er
von seinen Sensoren empfangen hat, muss er unterschiedlich reagieren. Betrachten wir
zur Erläuterung folgendes Beispiel:
Vor dem Invertieren
Nach dem Invertieren
Karol soll zur gegenüberliegenden Wand laufen. Wenn auf seinem Weg dahin ein Ziegel
liegt, soll er ihn aufheben. Wenn er jedoch ein leeres Feld vorfindet, soll er einen Ziegel
ablegen.
Karol muss also abhängig von einer Bedingung (Liegt auf dem Feld vor mir ein Ziegel?)
von zwei möglichen Sequenzen (Ziegel aufheben bzw. Ziegel hinlegen) eine auswählen,
die er ausführen soll. Man nennt diese Situation eine bedingte Anweisung oder auch
zweiseitige Entscheidung.
Bedingte Anweisungen
2 von 3
Struktogramm
Anweisungstext
Wenn die Bedingung zutrifft (also "wahr" ist), wird die Sequenz 1 im dann-Teil
ausgeführt. Sonst, d.h. wenn die Bedingung "falsch" ist, wird die Sequenz 2 im
sonst-Teil ausgeführt.
Kehren wir nun zu unserem Beispiel zurück. Die bedingte Anweisung für das
Invertieren eines Feldes lautet also folgendermaßen:
Struktogramm
Anweisungstext
Aufgabe:
Ergänzen Sie nun den Rest des Programms! Karol soll von seinem Standpunkt aus bis
zur gegenüberliegenden Wand laufen und dabei alle Felder nacheinander invertieren.
Die vorgefertigte Welt für das Programm können Sie hier herunterladen.
Aufgaben
Übung 1: Eine Reihe auffüllen
Die Ausgangssituation für diese Aufgabe ist die gleiche wie in unserem
Einführungsbeispiel. Karol steht wiederum vor einer lückenhaften Reihe von Ziegeln.
Wieder soll er zur gegenüberliegenden Wand laufen. Diesmal soll er allerdings die
Ziegelreihe nicht invertieren, sondern auffüllen. Dies bedeutet, dass die Ziegelreihe am
Ende keine Lücken mehr beinhalten darf. Verwenden Sie für diese Aufgabe wiederum
die gleiche vorgefertigte Welt wie in unserem Einführungsbeispiel!
Übung 2: Subtrahieren
Erstellen Sie ein Programm bei dem Karol von einem Stapel
drei Felder rechts von ihm so viele Steine wegnimmt, wie auf
einem Stapel vor ihm liegen (siehe Abbildung rechts)! Eine
vorgefertigte Welt für dieses Programm finden Sie hier!
Wenn er nichts mehr subtrahieren kann (Minuend kleiner als
Bedingte Anweisungen
3 von 3
Subtrahend), soll er die Steine auf ein Feld 4 Felder rechts
von ihm ablegen (negatives Ergebnis!)! Eine vorgefertigte
Welt für dieses Programm finden Sie hier!
Übung 3: Raum auslegen
Ein Teil der Felder in Karols Raum ist mit einem
Ziegel belegt (siehe Abbildung rechts). Eine
vorgefertigte Welt finden Sie hier! Entwerfen Sie
eine Anweisungsfolge, welche die noch freien
Felder ebenfalls mit einem Ziegel belegt!
Überlegen Sie sich zunächst eine Strategie wie Sie
vorgehen wollen, um das Problem zu lösen!
Übung 4: Wandern auf schmalen Pfaden
Achtung! Bei dieser Aufgabe handelt es sich um eine Aufgabe mit erhöhtem
Schwierigkeitsgrad!
Karol läuft auf einer Kette von Ziegelsteinen von einem Ende zum anderen Ende, ohne
die Steine aufzuheben. Er darf unterwegs die Ziegelsteinkette nicht verlassen. Achten
Sie darauf, dass er wirklich von einem Ende der Kette bis zum anderen Ende läuft! Eine
vorgefertigte Welt finden Sie hier!
Hinweis: Um zu verhindern, dass Karol wieder zurück läuft, wird ein besuchter Stein mit
einer Marke belegt.
Übung 5: Leuchtschrift
Karol hat eine schöne, große Leuchtschrift
gesehen, bei der die Buchstaben und der
Hintergrund abwechselnd aufleuchten. Er
will diese Leuchtschrift mit Markierungen
nachbauen (siehe Abbildung rechts). Eine
vorgefertigte Welt finden Sie hier!
a. Schreiben Sie ein Programm, das, ähnlich wie in unserer Beispielaufgabe, den
ganzen Raum mit Markierungen invertiert! Orientieren Sie sich an der Strategie
des Programms "Raum auslegen"!
b. Vollenden Sie das Programm von Aufgabe a) in der Form, dass die Schrift
insgesamt 10-mal invertiert wird!
Spezialfälle bedingter Anweisungen
1 von 3
Spezialfälle bedingter Anweisungen
Einseitige Auswahl
Beispiel: Viele Ziegel
Karol bekommt den Auftrag insgesamt einhundert Ziegel abzulegen. Da er nicht so hoch
reicht, kann er sie nicht alle vor sich aufstapeln. Deshalb legt er sie hintereinander.
Dabei muss er aufpassen, dass er nicht an eine Wand stößt. Außerdem soll Karoll am
Anfang nicht vor einer Wand stehen.
Überlegen Sie, wie eine Lösung unseres Problems aussehen könnte!
Ein Lösungsvorschlag könnte folgendermaßen aussehen:
Struktogramm
Anweisungstext
Auffällig im Vergleich zu den zweiseitigen Anweisungen ist, dass Karol nur dann auf die
Überprüfung der Bedingung reagieren muss, wenn er tatsächlich vor einer Wand steht.
Steht er hingegen nicht vor einer Wand, braucht er auch nicht zu reagieren und fährt
ganz einfach mit der weiteren Ausführung des Programms fort. Diesen Spezialfall einer
bedingten Anweisung nennt man eine einseitige Entscheidung. Der sonst-Teil der
zweiseitigen Entscheidung wird nicht benötigt und im Programmtext einfach
weggelassen.
Eine bedingte Anweisung heißt einseitig, wenn der sonst-Teil fehlt. Falls die
Bedingung "falsch" ist, wird die Sequenz 1 im Programmablauf übergangen.
Struktogramm
Anweisungstext
Spezialfälle bedingter Anweisungen
2 von 3
Aufgaben zur einseitigen Entscheidung
Übung 1: Reihe mit Löchern
Entwerfen Sie eine Folge von Anweisungen, mit der Karol
von seiner momentanen Position ausgehend, eine
Ziegelreihe zur gegenüberliegenden Wand legt. Dabei soll
er nur auf jedes zweite Feld einen Ziegel ablegen (siehe
Abbildung rechts). Testen Sie Ihre Lösung, wenn Karol
eine geradzahlige Anzahl von Feldern bzw. eine
ungeradzahlige Anzahl von Feldern vor der Wand steht!
Übung 2: Im Sumpf
Karol soll über Ziegelwege aus einem Sumpf
herausfinden (siehe Abbildung rechts) . Damit er an
den Abbiegungen und Abzweigungen weiß wie er
gehen muss, hat ein Freund vorher den Weg erkundet.
Wenn der Weg nach links führt, hat das
Abzweigungsfeld bzw. die Kurve eine Markierung,
sonst nicht. Erstelle ein Programm, das Karol wieder
aus dem Sumpf führt. Eine vorgefertigte Welt finden
Sie hier!
Hinweis: Achten Sie darauf, dass Karol richtig
reagiert, wenn er das Ende des Weges erreicht hat und
nicht wieder zurück in den Sumpf läuft!
Verschachtelte bedingte Anweisungen
Auswahlanweisungen lassen sich, ähnlich wie Wiederholungsanweisungen,
schachteln.
Karol soll ein beliebiges Grundstück umrunden,
das durch Ziegelsteine eingezäunt ist. Die Felder
mit den Ziegelsteinen haben mindestens eine Seite
gemeinsam (siehe Abbildung rechts). Dazu muss
eine Strategie entwickelt werden, die Karol dazu
bringt, bei einem beliebigen Grundstück immer
am Zaun entlang zu laufen.
Aufgabe: Beschreiben Sie die verschiedenen
Situationen, die auf Karols Weg um das
Grundstück auftreten können! Überlegen Sie wie
Spezialfälle bedingter Anweisungen
3 von 3
Karol in der jeweiligen Situation reagieren muss!
Karol muss unterwegs immer auf zwei Bedingungen achten:
1. Befindet sich rechts ein Hindernis?
2. Befindet sich vor ihm ein Hindernis?
Umgangssprachlich formuliert muss die Lösung für das Problem folgendermaßen lauten:
Wenn die erste Bedingung "wahr" ist, muss noch die zweite Bedingung geprüft
werden.
Wenn die zweite Bedingung "wahr" ist, dann dreht sich Karol nach links, sonst
geht er einen Schritt geradeaus.
Wenn die erste Bedingung "falsch" ist, dann dreht sich Karol nach rechts und
geht anschließend einen Schritt vorwärts.
Das Struktogramm unserer Lösungsstrategie sieht folgendermaßen aus:
Man spricht hier von einer verschachtelten Anweisung, da sich die zweite bedingte
Anweisung völlig in der Anweisungsfolge des dann-Teils der ersten bedingten
Anweisung befindet. Natürlich wäre es auch denkbar, dass sie sich im sonst-Teil der
ersten bedingten Anweisung befindet.
Damit Karol immer wieder um das Hindernis rennt, sollen
die bedingten Anweisungen in eine Endlosschleife
eingebettet werden (Anweisungstext siehe rechts).
Um zu prüfen, ob sich rechts von Karol ein Ziegel
befindet, ist ein neues Prädikat
IstRechtsZiegel notwendig. Den
Anweisungstext dieses Prädikats sehen Sie rechts
dargestellt.
Aufgabe: Schreiben und testen Sie nun das Programm zur Umrundung des Hindernisses!
Die vorgefertigte Welt finden Sie hier!