Programmieren lernen mit Robot Karol: Unterschied zwischen den Versionen

Aus ComeniusWiki
 
(14 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 4: Zeile 4:
{|
{|
|width=800px|
|width=800px|
Robot Karol ist eine Programmierumgebung mit einer Programmiersprache, die  zum Erlernen des Programmierens und zur Einführung in die Algorithmik in der Schule gedacht ist. Das Programm ist Freeware und kann über den Link [http://www.schule.bayern.de/karol/download.htm Karol] heruntergeladen werden.
Robot Karol ist eine Programmierumgebung mit einer Programmiersprache, die  zum Erlernen des Programmierens und zur Einführung in die Algorithmik in der Schule gedacht ist. Das Programm ist Freeware und kann über den Link [https://www.mebis.bayern.de/infoportal/empfehlung/robot-karol/ Karol] heruntergeladen werden (Kurzanweisung mit Downloadmöglichkeit (zip-Datei) auf der letzten Seite).
|width=20px|
|width=20px|
|width=300px |  
|width=300px |  
Zeile 95: Zeile 95:
|width=300px |  
|width=300px |  
|}
|}


== Erste Programme ==
== Erste Programme ==
Zeile 418: Zeile 416:
</pre>
</pre>
Wir übergeben dabei in der Klammer hinter dem Methodenaufruf die Anzahl der Wiederholungen. Neben ''Schritt'' und ''Hinlegen'' kann man auch ''Aufheben'' mit einem Parameterwert verwenden.
Wir übergeben dabei in der Klammer hinter dem Methodenaufruf die Anzahl der Wiederholungen. Neben ''Schritt'' und ''Hinlegen'' kann man auch ''Aufheben'' mit einem Parameterwert verwenden.
Weiterhin ist es mit Robot Karol (ab Version 3.0) möglich, den Methoden Hinlegen und MarkeSetzen eine Farbe (rot, gelb, blau und grün) zu übergeben.<br>
Beispiel:
<pre>
Hinlegen(blau)
MarkeSetzen(grün)
</pre>




Zeile 656: Zeile 661:
   Schritt
   Schritt
   LinksDrehen
   LinksDrehen
*wiederhole
MarkeSetzen
</pre>
Noch etwas eleganter ist folgende Lösung. Sie berücksichtigt, dass man die Lösung für die erste Diagonale wiederverwenden kann.
<pre>
Anweisung Diagonale
  wiederhole 8 mal
      MarkeSetzen
      Schritt
      Linksdrehen
      Schritt
      RechtsDrehen
  *wiederhole
*Anweisung
Anweisung Bahn
  wiederhole 8 mal
      Schritt
  *wiederhole
*Anweisung
Programm
  Diagonale
  MarkeSetzen
  LinksDrehen
  LinksDrehen
  Bahn
  LinksDrehen
  Diagonale
  MarkeSetzen
  LinksDrehen
*Programm
</pre>
</popup>
5. In einer Welt der Größe 11x11 soll Karol folgendes Muster erzeugen. Verwende dabei eine selbstdefinierte Anweisung und eine Wiederholungsanweisung.
[[Datei:KarolStufe.JPG]]
<div style="margin-bottom:25px;">
<popup name="Lösungsvorschlag">
<pre>
Anweisung Stufe
MarkeSetzen
Schritt
MarkeSetzen
Schritt
*Anweisung
wiederhole 5 mal
LinksDrehen
Stufe
RechtsDrehen
Stufe
*wiederhole
*wiederhole


Zeile 778: Zeile 843:
</pre>
</pre>


Noch etwas eleganter ist folgende Lösung. Sie berücksichtigt, dass man die Lösung für die erste Diagonale wiederverwenden kann.
<pre>
Anweisung Diagonale
  wiederhole 8 mal
      MarkeSetzen
      Schritt
      Linksdrehen
      Schritt
      RechtsDrehen
  *wiederhole
*Anweisung
Anweisung Bahn
  wiederhole 8 mal
      Schritt
  *wiederhole
*Anweisung
Programm
  Diagonale
  MarkeSetzen
  LinksDrehen
  LinksDrehen
  Bahn
  LinksDrehen
  Diagonale
  MarkeSetzen
  LinksDrehen
*Programm
</pre>
</popup>
</popup>
</div>
</div>
Zeile 908: Zeile 940:
<div style="margin-bottom:25px;">
<div style="margin-bottom:25px;">
<popup name="Lösungsvorschlag">
<popup name="Lösungsvorschlag">
<pre>
wiederhole solange nichtIstWand
wiederhole solange nichtIstWand
   MarkeSetzen
   MarkeSetzen
Zeile 936: Zeile 969:


MarkeSetzen
MarkeSetzen
</pre>
Alternative (bessere) Lösung
<pre>
Anweisung Diagonale
wiederhole solange nichtIstWand
  MarkeSetzen
  Schritt
  Linksdrehen
  Schritt
  RechtsDrehen
  MarkeSetzen
*wiederhole
*Anweisung
Diagonale
LinksDrehen
LinksDrehen
wiederhole solange nichtIstWand
  Schritt
*wiederhole
LinksDrehen
Diagonale
</pre>
</popup>
</popup>
</div>
</div>
Zeile 1.072: Zeile 1.133:


a) Karol hat eine Reihe von Ziegelsteinen vor sich. Dort wo ein Stein liegt, soll er ihn wegnehmen, dort wo keiner liegt, soll er einen Stein hinlegen.<br>
a) Karol hat eine Reihe von Ziegelsteinen vor sich. Dort wo ein Stein liegt, soll er ihn wegnehmen, dort wo keiner liegt, soll er einen Stein hinlegen.<br>
b) Nun soll Karol das Ganze 4 mal wiederholen, wobei er jeweils an der Wand entlang zurückgehen und zu seinem Ausgangspunkt zurückkehren soll.
b) wie a), nur dass nun eine beliebige Zahl von Ziegeln übereinander liegen kann.<br>
c) Nun soll Karol das Ganze 4 mal wiederholen, wobei er jeweils an der Wand entlang zurückgehen und zu seinem Ausgangspunkt zurückkehren soll.


