Robot Karol: Ziegelstapel der Höhe nach sortieren: Unterschied zwischen den Versionen

Aus MINT.lentner.net
Zur Navigation springen Zur Suche springen
Zeile 19: Zeile 19:
 
Dann wandert aber nur der kleinste Stapel ganz nach Süden '''bei einem''' Durchlauf. Also muss er mehrmals an allen vorbei. Beim zweiten Durchlauf werden schon '''die beiden''' kleinsten Stapel im Süden in richtiger Folge stehen, u.s.w..  
 
Dann wandert aber nur der kleinste Stapel ganz nach Süden '''bei einem''' Durchlauf. Also muss er mehrmals an allen vorbei. Beim zweiten Durchlauf werden schon '''die beiden''' kleinsten Stapel im Süden in richtiger Folge stehen, u.s.w..  
  
Und auch, um zwei benachbarte Stapel zu vergleichen, muss karol Ziegel abtragen, bis einer der beiden Stapel leer ist.
+
Und auch, um zwei benachbarte Stapel zu vergleichen, muss Karol Ziegel abtragen, bis einer der beiden Stapel leer ist und dann sehen, was wo übrig bleibt, denn '''Karol kann keine Zahlen vergleichen'''.
 
 
Mit den Knöpfen unter Deinem Grafikfenster kannst Du natürlich per Hand alles bauen. Das kannst Du unter ''"Welt speichern"'' auch '''aufheben''' und durch ''Öffnen Welt'' auch '''jederzeit wieder herholen'''. Das macht man auch, um '''einmalig mal eine Spielwelt''' (z.B. Ein Level für ein Computerspiel) '''zu entwerfen'''.
 
 
 
Mit ''Welt direkt festlegen'' (vorher in 2D-Modus wechseln!) geht das auch ganz fix.
 
 
 
'''Aber Roboter programmiert man aus anderen Gründen:''' Du möchtest Anweisungen so geben, dass Karol selber die Dinge baut - und zwar so baut, wie Du willst.
 
 
 
Stell' Dir vor, der Roboter Karol ist Dein Lehrjunge und '''Du lernst ihm, das Schwimmbad zu bauen'''.
 
 
 
  
 +
==2. Einfache neue Bewegungsanweisungen==
 
<br style="clear:left; ">
 
<br style="clear:left; ">
  
 
===Version 1: Gib Karol Deine Anweisungen im Anweisungsfenster links===
 
===Version 1: Gib Karol Deine Anweisungen im Anweisungsfenster links===
  
[[Datei: karolbad1.png |thumb|links|250px|Einfach nur alle Handgriffe kopieren]]
 
 
Im Programmierfenster links kannst Du Karol Anweisungen geben. Bist Du schnell im Schreiben, dann kannst Du einfach '''Schritt''' schreiben, '''LinksDrehen''', u.s.w. und ein Knopfdruck auf den ''Playbutton'' startet Karol. Karol baut jetzt für Dich nach Deinen Anweisungen. Du kannst auch mit der ''rechten Maustaste'' Befehle auswählen und einfügen, ohne sie zu schreiben.
 
 
Jetzt kannst Du immer wieder ''starten'' und Karol bei der ''selbstständigen Arbeit'' zusehen.
 
 
Mit den '''Short-Cuts <Strg>+<X>, <Strg>+<C> und <Strg>+<V>''' kannst Du ganze Textblöcke einfach kopieren und sparst Dir viel Schreibarbeit.
 
 
'''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?
 
 
<br style="clear:left; ">
 
  
 
  //Westseite
 
  //Westseite

Version vom 18. April 2021, 01:09 Uhr

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

unsortierte Reihe
sortierte Reihe


Es gehört zu den wichtigsten und am häufigsten gestellten Aufgaben, irgendwelche Objekte zu sortieren. Da man oft große Datenmassen sortieren muss, ist es auch äußerst wichtig, möglichst schnelle Sortiermethoden zu entwickeln. Dabei ist für die Geschwindigkeit natürlich entscheidend, was der Sortierer alles kann. Und da sind wir beim Knackpunkt.

Karol kann recht wenig.

  1. Karol kann sich zum Beispiel nichts merken (alles, was er früher schon einmal angeschaut hat, muss er immer wieder anschauen)
  2. Karol kennt keine Zahlen, kann keine Zahlen vergleichen.
  3. Karol kennt nur seine unmittelbare Nachbarschaft.

... und so wird eine einfache Sortieraufgabe zu einer knackige Sache!

1. Sortieridee

Wenn Karol an der unsortierten Ziegelstapelreihe (von rechts nach links) vorbei läuft, kann er nur benachbarte Stapelhöhen vergleichen. Karol sieht nicht - wie Du - "auf einen Blick" den kleinsten Stapel! Also wird er an der Stapelreihe vorbeigehen und immer nur benachbarte Stapel richten, also vertauschen, wenn sie in falscher Ordnung stehen.

Dann wandert aber nur der kleinste Stapel ganz nach Süden bei einem Durchlauf. Also muss er mehrmals an allen vorbei. Beim zweiten Durchlauf werden schon die beiden kleinsten Stapel im Süden in richtiger Folge stehen, u.s.w..

Und auch, um zwei benachbarte Stapel zu vergleichen, muss Karol Ziegel abtragen, bis einer der beiden Stapel leer ist und dann sehen, was wo übrig bleibt, denn Karol kann keine Zahlen vergleichen.

2. Einfache neue Bewegungsanweisungen


Version 1: Gib Karol Deine Anweisungen im Anweisungsfenster links

//Westseite
Hinlegen
Schritt
Hinlegen
Schritt
Hinlegen
Schritt
Hinlegen
Schritt
LinksDrehen
//Südseite
Hinlegen
Schritt
Hinlegen
Schritt
Hinlegen
Schritt
Hinlegen
Schritt
LinksDrehen
//Ostseite
Hinlegen
Schritt
Hinlegen
Schritt
Hinlegen
Schritt
Hinlegen
Schritt
LinksDrehen
//Nordseite
Hinlegen
Schritt
Hinlegen
Schritt
Hinlegen
Schritt
Hinlegen
Schritt
LinksDrehen


Version 2: Mit Wiederholungen alles einfacher, flexibler und übersichtlicher gestalten

Mit Wiederholungen alles einfacher, flexibler und übersichtlicher gestalten
Wie kann ich Karol lernen, dass er sich an die Raumgröße anpasst?

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