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!