<div style="margin-bottom:25px;">
<div style="margin-bottom:25px;">
Zeile 1.090: Zeile 1.152:


b)
b)
<pre>
wiederhole solange nichtIstWand
wenn istZiegel dann
wiederhole solange IstZiegel
Aufheben
*wiederhole
Schritt
sonst
Hinlegen
Schritt
*wenn
*wiederhole
</pre>
c)
<pre>
<pre>
wiederhole 4 mal
wiederhole 4 mal
Zeile 1.104: Zeile 1.181:
*wiederhole
*wiederhole


RechtsDrehen
RechtsDrehen
RechtsDrehen
wiederhole solange nichtIstMarke
wiederhole solange nichtIstMarke
Zeile 1.109: Zeile 1.187:
       Schritt
       Schritt
   sonst
   sonst
      RechtsDrehen
       RechtsDrehen
       RechtsDrehen
   *wenn
   *wenn
*wiederhole
*wiederhole


RechtsDrehen
RechtsDrehen
RechtsDrehen
MarkeLöschen
MarkeLöschen
Zeile 1.365: Zeile 1.445:


[[Lösungsvorschlag Karol Übungsaufgabe 9|Lösungsvorschlag]]
[[Lösungsvorschlag Karol Übungsaufgabe 9|Lösungsvorschlag]]
'''Aufgabe 10'''
Karol soll eine Pyramide in einer Welt mit maximaler Kantenlänge 20x20 bauen und mit Marken belegen.
[[Datei:Karol_A10.PNG]]
[[Lösungsvorschlag Karol Übungsaufgabe 10|Lösungsvorschlag]]
'''Aufgabe 11'''
Karol soll wie im Video dargestellt einen Kolben imitieren. Die Größe der Welt ist 4x4x10. In den Einstellungen soll Karol eine sehr geringe Ablaufverzögerung erhalten.
<div style="margin-left:100px; margin-top:30px; margin-bottom:30px">
{{#ev:youtube|D0sn-j66Vd8}}
</div>
[[Lösungsvorschlag Karol Übungsaufgabe 11|Lösungsvorschlag]]

Aktuelle Version vom 19. März 2020, 07:04 Uhr

Das Programm

Robot Karol ist eine Programmierumgebung mit einer Programmiersprache, die zum Erlernen des Programmierens und zur Einführung in die Algorithmik in der Schule gedacht ist. Das Programm ist Freeware und kann über den Link Karol heruntergeladen werden (Kurzanweisung mit Downloadmöglichkeit (zip-Datei) auf der letzten Seite).


Die Oberfläche

Die Programmoberfläche von Karol ist zweigeteilt: Auf der linken Seiten befindet sich der sogenannte Editor, in dem die Programme geschrieben werden. Auf der rechten Seite ist Karols Welt, in der das verfasste Programm ausgeführt werden kann.

Objekte

In Karos Welt gibt es einige Objekte, die von Karo verteilt und wieder eingesammelt werden können.


  • Ziegel
Karol kann Ziegel vor sich hinlegen. Sollte vor ihm bereits ein Ziegel liegen, wird der nächste Ziegel auf den anderen drauf gelegt.
Wenn Karol vor einem Ziegel steht und einen Schritt macht, steigt er auf den Ziegel. Allerdings kann er nicht über 2 Ziegel auf einmal steigen.
Das heißt um auf einen 2er Ziegelturm zu kommen, muss er über einen davorliegenden einzelnen Ziegelstein "klettern".
  • Marke
Marken werden direkt auf das Feld unter Karol gelegt. Sie dienen zur Orientierung und haben keinen Einfluss auf Karols
Bewegungsmöglichkeiten; er kann einfach darüber laufen. Im Gegensatz zu Ziegeln können nicht mehrere Marken übereinander gestapelt werden.
  • Quader
Quader versperren Karol den Weg. Er kann nicht über sie gehen. Außerdem lassen sie sich nicht stapeln.


ObjekteKarol.png

Die Bewegungmöglichkeiten von Karol

Die Bewegungsmöglichkeiten von Karol sind recht übersichtlich. Mit den angegebenen Anweisungen kann das entsprechende Verhalten gesteuert werden.


Verhalten Anweisung
ein Schritt vorwärts Schritt
eine Vierteldrehung nach links LinksDrehen
eine Vierteldrehung nach rechts RechtsDrehen
einen Ziegel vor sich hinlegen Hinlegen
einen Ziegel vor sich entfernen Aufheben
eine gelbe Marke unter sich legen MarkeSetzen
eine gelbe Marke unter sich entfernen MarkeLöschen


Karols Welt

Auf der rechten Seite der Karoloberfläche befindet sich Karols Welt. Durch Aufruf von Welt - Neue Welt kann die gewünschte Ausdehnung der neuen Welt festgelegt werden. Wenn die Ausgangsposition vom Standardstartpunkt (1,1) abweicht oder Hindernisse zur von Karol zu lösenden Welt gehören, dann empfiehlt es sich, die Welt über Welt - Welt speichern mit der Endung .kdw abzuspeichern. KarolsWelt.JPG

Erste Programme

Das Programm "Robot Karol" ermöglicht es uns, dem Roboter, der sich in seiner Welt bewegen und Aufgaben erfüllen kann, Anweisungen zu geben.

Durch eine Anweisung (z.B. "Schritt") sendet man eine Botschaft an ein Objekt (z.B. Karol), das darauf mit der zugehörigen Methode reagiert (z.B. Schritt() ).



Aufgabe
Karol soll eine U-Form abschreiten

Lösung

umgangssprachlich formuliert Karolprogramm
  • 2 mal vorwärts
  • Linksum
  • 2 mal vorwärts
  • Linksum
  • 2 mal vorwärts

Schritt
Schritt
LinksDrehen
Schritt
Schritt
LinksDrehen
Schritt
Schritt


Eine solche Folge von Anweisungen bezeichnet man als Algorithmus.

Ein Algorithmus ist eine endliche Folge aus eindeutigen und ausführbaren Anweisungen zur Lösung eines allgemeinen Problems.
Ein Programm ist ein Algorithmus, der in einer formalisierten Sprache abgefasst ist und maschinell ausgeführt werden kann.


Aufgaben:

1. Karol soll ein Rechteck ablaufen und am Ende wieder in der Ausgangsposition stehen.

<popup name="Lösungsvorschlag"> Schritt
Schritt
Schritt
LinksDrehen
Schritt
Schritt
Schritt
LinksDrehen
Schritt
Schritt
Schritt
LinksDrehen
Schritt
Schritt
Schritt
LinksDrehen
</popup>

2. Damit man besser erkennt, ob Karol auch ein „U“ durchläuft, soll er dabei Marken setzen. Es soll also eine „U-Form mit Markierungen“ gebildet werden.

<popup name="Lösungsvorschlag"> MarkeSetzen
Schritt
MarkeSetzen
Schritt
MarkeSetzen
Schritt
MarkeSetzen
Schritt
LinksDrehen
MarkeSetzen
Schritt
MarkeSetzen
Schritt
MarkeSetzen
Schritt
LinksDrehen
MarkeSetzen
Schritt
MarkeSetzen
Schritt
MarkeSetzen
Schritt
MarkeSetzen
Schritt
MarkeSetzen
</popup>

3. Karol soll vier Ziegel in einer Reihe nebeneinander legen.

<popup name="Lösungsvorschlag"> Hinlegen
LinksDrehen
Schritt
RechtsDrehen
Hinlegen
LinksDrehen
Schritt
RechtsDrehen
Hinlegen
LinksDrehen
Schritt
RechtsDrehen
Hinlegen
</popup>

Selbstdefinierte Methoden

Die Fähigkeiten von Karol können durch neue, zusätzliche Methoden erweitert werden. Diese selbstdefinierten Anweisungen müssen vorher vom Programmierer festgelegt werden. Neue Methoden beginnen stets mit dem Wort Anweisung und dann mit dem Bezeichner der Methode. Es folgt eine Sequenz von Anweisungen, die beim Aufruf der Methode abgearbeitet werden. Die Festlegung der Methode endet mit dem Schlüsselwort *Anweisung.

Beispiel 1: Neue Methode Umdrehen

Anweisung Umdrehen
  LinksDrehen
  LinksDrehen
*Anweisung


Aufgabe: Karol soll einen Schritt rückwärts gehen. (Die Lösung greift nun auf die Anweisung Umdrehen zu.)

Anweisung Umdrehen 
  LinksDrehen 
  LinksDrehen 
*Anweisung 

Programm 
  Umdrehen 
  Schritt 
  Umdrehen 
*Programm


Aufgaben

1. Bringe Karol mittels einer selbstdefinierten Anweisung bei, einen Riesenschritt auf einmal zu vollführen, der so groß wie drei normale Schritte ist.

<popup name="Lösungsvorschlag">

Anweisung Riesenschritt
  Schritt
  Schritt
  Schritt
*Anweisung

Programm
  Riesenschritt
*Programm

</popup>

2. Schreibe ein Karol-Programm, das ihn dazu bringt immer drei Schritte vorwärts und zwei zurück zu gehen. Nutze dabei die Anweisungen Umdrehen, SchrittZurueck, Riesenschritt und SillyWalk (= 3 vor, 2 zurück).

<popup name="Lösungsvorschlag">

Anweisung Umdrehen
LinksDrehen
LinksDrehen
*Anweisung

Anweisung SchrittZurueck
Umdrehen
Schritt
Umdrehen
*Anweisung

Anweisung Riesenschritt
  Schritt
  Schritt
  Schritt
*Anweisung

Anweisung SillyWalK
Riesenschritt
SchrittZurueck
SchrittZurueck
*Anweisung

Programm
SillyWalk
SillyWalk
SillyWalk
SillyWalk
*Programm

</popup>

3. Bringe Karol den Rösslsprung bei, wie ihn die Springerfigur beim Schach ausführt. Erstelle ein Programm, so dass Karol mehrere Rösslsprünge ausführt und nach jedem Sprung eine Marke setzt.

 Screenshot Roesselsprung.JPG

<popup name="Lösungsvorschlag"> Lösungsmöglichkeit 1: Man geht davon aus, dass man ausgehend von der Blickrichtung von Karol vier Methoden benötigt. Wenn Karol sich einmal um 180 Grad dreht, kann er dieselben vier Methoden nutzen.

Anweisung linksFlach
  LinksDrehen
  Schritt
  Schritt
  RechtsDrehen
  Schritt
  MarkeSetzen
*Anweisung

Anweisung linksSteil
  LinksDrehen
  Schritt
  RechtsDrehen
  Schritt
  Schritt
  MarkeSetzen
*Anweisung

Anweisung rechtsFlach
  RechtsDrehen
  Schritt
  Schritt
  LinksDrehen
  Schritt
  MarkeSetzen
*Anweisung

Anweisung rechtsSteil
  RechtsDrehen
  Schritt
  LinksDrehen
  Schritt
  Schritt
  MarkeSetzen
*Anweisung

Programm
  MarkeSetzen
  LinksFlach
  RechtsSteil
  LinksSteil
*Programm


Lösungsmöglichkeit 2: Man geht davon aus, dass Karol mit zwei Methoden auskommt, die er nach einer Drehung um 90 Grad wieder nutzen kann. Hier gibt es wiederum vier Möglichkeiten: Entweder rechtsSteil und rechtsFlach bzw. linksSteil und linksFlach , rechtsSteil und linksSteil oder linksFlach und rechtsFlach.

Anweisung linksFlach
  LinksDrehen
  Schritt
  Schritt
  RechtsDrehen
  Schritt
  MarkeSetzen
*Anweisung

Anweisung linksSteil
  LinksDrehen
  Schritt
  RechtsDrehen
  Schritt
  Schritt
  MarkeSetzen
*Anweisung

Programm
  MarkeSetzen
  LinksFlach
  rechtsDrehen
  LinksFlach
  linksDrehen
  LinksSteil
*Programm

</popup>


Parameter

Mit Hilfe eines Parameters oder Übergabewertes können wir Programme flexibler gestalten, ohne ganze Programmteile neu schreiben zu müssen. Beispielsweise können wir das Programm

Schritt
Schritt
Schritt
Hinlegen
Hinlegen
Hinlegen

kürzer schreiben als

Schritt(3)
Hinlegen(3)

Wir übergeben dabei in der Klammer hinter dem Methodenaufruf die Anzahl der Wiederholungen. Neben Schritt und Hinlegen kann man auch Aufheben mit einem Parameterwert verwenden.

Weiterhin ist es mit Robot Karol (ab Version 3.0) möglich, den Methoden Hinlegen und MarkeSetzen eine Farbe (rot, gelb, blau und grün) zu übergeben.
Beispiel:

Hinlegen(blau)
MarkeSetzen(grün)


Parameter können auch im Zusammenhang mit selbstdefinierten Anweisungen verwendet werden:

Anweisung Seite(X)
Schritt(X)
LinksDrehen
*Anweisung

Seite(5)
Seite(3)
Seite(5)
Seite(3)

Mit dieser Anweisung können wir Karol ein Rechteck beliebiger Größe bauen lassen, in diesem Fall ein Rechteck der Größe 3x5. Zu beachten ist, dass als Parameter in Anweisungen grundsätzlich X zu verwenden ist.


Aufgabe 1: Karol soll mit Hilfe von selbstdefinierten Anweisungen und Anweisungen mit Parameterwert eine Säulenhalle bauen.

Karol saeulenhalle.JPG

<popup name="Lösungsvorschlag">

Anweisung Säule
  Schritt
  LinksDrehen
  Hinlegen(6)
  RechtsDrehen
  Schritt
*Anweisung

Anweisung Seite
  Säule
  Säule
*Anweisung

Anweisung Kehre
  Schritt(2)
  LinksDrehen
*Anweisung

Programm
  Seite
  Kehre
  Seite
  Kehre
  Seite
  Kehre
  Seite
  Kehre
*Programm

Alternative Lösung:

Anweisung Seite
Schritt
LinksDrehen
Hinlegen(3)
RechtsDrehen
Schritt(2)
LinksDrehen
Hinlegen(6)
RechtsDrehen
Schritt(2)
LinksDrehen
Hinlegen(3)
RechtsDrehen
Schritt
LinksDrehen
*Anweisung

Programm
Seite
Seite
Seite
Seite
*Programm

</popup>


Aufgabe 2: Karol soll mit Hilfe einer selbstdefinierten Anweisung mit Parameterwert eine Treppe bauen.

Karol treppe.JPG

<popup name="Lösungsvorschlag">

Anweisung Stufe(X)
  Hinlegen(X)
  Schritt
*Anweisung

Programm
  LinksDrehen
  Stufe(1)
  Stufe(2)
  Stufe(3)
  Stufe(4)
  Stufe(3)
  Stufe(2)
  Stufe(1)
  Schritt
*Programm

</popup>

Wiederholung mit fester Anzahl

Problem: Karol soll vier Ziegel in einer Reihe hintereinander legen.
Erste Lösung durch sequentielles Anschreiben der Anweisungen:

Hinlegen
Schritt
Hinlegen
Schritt
Hinlegen
Schritt
Hinlegen
Schritt

Bei größerer Zahl von Wiederholungen erweist sich das Ganze als ungünstig. Bessere Lösung: Wiederholung mit fester Anzahl


Wiederholung mit fester Anzahl
Die Anweisungen im Wiederholungsteil werden nacheinander mehrfach ausgeführt (entsprechend der angegebenen Anzahl).
Sprache Karol:

wiederhole n mal 
   Anweisungen 
*wiederhole

Die günstigere Lösung für unsere Aufgabe sieht dann wie folgt aus:

wiederhole 4 mal
   hinlegen
   schritt
*wiederhole


Aufgaben

1. Karol soll mit Ziegeln ein Quadrat auslegen.

Screenshot Quadrat.JPG

<popup name="Lösungsvorschlag">

wiederhole 4 mal
   Hinlegen
   Schritt
   LinksDrehen
*wiederhole

</popup>

2. Die bereits bekannte Aufgabe Karol soll vier Ziegel nebeneinander legen. soll mit einer Wiederholungsanweisung gelöst werden.

Screenshot ZiegelNebeneinander.JPG

<popup name="Lösungsvorschlag">

wiederhole 4 mal
   Hinlegen
   LinksDrehen
   Schritt
   RechtsDrehen
*wiederhole

</popup>

3.In einer Welt der Größe 6x6 soll Karol mit Marken eine Diagonale erzeugen.

Screenshot Diagonale.JPG

<popup name="Lösungsvorschlag">

wiederhole 5 mal
   MarkeSetzen
   Schritt
   Linksdrehen
   Schritt
   RechtsDrehen
*wiederhole
MarkeSetzen

</popup>

4. In einer Welt der Größe 9x9 erzeugt Karol ein Kreuz aus Marken.

Screenshot kreuz.JPG

<popup name="Lösungsvorschlag">

wiederhole 8 mal
   MarkeSetzen
   Schritt
   Linksdrehen
   Schritt
   RechtsDrehen
*wiederhole

MarkeSetzen
LinksDrehen
LinksDrehen

wiederhole 8 mal
   Schritt
*wiederhole

LinksDrehen
LinksDrehen

wiederhole 8 mal
   MarkeSetzen
   Schritt
   Rechtsdrehen
   Schritt
   LinksDrehen
*wiederhole

MarkeSetzen

Noch etwas eleganter ist folgende Lösung. Sie berücksichtigt, dass man die Lösung für die erste Diagonale wiederverwenden kann.

Anweisung Diagonale
   wiederhole 8 mal
      MarkeSetzen
      Schritt
      Linksdrehen
      Schritt
      RechtsDrehen
   *wiederhole
*Anweisung


Anweisung Bahn
   wiederhole 8 mal
      Schritt
   *wiederhole
*Anweisung


Programm
   Diagonale
   MarkeSetzen
   LinksDrehen
   LinksDrehen
   Bahn
   LinksDrehen
   Diagonale
   MarkeSetzen
   LinksDrehen
*Programm

</popup>


5. In einer Welt der Größe 11x11 soll Karol folgendes Muster erzeugen. Verwende dabei eine selbstdefinierte Anweisung und eine Wiederholungsanweisung.

KarolStufe.JPG

<popup name="Lösungsvorschlag">

Anweisung Stufe
MarkeSetzen
Schritt
MarkeSetzen
Schritt
*Anweisung

wiederhole 5 mal
LinksDrehen
Stufe
RechtsDrehen
Stufe
*wiederhole

MarkeSetzen

</popup>

Geschachtelte Wiederholung

Problem: Karol soll einen Quadratrand auslegen.

Screenshot Quadratrand.JPG

Lösung

Der Quadratrand besteht aus vier Seiten (äußere Schleife). Jede Seite besteht wiederum aus drei Ziegeln (innere Schleife). Nach jeder Seite muss sich Karol links drehen.

Karol Quadratrand lsg.JPG


Aufgaben

1. Karol soll in einer Welt der Größe 9x9 eine hübsche Gartenmauer bauen.

Karol Gartenmauer.JPG

<popup name="Lösungsvorschlag">

wiederhole 4 mal
   wiederhole 4 mal
      Hinlegen
      Schritt
      MarkeSetzen
      Schritt
      MarkeSetzen
   *wiederhole
   LinksDrehen
*wiederhole
  

</popup>

2. Die Aufgabe 1 im Kapitel "Parameter" (Säulenhalle) soll allein mit Wiederholungsanweisungen gelöst werden.

<popup name="Lösungsvorschlag">

wiederhole 4 mal
   wiederhole 2 mal
      Schritt
      LinksDrehen
      wiederhole 6 mal
         Hinlegen
      *wiederhole
      rechtsdrehen
      Schritt
   *wiederhole
   Schritt
   Schritt
   LinksDrehen
*wiederhole

</popup>


3. Karol soll eine Welt [8x8] vollständig mit Kacheln auslegen. Schreibe dazu ein Programm, das Anweisungen zur Lösung von Teilproblemen und geschachtelte Wiederholungen enthält. Überlege dir zuerst eine Strategie zur Lösung der Aufgabe, bei der du sie in solche Teilprobleme zerlegst.

<popup name="Lösungsvorschlag"> Lösungsstrategie
Es empfiehlt sich, das Problem in folgende Teilprobleme zu zerlegen:

  • Karol geht immer ganze Bahnen von Wand zu Wand.
  • Am Ende der Bahn muss er sich einmal links zur nächsten Bahn orientieren und nach der nächsten Bahn nach rechts. Dann ist die Problemstellung wieder dieselbe wie am Anfang.
  • Deshalb kann das Kacheln der Welt aus vier Doppelbahnen zusammengesetzt werden.


Anweisung Bahn
   wiederhole 7 mal
      MarkeSetzen
      Schritt
   *wiederhole
*Anweisung

Anweisung Links
   MarkeSetzen
   LinksDrehen
   Schritt
   LinksDrehen
*Anweisung

Anweisung Rechts
   MarkeSetzen
   RechtsDrehen
   Schritt
   RechtsDrehen
*Anweisung

Programm
   wiederhole 4 mal
      Bahn
      Links
      Bahn
      Rechts
   *wiederhole
*Programm

</popup>

Wiederholung mit Anfangsbedingung

Bestimmte Problemstellungen lassen sich mit den bisherigen Methoden und Kontrollstrukturen nicht zufrieden stellend bearbeiten. Die Lösung der Aufgabe „Gehe bis zur nächsten Wand“ hängt von der Startposition Karols ab. Um unabhängig von der Ausgangsstellung zu sein, muss Karol eine Methode kennen, die eine Anfrage, ob er noch weitergehen kann, mit WAHR oder FALSCH beantwortet. Der Aufruf derartiger Methoden wird mit „Bedingung“ umschrieben.


Karol hat auch Methoden, mit denen er auf eine Anfrage mit WAHR oder FALSCH antwortet. Der Aufruf einer Methode dieser Art heißt Bedingung.


Von Karol vorgegebene Bedingungen sind: IstWand, NichtIstWand, IstZiegel, NichtIstZiegel, IstMarke, NichtIstMarke, IstSüden, IstNorden, IstOsten, IstWesten.

Bei der Bedingung IstZiegel ist auch ein Parameterwert möglich, d.h. man kann z.B. eine Anweisung nur dann durchführen lassen, wenn zwei Ziegel vor Karol liegen (wenn istZiegel(2) dann Anweisung)


Problem: Karol soll, solange er nicht an eine Wand anstößt, vorwärts gehen.


Er muss den Vorgang „Schritt“ solange wiederholen, bis er auf die Frage NichtIstWand mit WAHR antwortet, da man die Anzahl der möglichen Schritte nicht im Voraus kennt. Sie ist von der Ausgangsposition Karols abhängig.


Lösung: Wiederholung mit Anfangsbedingung

Die Anweisungen im Wiederholungsteil werden so oft wiederholt, solange die Bedingung WAHR ergibt. Die Überprüfung der Bedingung erfolgt am Anfang jeder Wiederholung.

Sprache Karol:

wiederhole solange Bedingung
   Anweisungen
*wiederhole

Aufgaben

1. Karol soll in einer rechteckigen Welt von einer Ecke aus genau einmal um die Welt herumlaufen und seine Strecke dabei mit Ziegeln belegen.

<popup name="Lösungsvorschlag">

wiederhole 4 mal

  wiederhole solange nichtIstWand
    hinlegen
    schritt
  *wiederhole
  
  linksdrehen
  
*wiederhole

</popup>

2. Wie Aufgabe 1. Aber nun soll Karol an einem beliebigen Ort an der Wand starten.

<popup name="Lösungsvorschlag"> Hier kann man auf die Lösung von Aufgabe 1 zugreifen, aber am Ende muss die Lücke zum "Startziegel" noch gefüllt werden.

wiederhole 4 mal
   wiederhole solange nichtIstWand
      Hinlegen
      Schritt
   *wiederhole
   LinksDrehen
*wiederhole

wiederhole solange nichtIstZiegel
   Hinlegen
   Schritt
*wiederhole

</popup>

3. Karol soll die bereits bekannt Aufgabe Kreuz aus Marken (siehe oben) so lösen, dass er das Kreuz in beliebigen quadratischen Welten mit ungerader Kantenlänge erzeugen kann.

<popup name="Lösungsvorschlag">

wiederhole solange nichtIstWand
   MarkeSetzen
   Schritt
   Linksdrehen
   Schritt
   RechtsDrehen
*wiederhole

MarkeSetzen
LinksDrehen
LinksDrehen

wiederhole solange nichtIstWand
   Schritt
*wiederhole

LinksDrehen
LinksDrehen

wiederhole solange nichtIstWand
   MarkeSetzen
   Schritt
   Rechtsdrehen
   Schritt
   LinksDrehen
*wiederhole

MarkeSetzen

Alternative (bessere) Lösung

Anweisung Diagonale
wiederhole solange nichtIstWand
   MarkeSetzen
   Schritt
   Linksdrehen
   Schritt
   RechtsDrehen
   MarkeSetzen
*wiederhole
*Anweisung

Diagonale
LinksDrehen
LinksDrehen

wiederhole solange nichtIstWand
   Schritt
*wiederhole

LinksDrehen
Diagonale

</popup>

Zweiseitige bedingte Anweisung

Das Programm für die Lösung der Aufgabe "Karol soll von einem beliebigen Punkt an der Wand aus einmal an der Wand entlang genau eine Runde laufen und dabei seine Ziegel hinlegen", lässt sich dadurch vereinfachen, dass wir ihn bei jedem Schritt entscheiden lassen, was er als nächstes tut:
Solange er nicht an der Wand anstößt macht er jeweils einen Schritt. Stößt er an der Wand an dreht er sich nach links. Der Vorteil ist, dass wir nicht mehr anzugeben brauchen, wie oft Karol sich drehen muss, bis er seine Runde absolviert hat.

Bedingte Anweisung (zweiseitig):
In Abhängigkeit davon, ob die Bedingung erfüllt wird oder nicht, werden die Anweisungen1 bzw. die Anweisungen2 ausgeführt.

Sprache Karol:

wenn Bedingung dann
   Anweisungen1
sonst
   Anweisungen2
*wenn


Aufgaben

1. Das Beispielprogramm "Karol soll von einem beliebigen Punkt an der Wand aus einmal an der Wand entlang genau eine Runde laufen und dabei seine Ziegel hinlegen" soll in ein Programm mit einer bedingten Anweisung umgewandelt und dadurch vereinfacht werden.

<popup name="Lösungsvorschlag">

wiederhole solange nichtIstZiegel
   wenn nichtIstWand dann
      Hinlegen
      Schritt
   sonst
      LinksDrehen
   *wenn
*wiederhole

</popup>


2. Wie Aufgabe 1, nur dass Karol von einem beliebigen Feld in der Welt startet und auch wieder an seinen Ausgangspunkt zurückkehrt.
a) Lösung ohne Verwendung der bedingten Anweisung.
b) Lösung unter Verwendung der bedingten Anweisung.

