Robot Karol: Aufräumen (rundherum): Unterschied zwischen den Versionen

Aus MINT.lentner.net
Zur Navigation springen Zur Suche springen
Zeile 59: Zeile 59:
 
Man sieht schön wie praktisch übersichtliche Bibliotheken sind!
 
Man sieht schön wie praktisch übersichtliche Bibliotheken sind!
  
Wir brauchen nur in der Anweisung '''Räume''' statt nur Aufheben, Aufheben und links ablegen, alles Andere bleibt gleich, denn jede andere Tätigkeit benutzt ja unser Räume (oder alles, was sonst noch Räume nutzt). Würden wir das Aufheben in allen Anweisungen immer wieder '''im Orginal''' nutzen, müssten wir das '''Aufheben''' an jeder Stelle ausbessern!
+
Wir brauchen nur '''einmal''' in der Anweisung '''Räume''' den Befehl ''Aufheben'' durch die Passage ''Aufheben und links ablegen'' ersetzen. Alles Andere bleibt gleich, denn jede andere Tätigkeit benutzt ja unseren Befehl '''Räume''' (oder andere Anweisungen, was selber wiederum '''Räume''' nutzen). Würden wir das Aufheben in allen Anweisungen immer wieder '''im Orginal''' nutzen, müssten wir das '''Aufheben''' an jeder Stelle ausbessern!
  
 
<br style="clear:left; ">
 
<br style="clear:left; ">
Zeile 65: Zeile 65:
 
  Anweisung GeheBisZurWand solange NichtIstWand tue Schritt *solange *Anweisung
 
  Anweisung GeheBisZurWand solange NichtIstWand tue Schritt *solange *Anweisung
 
  Anweisung GeheRundHerum wiederhole 4 mal GeheBisZurWand LinksDrehen *wiederhole *Anweisung
 
  Anweisung GeheRundHerum wiederhole 4 mal GeheBisZurWand LinksDrehen *wiederhole *Anweisung
  Anweisung Räume solange IstZiegel tue Aufheben *solange *Anweisung
+
  Anweisung Räume  
 +
    //Aufheben und links ablegen
 +
    solange IstZiegel tue Aufheben *solange  
 +
*Anweisung
 
  Anweisung RäumeBisZurWand solange NichtIstWand tue Räume Schritt *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 RäumeRundHerum wiederhole 4 mal RäumeBisZurWand LinksDrehen *wiederhole *Anweisung

Version vom 19. April 2021, 20:55 Uhr

>>> zurück zur Übersicht von Robot Karol


Version 1: Aufräumen rundherum

Rundherum Aufräumen

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

Erst Aufräumen -
dann Schwimmbad bauen!

Ihr seht: Es sind nur zwei zusätzliche Anweisungen aus Kapitel 1 nötig und unser Karol kann jetzt schon:
GeheBisZurWand, GeheRundHerum, Räume, RäumeBisZurWand, RäumeRundHerum, ZiegleBisZurWand, ZiegleRundherum


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

Aber: Ist es nicht unrealistisch, dass Karol all die Steine tragen kann? Eventuell bekommst Du sogar Fehlermeldungen, dass er das nicht kann. Das kannst Du unter Einstellungen >>> Karol einstellen: Ob er beliebig viel tragen kann oder ob er eine Maximalzahl an Ziegeln hat, jenseits derer ihn das Schmalz verlässt! Also ...

In der nächsten Version legen wir die Ziegel einfach links ab, dann muss er lediglich einen Ziegel immer schleppen. Das wird er ja wohl können! ...


Version 3: Aufräumen und Bauen - Nicht schleppen sondern Steine links ablegen

Erst Aufräumen -
dann Schwimmbad bauen!

Man sieht schön wie praktisch übersichtliche Bibliotheken sind!

Wir brauchen nur einmal in der Anweisung Räume den Befehl Aufheben durch die Passage Aufheben und links ablegen ersetzen. Alles Andere bleibt gleich, denn jede andere Tätigkeit benutzt ja unseren Befehl Räume (oder andere Anweisungen, was selber wiederum Räume nutzen). Würden wir das Aufheben in allen Anweisungen immer wieder im Orginal nutzen, müssten wir das Aufheben an jeder Stelle ausbessern!


Anweisung GeheBisZurWand solange NichtIstWand tue Schritt *solange *Anweisung
Anweisung GeheRundHerum wiederhole 4 mal GeheBisZurWand LinksDrehen *wiederhole *Anweisung
Anweisung Räume 
   //Aufheben und links ablegen
   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

Aber: Ist es nicht unrealistisch, dass Karol all die Steine tragen kann? Eventuell bekommst Du sogar Fehlermeldungen, dass er das nicht kann. Das kannst Du unter Einstellungen >>> Karol einstellen: Ob er beliebig viel tragen kann oder ob er eine Maximalzahl an Ziegeln hat, jenseits derer ihn das Schmalz verlässt! Also ...

In der nächsten Version legen wir die Ziegel einfach links ab, dann muss er lediglich einen Ziegel immer schleppen. Das wird er ja wohl können! ...