Robot Karol: Aufräumen (rundherum): Unterschied zwischen den Versionen
Zeile 29: | Zeile 29: | ||
<br style="clear:left; "> | <br style="clear:left; "> | ||
− | ===Version 2: Jetzt wird - nach eventuellem Aufräumen vorher - | + | ===Version 2: Jetzt wird - nach eventuellem Aufräumen vorher - ein Schwimmbad gebaut=== |
[[Datei: karolbad1.png |thumb|links|250px|Einfach nur alle Handgriffe kopieren]] | [[Datei: karolbad1.png |thumb|links|250px|Einfach nur alle Handgriffe kopieren]] |
Version vom 19. April 2021, 18:35 Uhr
>>> zurück zur Übersicht von Robot Karol
Inhaltsverzeichnis
- 1 Version 1: Aufräumen rundherum
- 2 Version 2: Jetzt wird - nach eventuellem Aufräumen vorher - ein Schwimmbad gebaut
- 3 Version 2: Mit Wiederholungen alles einfacher, flexibler und übersichtlicher gestalten
- 4 Version 3: Wiederholungen an veränderte Bedingungen anpassen + Mit Anweisungen Karol zur Selbstständigkeit erziehen
- 5 Version 4: Ein beliebig hohes Schwimmbad in einem beliebig großen Raum bauen (lassen)...
Version 1: Aufräumen rundherum
Beim Bauen der Schwimmbäder haben wir schon gesehen: Wir wollen, dass unser Roboter Karol ja möglichst intelligent wird. Er sollte im Kapitel 1 (Version 3) sich auf unterschiedliche Raumgrößen selber einstellen können und entscheiden, wie er sich an die neuen Umstände richtig anpasst.
Im wirklichen Leben (denken wir an das autonome Fahren) kommen noch viel mehr Unwägbarkeiten dazwischen. Ein anderes Auto fährt uns in die Parade! Unerwartete Hindernisse stehen im Weg ...
Karol soll trotzdem sein Schwimmbad bauen. Lassen wir für's Erste mal Ziegelsteine im Weg liegen. Dann kann Karol ja nicht einfach draufziegeln! Wir erwarten, dass Karol die Hindernisse zuerst aus dem Weg räumt und dann erst zu bauen beginnt. Das Bewegen in einer schlampigen Welt, in der wir uns bewegen können und aufräumen müssen, können wir in folgendem Code organisieren. Das ist schon fast sowas, wie eine Programmbibliothek.
Karol kennt jetzt: GeheBisZurWand, GeheRundHerum, Räume, RäumeBisZurWand, RäumeRundHerum
5 neue Befehle, die Karol versteht. Wir werden für eine bestimmte Aufgabe nicht immer alle Befehle benutzen, aber laden sie trotzdem immer als unseren Sprachschatz mit herein. Im Hauptprogramm können wir dann einfach immer benutzen, was grade anfällt:
Tipp: Standardmäßig lädt das Programm Aufräumen_1.kdp auch die Welt Aufräumen_1.kdw ins Programm. Da liegen nur einzelne Ziegel herum. Karol wird damit fertig. Aber probier' mal Aufräumen_1a.kdw ins Programm zu laden (Welt >>> Öffne Welt). Da liegen ganze Müllstapel rum. Aber auch damit wird Karol fertig!
Anweisung GeheBisZurWand solange NichtIstWand tue Schritt *solange *Anweisung Anweisung GeheRundHerum wiederhole 4 mal GeheBisZurWand LinksDrehen *wiederhole *Anweisung Anweisung Räume solange IstZiegel tue Aufheben *solange *Anweisung Anweisung RäumeBisZurWand solange NichtIstWand tue Räume Schritt *solange *Anweisung Anweisung RäumeRundHerum wiederhole 4 mal RäumeBisZurWand LinksDrehen *wiederhole *Anweisung
RäumeRundherum
Jetzt geht's ans's Bauen! :-)
Version 2: Jetzt wird - nach eventuellem Aufräumen vorher - ein Schwimmbad gebaut
Ihr seht: Es sind nur zwei zusätzliche Anweisungen aus Kapitel 1 nötig und unser Karol kann jetzt schon:
Tipp: Probier' mal, den ganzen Textblock des Programms unten nochmal 5x zu kopieren, dann baut Karol ein 5 Reihen hohes Schwimmbad!
Aber: Du sagst ja Deinem Lehrling auch nicht 100x "Gehe einen Schritt!" (eher sagst Du genervt, "Das hab ich Dir doch schon 100x gesagt". Sondern Du sagst, "Gehe 100 Schritte!" Kann man Karol auch sagen, dass er etwas 100x machen soll?
Anweisung GeheBisZurWand solange NichtIstWand tue Schritt *solange *Anweisung Anweisung GeheRundHerum wiederhole 4 mal GeheBisZurWand LinksDrehen *wiederhole *Anweisung Anweisung Räume solange IstZiegel tue Aufheben *solange *Anweisung Anweisung RäumeBisZurWand solange NichtIstWand tue Räume Schritt *solange *Anweisung Anweisung RäumeRundHerum wiederhole 4 mal RäumeBisZurWand LinksDrehen *wiederhole *Anweisung Anweisung ZiegleBisZurWand solange NichtIstWand tue Hinlegen Schritt *solange *Anweisung Anweisung ZiegleRundherum wiederhole 4 mal ZiegleBisZurWand LinksDrehen *wiederhole *Anweisung
RäumeRundherum wiederhole 2 mal ZiegleRundHerum *wiederhole
Version 2: Mit Wiederholungen alles einfacher, flexibler und übersichtlicher gestalten
Sieh' Dir mal das Programm unten genau an! Es hat dieselbe Wirkung, wie der "irre" Befehlstext oben. Ist er nicht 10x einfacher zu verstehen, 10x übersichtlicher? Du kannst offensichtlich auch Befehle hintereinander schreiben statt nur immer untereinander. Dadurch werden auch Sinn-zusammenhängende "Codeschnipsel" leichter erkennbar.
Außerdem musst Du nur eine Zahl ändern, wenn Karol die Strecke nicht 4x sondern vielleicht 10x oder 200x gehen und ziegeln soll.
Aber: Karol geht immer stur 4x nach vorne, Kann also nur 5x5 Schwimmbäder bauen. Wenn man aber vorher nicht weiß, wie groß das Grundstück des Kunden ist, sollte man sagen können: Gehe und ziegle sooft wie nötig - also bis zur gegenüber liegenden Wand ...!!!
wiederhole 4 mal Hinlegen Schritt Hinlegen Schritt Hinlegen Schritt Hinlegen Schritt LinksDrehen *wiederhole
Version 3: Wiederholungen an veränderte Bedingungen anpassen + Mit Anweisungen Karol zur Selbstständigkeit erziehen
Karol kann mit Bedingungen die Umgebung abfragen. Zum Beispiel gibt es die Bedingung IstWand. Schreibt man diesen Ausdruck im Programmtext, dann schaut Karol, ob vor ihm eine Wand ist. Die Bedingung NichtIstWand schaut, ob vor ihm keine Wand - also frei ist.
Die Wiederholung:
solange NichtIstWand tue Schritt *solange
wiederholt dann den Befehl Schritt, solange vor ihm frei ist! - Bingo! :-)
Nicht alles immer wieder sagen - Anweisungen definieren:
Man sollte Karol nicht immer wieder anschaffen müssen, was es heißt, bis zur Wand zu gehen. Wir lernen ihm einmal, wie das geht, bis zur Wand zu gehen, wir erstellen sozusagen einen eigenen neuen Befehl:
Anweisung GeheBisZurWand solange NichtIstWand tue Schritt *solange *Anweisung
Und schon weiß Karol, was es heißt: GeheBisZurWand. Ab da kann man den neuen Befehl benutzen, um Karol immer neue Befehlte zu erteilen.
Anweisung GeheRundherum wiederhole 4 mal GeheBisZurWand LinksDrehen *wiederhole *Anweisung
Am Ende müssen wir Karol nur noch sagen: GeheRundherum
Das komplette Programm lautet dann:
Anweisung GeheBisZurWand solange NichtIstWand tue Schritt *solange *Anweisung
Anweisung GeheRundherum wiederhole 4 mal GeheBisZurWand LinksDrehen *wiederhole *Anweisung
GeheRundherum
Aber: Karol baut ja noch nix ...
Aber: Karol muss ja nur noch einen Stein ablegen, bevor er in der Anweisung GehBisZurWand weitergeht ...
Version 4: Ein beliebig hohes Schwimmbad in einem beliebig großen Raum bauen (lassen)...
Anweisung ZiegleBisZurWand solange NichtIstWand tue Hinlegen Schritt *solange *Anweisung
Anweisung ZiegleRundherum wiederhole 4 mal ZiegleBisZurWand LinksDrehen *wiederhole *Anweisung
//Hauptprogramm wiederhole 5 mal ZiegleRundherum *wiederhole