<popup name="Lösungsvorschlag"> a)

//Ausgangspunkt kennzeichnen
MarkeSetzen

wiederhole solange nichtIstWand
      Schritt
*wiederhole

Linksdrehen

wiederhole 4 mal
   wiederhole solange nichtIstWand
      Hinlegen
      Schritt
   *wiederhole
   LinksDrehen
*wiederhole

wiederhole solange nichtIstZiegel
   Hinlegen
   Schritt
*wiederhole

LinksDrehen

wiederhole solange nichtIstMarke
      Schritt
*wiederhole

//Marke für den Startpunkt wieder entfernen
MarkeLöschen
LinksDrehen
LinksDrehen

b)

//Ausgangspunkt kennzeichnen
MarkeSetzen

wiederhole solange nichtIstWand
    wenn nichtIstWand dann
      Schritt
   sonst
      LinksDrehen
   *wenn
*wiederhole

wiederhole solange nichtIstZiegel
   wenn nichtIstWand dann
      Hinlegen
      Schritt
   sonst
      LinksDrehen
   *wenn
*wiederhole

LinksDrehen
wiederhole solange nichtIstMarke
      Schritt
*wiederhole

//Marke für den Startpunkt wieder entfernen
MarkeLöschen
LinksDrehen
LinksDrehen

