Mini-Languages: Programmierung von Robot Karol
Programmierung von Robot Karol
[Bearbeiten]Die Programmierumgebung von Robot Karol stammt ursprünglich von Ondrej Krško (http://www.robotkarol.sk/). Sie wurde aus dem slowakischen ins deutsche von Ulli Freiberger übersetzt und technisch leicht verändert. Die Programmierumgebung ist in vier Bereiche aufgeteilt (ein Bildschirmausdruck ist auf der Seite des Programmautors zu sehen: http://www.schule.bayern.de/karol/progscreen.htm). Links oben der Bereich "Programm" oder "Editor", in dem alle Befehle eingetragen werden. Rechts daneben die Welt des Roboters. Diese kann wahlweise als zweidimensionale (2D) oder dreidimensionale (3D) Welt angezeigt werden. Links unten befindet sich der Übersichtsbereich, in dem alle Befehle und Kontrollstrukturen als Kurzreferenz zu finden sind. Schließlich gibt es rechts unten den Bereich "Information". Hier werden bestimmte Meldungen der Programmierumgebung ausgegeben.
Was wird benötigt
[Bearbeiten]Die notwendige Programmierumgebung muss zunächst von der Internetseite des Programmautors Ulli Freiberger geladen werden (http://www.schule.bayern.de/karol/ und dort unter "Download"). Die Datei ist ca. 1 MByte groß. Um das Programm zu starten, muss auf dem PC das Betriebssystem Microsoft Windows ab Version 95 installiert sein. Nach dem Laden aus dem Internet wird das Programm durch einen Doppelklick geöffnet und auf dem Computer installiert. Die Installation erklärt sich von selbst. Ebenfalls auf der Seite Download erhältlich ist ein Handbuch im PDF-Format.
Die Programmierumgebung ist frei erhältlich. Der Programmautor schreibt in seiner Lizenz:
- Das Programm "Robot Karol deutsch" steht für den Bildungsbereich zur freien Nutzung zur Verfügung. Das heißt, Schüler, Lehrer und Studenten dürfen das Programm uneingeschränkt und kostenlos nutzen, es beliebig oft installieren und kopieren.
- Das Programm darf frei weitergegeben werden, sofern es nicht verändert wird und das Originalarchiv mit allen enthaltenen Dateien erhalten bleibt. Für die Weitergabe darf keine Gebühr erhoben werden mit Ausnahme der Abgaben die nötig sind um die Kosten für das Vertriebsmedium zu decken.
- Diese Software wird vertrieben als "wie-es-ist", ohne jegliche ausgesprochene oder implizite Garantie. In keiner Weise ist der Author haftbar für Schäden, die durch die Nutzung dieser Software entstehen.
- Copyright (c) 2001 Ondrej Krsko
- Copyright (c) 2001-2003 Ulli Freiberger
Die Programmierumgebung wird durch einen Doppelklick auf das entsprechende Symbol gestartet.
Karols Welt
[Bearbeiten]Nach dem Öffnen der Programmierumgebung schaut man zuerst auf die dargestellte dreidimensionale Welt und den kleinen Roboter Karol. Er wartet geduldig auf Befehle. Doch bevor ein erstes Programm entwickelt wird, sollte man die Bewegungen von Karol kennenlernen.
Erste Schritte
[Bearbeiten]Karol kann ferngesteuert werden. Mit den Pfeiltasten (cursor-Tasten) wird die Bewegung gesteuert:
Pfeil hoch: Karol geht einen Schritt vorwärts Pfeil runter: Karol geht einen Schritt rückwärts Pfeil links: Karol dreht sich nach links (gegen den Uhrzeiger) Pfeil rechts: Karol dreht sich nach rechts (mit dem Uhrzeiger)
- Erkunden Sie die Welt mit Karol und lassen sie ihn durch Fernsteuern mit den Pfeiltasten durch seine Welt laufen.
- Was muss ich tun, wenn sich Karol nicht fernsteuern lässt?
- Wenn Karol nicht auf die Pfeiltasten reagiert, klickt man einmal mit der linken Maustaste auf seine Welt.
Außer Bewegen kann Karol noch mehr. Seine Welt ist nicht so leer, wie sie jetzt noch scheint. Es gibt Gegenstände, wie Ziegel und Quader, und es gibt Marker, die Karol jeweils manipulieren kann. Was genau die Unterschiede sind, braucht an dieser Stelle nicht erläutert zu werden.
Mit einem der folgenden Buchstaben werden die Gegenstände manipuliert:
- H: legt einen Ziegel vor Karol ab
- A: nimmt den Ziegel vor Karol auf
- M: setzt einen Marker unter Karol oder entfernt einen Marker
- Q: legt einen Quader vor Karol ab
- E: nimmt einen Quader vor Karol auf
- Legen Sie auf dem gesamten Fußboden Karols Welt Ziegel ab, so dass eine gleichmäßig "geflieste" Fläche entsteht.
Von Ziegeln, Quadern und Markern
[Bearbeiten]Wie man schnell feststellt, kann Karol zwei Arten von Gegenständen bewegen: die Ziegel und die Quader. Ferner kann Karol Positionen markieren.
- Experimentieren Sie mit Ziegeln, Quadern und Markern und versuchen Sie die Unterschiede festzustellen.
Wichtig ist an dieser Stelle die ersten Beobachtungen festzuhalten:
- 1. Karol kann mehrere Ziegel aufeinander stapeln, nicht aber Quader.
- 2. Karol kann Ziegel und Quader nicht übereinander stapeln.
- 3. Karol kann sich auf einen Ziegel stellen, nicht aber auf einen Quader.
- 4. Karol muss, um sich auf einen Stapel von zwei oder mehr Ziegeln zu stellen, eine Treppe bauen.
- 5. Karol kann seinen Standort mit einem Marker markieren.
- 6. Der Marker bleibt gesetzt auch wenn Karol einen Ziegel darauf legt.
- 7. Karol kann keinen Quader auf einen Marker legen.
- Wenn die Welt voll mit Ziegel- und Quadermüll ist und Karol keine Luste hat jeden Gegenstand einzeln aufzuräumen, hilft ein Klick auf den Knopf "L" unterhalb der Welt. Er löscht die Welt von Karol und führt den Anfangszustand zurück.
Karol gehorcht auf Befehle
[Bearbeiten]Karol soll mit Befehlen bewegt werden. Alle Befehle werden im Editor links oben eingegeben. So entsteht ein Programm. Dies ist nichts anderes als Befehle, die in einer bestimmten Reihenfolge ausgeführt werden. Die Befehle werden von oben nach unten abgearbeitet. Der Befehl ganz oben im Programm wird als erstes beachtet. Erst wenn er vollständig und ohne Fehler ausgeführt werden kann kommt der nächste Befehl darunter an die Reihe. Anhand eines ersten einfachen Beispiels soll sich Karol nach vorn bewegen.
Soweit noch nicht geschehen sollte man an dieser Stelle die Welt von Karol in den Anfangszustand zurücksetzen. Dazu klickt man mit der linken Maustaste auf die Welt und anschließend drück man den Knopf "L" unterhalb der Welt. Alternativ findet man im Menü Welt den Eintrag Welt löschen.
Im Editor links gibt man das Wort "Schritt" ein. Hierbei handelt es sich um eine Anweisung, der im Folgenden so dargestellt wird:
Schritt
- Anweisung
- eine Anweisung ist ein Befehl an Karol etwas zu tun.
Anschließend drückt man die Zeilenvorschubtaste ("ENTER") um eine neue Zeile zu beginnen und schreibt abermals
Schritt
Das wiederholt man noch zweimal, so dass das erste Programm wie folgt aussieht:
Schritt Schritt Schritt Schritt
Um das Programm zu starten klickt man auf den Knopf "Programmstart" (das ist das blaue Dreieck, das mit einer spitze nach rechts zeigt) oder die Funktionstaste "F9". Karol sollte nun zügig vier Schritte nach vorn gehen.
Ging das zu schnell? Kein Problem: Der Programmablauf kann als Einzelschritt besser nachvollzogen werden. Entweder man klickt auf den Knopf "Einzelschritt" unterhalb des Editors oder man benutzt die Funktionstaste "F7". Nun passiert folgendes: beim ersten Tastendruck wird im Editor die aktuelle Programmzeile links mit einem blauen Pfeil markiert. Drückt man "F7" erneut wird der Befehl
Schritt
bearbeitet; Karol geht einen Schritt nach vorn. Automatisch wird nun die nächste Zeile mit dem blauen Pfeil markiert. Der nächste Einzelschritt lässt Karol wieder nach vorn gehen und so weiter.
- führen Sie das Programm mehrmals hintereinander aus ohne jeweils die Welt zu löschen. Was passiert?
Nach mehrmaligem Programmstart passiert es unweigerlich: Karol rennt vor die Wand. Auch wenn es ihm nicht weh tut so ist dies doch ein grober Fehler im Programm. Dies muss unbedingt vermieden werden. Wie? Das wird später erklärt. An dieser Stelle wird nur auf zwei Neuigkeiten verwiesen, die einen solchen Fehler anzeigen. Zum Einen ist im Bereich Information unten rechts zu lesen
[Abbruch] [Zeile 2]: Karol ist an die Wand angestoßen
Geleichzeitig erscheint im Editor in der zweiten Zeile das Symbol "Daumen nach unten". Dies ist hilfreich bei der Suche nach Fehlern. Der Programmierer erkennt hier auf einen Blick, dass das Programm auf unerwartete Weise beendet wurde. "Unerwartet" ist das deshalb, weil der Programmierer im Programm keine Kontrolle vorgesehen hat, um diesen Fehler aufzuspüren und Karol entsprechend reagieren zu lassen. Durch die Angabe der Zeilennummer erkennt der Programmierer gleich, an welcher Stelle er möglicherweise falsch programmiert hat. Doch bereits an diesem einfachen Beispiel muss man feststellen, dass es (fast) nur zufällig ist, an welcher Zeile im obigen Programm der Abbruch erfolgt. Man wird bald selbst die Erfahrung machen, dass Angaben über Fehler im Programm nicht immer genau stimmen. Sie geben lediglich einen Hinweis darauf, wo man mit der Fehlersuche beginnen sollte.
Was gibt es außer Anweisungen noch?
Die Anweisung gibt Karol den Befehl etwas zu tun. Daneben gibt es noch zwei weitere Kategorien, die hier nur der Vollständigkeit halber kurz vorgestellt werden sollen.
- Kontrollstrukturen
- Die Kontrollstrukturen sollen den Ablauf eines Programms steuern. Es soll kontrolliert ablaufen. Die Vorgaben dafür setzt entweder der Programmierer (zum Beispiel eine Anweisung 10 mal hintereinander auszuführen) oder die Umwelt von Karol (zum Beispiel die Anweisung an Karol sich zu drehen, wenn er vor einer Wand steht).
- Zustände (in Handbuch der Programmierumgebung "Bedingungen" genannt)
- Über die vordefinierten Zustände kann der Programmierer etwas über Karols Umwelt während der Programmausführung erfahren. Sie verraten zum Beispiel, ob Karol vor einer Wand steht oder vor ihm ein Ziegel liegt).
Welche Anweisungen, Kontrollstrukturen und Zustände Karol kennt wird im Verlauf des Buches gezeigt.
Schreibweise / Syntax
[Bearbeiten]Bei jeder Programmierung muss sich der Programmierer an eine Syntax halten. Damit ist die Regel gemeint nach der zum Beispiel Anweisungen eingegeben werden müssen damit die Programmierumgebung diese Anweisung korrekt umsetzen kann. Die Syntax zu lernen gehört zum wichtigsten Handwerkszeug des Programmierers.
Die Programmierumgebung Robot Karol macht es dem Programmieranfänger leicht. Es ist lediglich auf folgendes immer zu achten:
- sämtliche Befehle müssen korrekt geschrieben werden. Groß- und Kleinschreibung wird nicht unterschieden
- falsch
Schrit
- richtig
sChRitt
- besser
Schritt
- alle Befehle müssen zumindest von einem Leerzeichen getrennt sein
- falsch
SchrittSchritt
- richtig
Schritt Schritt
- besser
Schritt Schritt
- darf man einem Befehl einen Parameter übergeben, wird dieser in runden Klammern angegeben
- falsch
Warten[1000]
- richtig
Warten (1000)
- besser
Warten(1000)
Die Anweisungen im Einzelnen
[Bearbeiten]Im Folgenden werden die Anweisungen anhand kurzer Beispiele vorstellt. Es ist empfehlenswert, wenn Sie vor jedem Erstellen eines neuen Programms die Welt löschen.
Schritt
[Bearbeiten]Mit der Anweisung
Schritt
geht Karol einen Schritt nach vorn. Karol kann sich nicht zur Seite und nicht rückwärts bewegen.
- Karol geht immer in Blickrichtung!
LinksDrehen
[Bearbeiten]Mit der Anweisung
LinksDrehen
dreht sich Karol um 90 Grad nach links (gegen den Uhrzeiger).
RechtsDrehen
[Bearbeiten]Mit der Anweisung
RechtsDrehen
dreht sich Karol um 90 Grad nach rechts (mit dem Uhrzeiger).
Hinlegen
[Bearbeiten]Bei der Anweisung
Hinlegen
legt Karol einen Ziegel vor sich ab.
Hinlegen(Anzahl)
legt Anzahl Ziegel ab. Zum Beispiel legt Karol bei
Hinlegen(3)
3 Ziegel vor sich ab.
- Was passiert, wenn Karol einen Ziegel ablegen soll und an dieser Stelle schon ein Ziegel liegt?
Liegt bereits eine bestimmte Menge Ziegel vor Karol für die Anweisung Hinlegen, fügt Karol einen weiteren Ziegel hinzu (addiert).
- Was passiert, wenn Karol 100 Ziegel vor sich ablegen soll?
Es ist möglich, dass Karol einen Programmabbruch herbeiführt, wenn er zu viele Ziegel auf einen Stapel legen soll. Die Anzahl möglicher Ziegel auf einem Feld ist durch die Höhe der Welt vorgegeben. Meist liegt diese Höhe bei einem Wert von 6, was bedeutet, dass Karol 6 Ziegel auf einem Feld stapeln kann. Soll ein 7. Ziegel hinzugefügt werden, bricht das Programm mit der Meldung ab "Maximale Stapelhöhe erreicht". Beim Erstellen einer neuen Welt kann der Wert für die Höhe auf maximal 10 gesetzt werden.
- Soll Karol auf einem Feld mehr Ziegel ablegen als die maximale Höhe erlaubt, wird die maximale Menge an Ziegeln abgelegt und erst dann das Programm beendet.
Aufheben
[Bearbeiten]Durch
Aufheben
wird Karol angewiesen einen Ziegel vor sich aufzunehmen.
Aufheben(Anzahl)
führt dazu, dass Karol Anzahl Ziegel aufhebt.
- Was passiert, wenn Karol mehr Ziegel aufheben soll als vor ihm liegen?
Karol ist sehr genau in der Bearbeitung der Anweisungen die er erhält! Wenn er eine Anzahl Ziegel aufheben soll, die gar nicht vor ihm liegt quittiert er dies mit einem Programmabbruch!
- Liegt vor Karol ein Ziegel und die Anweisung verlangt, dass er zwei Ziegel aufheben soll, so nimmt er einen Ziegel auf und bricht dann die Ausführung des Programms ab.
MarkeSetzen
[Bearbeiten]Die Anweisung
MarkeSetzen
markiert das Feld auf dem Karol steht.
- Was passiert, wenn Karol ein Feld markieren soll, das bereits markiert ist?
Das Programm könnte so aussehen
MarkeSetzen MarkeSetzen
Nach dem Programmstart markiert Karol das Feld unter sich. Anschließend markiert er es erneut, was im Ergebnis zu keiner Veränderung führt.
MarkeLöschen
[Bearbeiten]Mit
MarkeLöschen
wird das markierte Feld unter Karol wieder als nicht markiert gekennzeichnet. Ist das Feld unter Karol nicht markiert, wird die Anweisung dennoch ausgeführt. Es kommt nicht zu einem Programmabbruch.
Warten
[Bearbeiten]Die Anweisung
Warten
lässt Karol für eine Sekunde warten.
Möchte man die Wartezeit selbst bestimmen, gibt man als Anweisung
Warten(Millisekunden)
an.
- Warten(1000) = Warten
Ton
[Bearbeiten]Durch die Anweisung
Ton
wird ein Standardton abgespielt.
Man kann den Ton auch verändern, in dem man ihn im Programmorder löscht und einen anderen mit dem gleichen Namen einfügt.
Beenden
[Bearbeiten]Die Anweisung
Beenden
stoppt die Programmausführung an dieser Stelle sofort.
Die Kontrollstrukturen im Einzelnen
[Bearbeiten]Bei der Programmierung sind Kontrollstrukturen sehr hilfreich wenn es zum Beispiel um immer die selben Anweisung geht. Aber auch, wenn bestimmte Anweisungen nur unter besonderen Bedingungen ausgeführt werden sollen.
Wiederhole Bis / Solange
[Bearbeiten]Um Karol bestimmte Anweisungen mehr als einmal ausführen zu lassen bietet sich die Kontrollstruktur Wiederhole an. Die Grundstruktur sieht immer so aus:
Einleiten der Kontrollstruktur Anweisungsblock Ende der Kontrollstruktur
Der Anweisungsblock kann aus einer oder mehrerer Anweisungen bestehen. Innerhalb der Kontrollstruktur werden die Anweisungen wie ein Programm von oben nach unten abgearbeitet. Das Ende der Kontrollstruktur wird durch ein "*" markiert.
- die einzelnen Zeilen der Anweisungen im Block entweder mit Leerzeichen oder mit der Taste TAB (Tabulator) einrücken. So behält man den Überblick über den Anweisungsblock; wo er anfängt und wo er endet.
Die Unterschiede der Kontrollstrukturen werden schnell klar:
Wiederhole solange Anweisungen *Wiederhole
Die Anweisungen werden immer wiederholt. Das Beispiel
Wiederhole Solange Schritt *Wiederhole
lässt Karol vorwärts gehen, bis eine Wand seinen Weg kreuzt. Schlimmer wäre es, wenn man statt Schritt die Anweisung Ton einfügt. Da diese unendlich ausgeführt werden kann, hat man eine so genannte Endlosschleife programmiert, deren Ausführung nur durch einen Klick auf "Abbrechen" unterhalb des Editors beendet werden kann. Solche Endlosschleifen muss ein Programmierer immer verhindern!
Wiederhole n Mal Anweisungen *Wiederhole
Dies ist eine Möglichkeit die Endlosschleife zu verhindern. Karol soll n mal den Anweisungsblock bearbeiten. Das Beispiel...
Wiederhole 4 Mal Schritt LinksDrehen Schritt LinksDrehen Schritt LinksDrehen Schritt LinksDrehen *Wiederhole
...lässt Karol 4 mal im Kreis laufen.
Wiederhole Solange Bedingung Anweisung *Wiederhole
Da man sehr häufig noch nicht weiß wie oft ein Anweisungsblock abgearbeitet werden soll, kann durch Solange Bedingung Tue die Anzahl der Durchläufe vom Eintritt einer Bedingung abhängig gemacht werden.
Um hier Beispiele zu bilden ist es notwendig eine Bedingung zu formulieren. Dabei wird einem folgenden Kapitel vorgegriffen. Eine Beispielbedingung könnte heißen: "Ist vor dir eine Wand?" oder in der Programmiersprache von Karol ausgedrück IstWand. Wie man an der Frage erkennen kann, gibt es für die Bedingungen nur zwei Antworten: ja oder nein. In Programmiersprachen wird allerdings mit den Zuständen "wahr" oder "falsch" gearbeitet. Die Bedingung IstWand stellt eine Aussage dar, die der Programmierer trifft. Während Karol das Programm abarbeitet und auf diese Aussage stößt, entscheidet er, ob die Aussage wahr oder falsch ist. Stellt man sich vor, Karol steht vor einer Wand und der Programmierer behauptet im Programm IstWand, so muss Karol nach den Gesetzen der Logik antworten wahr. Wenn Karol entscheiden kann, ob vor ihm eine Wand ist, kann er - logisch - auch entscheiden, dass vor ihm keine Wand ist. Die Bedingung würde heißen: NichtIstWand.
Karol... | IstWand | NichtIstWand |
---|---|---|
steht vor einer Wand | wahr | falsch |
hat ein freies Feld vor sich | falsch | wahr |
Ein Beispiel:
Wiederhole Solange NichtIstWand Schritt *Wiederhole
Was passiert hier? Karol beginnt die Kontrollstruktur mit der Prüfung, ob er nicht vor einer Wand steht (NichtIstWand). Ist vor ihm ein freies Feld, also die Aussage, er stehe nicht vor einer Wand wahr, beginnt er mit der Ausführung des Anweisungsblocks; Karol macht einen Schritt nach vorn. Die Kontrollstruktur wird nun wiederholt. Karol beginnt wieder zu prüfen. Irgendwann steht Karol vor einer Wand und die Prüfung ergibt logisch falsch. Dann wird der Anweisungsblock übersprungen; Karol macht keinenSchritt mehr und das Programm wird nach der Kontrollstruktur fortgesetzt. Da hier im Beispiel keine Zeile folgt ist das Programm an dieser Stelle beendet.
Solange Bedingung Tue Anweisungen *Solange
Diese Kontrollstruktur ist prinzipiell zu der darüber beschriebenen gleich.
Wiederhole Anweisungen *Wiederhole Solange Bedingung
In dieser Kontrollstruktur fällt auf, dass die Bedingung am Ende steht. Somit wird auch die Prüfung, ob die Bedingung eingetreten ist, erst nach mindestens einer Ausführung des Anweisungsblocks durchgeführt. Diese Art der Kontrollstruktur nennt man auch Fußgesteuert. Die anderen sind demnach Kopfgesteuert.
- Merke: Fußgesteuerte Kontrollstrukturen führen dazu, dass der Anweisungsblock immer einmal ausgeführt wird.
Wiederhole Anweisungen *Wiederhole Bis Bedingung
Diese fußgesteuerte Kontrollstruktur unterscheidet sind darin, dass Bis Bedingung gearbeitet wird.
- Lassen Sie die folgenden beiden Programme von Karol abarbeiten (getrennt voneinander) und beobachten Sie den Unterschied!
Wiederhole Schritt *Wiederhole Solange NichtIstWand
Wiederhole Schritt *Wiederhole Bis NichtIstWand
Wenn / Dann
[Bearbeiten]Wenn Bedingung Dann Anweisungen *Wenn
Wenn Bedingung Dann Anweisungen Sonst Anweisungen *Wenn