</popup>

3.

a) Karol hat eine Reihe von Ziegelsteinen vor sich. Dort wo ein Stein liegt, soll er ihn wegnehmen, dort wo keiner liegt, soll er einen Stein hinlegen.
b) wie a), nur dass nun eine beliebige Zahl von Ziegeln übereinander liegen kann.
c) Nun soll Karol das Ganze 4 mal wiederholen, wobei er jeweils an der Wand entlang zurückgehen und zu seinem Ausgangspunkt zurückkehren soll.

<popup name="Lösungsvorschlag"> a)

wiederhole solange nichtIstWand
   wenn istZiegel dann
      Aufheben
      Schritt
   sonst
      Hinlegen
      Schritt
   *wenn
*wiederhole

b)

wiederhole solange nichtIstWand
wenn istZiegel dann
wiederhole solange IstZiegel
Aufheben
*wiederhole
Schritt
sonst
Hinlegen
Schritt
*wenn
*wiederhole

c)

wiederhole 4 mal
MarkeSetzen

wiederhole solange nichtIstWand
   wenn istZiegel dann
      Aufheben
      Schritt
   sonst
      Hinlegen
      Schritt
   *wenn
*wiederhole

RechtsDrehen
RechtsDrehen
wiederhole solange nichtIstMarke
   wenn nichtIstWand dann
      Schritt
   sonst
      RechtsDrehen
      RechtsDrehen
   *wenn
*wiederhole

RechtsDrehen
RechtsDrehen
MarkeLöschen
*wiederhole

</popup>

Einseitige bedingte Anweisung

Aufgabe:
Karol soll eine lückenhafte Ziegelreihe auffüllen, bis er an der Wand ankommt. Vor jedem Schritt muss er nur dann einen Ziegel legen, wenn vor ihm keiner liegt. Falls bereits ein Ziegel vor ihm liegt, geschieht nichts.

Bedingte Anweisung (einseitig): Wenn die Bedingung WAHR ergibt, werden die Anweisungen ausgeführt.

Sprache Karol:

wenn Bedingung dann
   Anweisungen
*wenn

Lösung der obigen Aufgabe:

wiederhole solange nicht IstWand
   wenn nicht IstZiegel dann
      Hinlegen
   *wenn
   Schritt
*wiederhole

Aufgaben

1. In einer Welt (9x8) sind 15 Marken beliebig verteilt. Karol soll von einem beliebigen Startpunkt ausgehend, alle Marken mit Ziegelsteinen belegen und dabei keine Marke vergessen. Teste das Programm mit verschiedenen Startpunkten von Karol.

<popup name="Lösungsvorschlag">

//Eine Anweisung um den Code zu verkürzen.
Anweisung Umdrehen
   LinksDrehen
   LinksDrehen
*Anweisung

//Um das Problem von einem beliebigen Startpunkt aus lösen zu können, muss sich 
//Karol erst einmal auf eine Startposition in der Ecke bringen.
Anweisung PositionEinnehmen
   wiederhole 2 mal
      wiederhole solange NichtIstWand
         Schritt
      *wiederhole
      LinksDrehen
   *wiederhole
*Anweisung

//Die Anweisung Test überprüft, ob eine Marke vorhanden ist.
//Wenn Karol dabei nicht vor der Wand steht, geht er einen Schritt weiter, 
//dreht sich um, legt einen Ziegel, dreht sich wieder um und macht weiter.
//Steht er vor der Wand, macht er einen Schritt zurück, legt den Ziegel, 
//stellt sich auf den Ziegel und macht dann weiter.
Anweisung Test
   wenn IstMarke dann
      wenn NichtIstWand dann
         Schritt
         Umdrehen
         Hinlegen
         Umdrehen
      sonst
         Umdrehen
         Schritt
         Umdrehen
         Hinlegen
         Schritt
     *wenn
   *wenn
*Anweisung


Anweisung Bahn
   Wiederhole solange NichtIstWand
      Test
      Schritt
      Test            //Lässt man hier den 2.Test aus, werden Marken vor der Wand ignoriert.
   *wiederhole
*Anweisung


Programm
   PositionEinnehmen
   Wiederhole 4 mal
      Bahn
      LinksDrehen
      Schritt
      LinksDrehen
      Bahn
      RechtsDrehen
      Schritt
      RechtsDrehen
    *wiederhole
    Bahn           //Karol läuft vier mal auf und ab und dann noch eine Bahn bis ans Ziel.
*Programm

</popup>


2. Karol soll von seinem üblichen Startpunkt eine Welt beliebiger Größe mit Marken kacheln und, wenn er damit fertig ist, das Programm mit dem Befehl beenden abbrechen. Es ist dazu eine Verschachtelung mehrerer bedingter Anweisungen nötig!

<popup name="Lösungsvorschlag">

MarkeSetzen
wiederhole solange nichtIstWand
Schritt
MarkeSetzen
wenn IstWand dann
  wenn IstSüden dann
    LinksDrehen
    wenn IstWand dann
      Beenden
    *wenn
    Schritt
    LinksDrehen
    MarkeSetzen
  sonst
    RechtsDrehen
    wenn IstWand dann
      Beenden
    *wenn
    Schritt
    RechtsDrehen
    MarkeSetzen
  *wenn
  *wenn
*wiederhole

</popup>

Übungsaufgaben

Aufgabe 1

In einer Welt soll Karol spiralförmig bis zum durch eine Marke gekennzeichneten Mittelpunkt laufen. Im Beispiel handelt es sich um eine Welt der Größe 13x12. Der Mittelpunkt befindet sich auf Punkt (7/7), wobei das linke obere Feld (1/1) sei. Grundsätzlich soll das Programm jedoch in allen vergleichbaren Welten laufen. Es ist bei der Aufgabe erforderlich in der 2D-Darstellung zu arbeiten.

Das Problem sollte wie gewohnt in Teilprobleme zerlegt werden, die dann nacheinander programmiert werden. In diesem Fall lässt sich die Aufgabe in vier Teilprobleme zerlegen: Es sind am Anfang und am Ende bestimmte Schritte zu erledigen, während die Spirale selbst in zwei Teilprobleme zerlegt werden kann.

Uebung Karol Schleife.PNG


Lösungsvorschlag


Aufgabe 2

Karol soll in einer beliebig großen Welt ein Schachbrett bauen.

SchachbrettÜ.jpg


Lösungsvorschlag


Aufgabe 3

In einer quadratischen Welt mit ungeradzahliger Seitenlänge soll Karol folgendes Muster erstellen:

Uebung Karol Raute.PNG

Lösungsvorschlag


Aufgabe 4


Karol ist unter die Ritter gegangen. Er soll auf der Mauer seiner Burg patrouillieren, ohne herunterzufallen. Dazu muss er bei jedem Schritt überprüfen, ob er vor einer Kante steht. Als weitere Sicherheitsmaßnahme vor Feinden baut er hinter sich die Treppe ab.

Uebung Karol Burgmauer.PNG

Lösungsvorschlag


Aufgabe 5

Karol soll in einer beliebig großen Welt mit gerader Länge und gerader Breite (Bild: 10x10) und 10 Ziegeln Höhe eine Zinnenmauer bauen.

Zinnen.PNG

Lösungsvorschlag


Aufgabe 6

Karol soll im Ziegelparcours um die Ziegel herumlaufen und am Schluss bis zur Wand.

Karol A6.PNG

Lösungsvorschlag


Aufgabe 7

Karol ist auf dem Volksfest und soll in einem Wettbewerb Bierkisten stapeln. Dazu sind auf einer Bahn in unregelmäßigen Abständen Marken verteilt. Karol soll nun bis zur anderen Wand laufen und auf jeder Marke 5 Kisten stapeln.

Karol A7.PNG

Lösungsvorschlag


Aufgabe 8

Karol soll einen leeren Brunnen mit Marken als Boden bauen.

Brunnen.PNG

Lösungsvorschlag


Aufgabe 9

Karol steht auf einem beliebigen Platz und mit beliebiger Blickrichtung in der oberen Hälfte seiner Welt. Er soll nun den Durchgang durch die Mauer finden und anschließend zur Wand laufen.

Karol A9.PNG

Lösungsvorschlag


Aufgabe 10

Karol soll eine Pyramide in einer Welt mit maximaler Kantenlänge 20x20 bauen und mit Marken belegen.

Karol A10.PNG

Lösungsvorschlag


Aufgabe 11

Karol soll wie im Video dargestellt einen Kolben imitieren. Die Größe der Welt ist 4x4x10. In den Einstellungen soll Karol eine sehr geringe Ablaufverzögerung erhalten.

Lösungsvorschlag