Programmieren lernen mit Robot Karol: Unterschied zwischen den Versionen
(→Parameter) |
(→Das Programm) |
||
(108 dazwischenliegende Versionen von 5 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 [ | + | 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 152: | Zeile 150: | ||
{| | {| | ||
|width=800px| | |width=800px| | ||
− | + | 1. Karol soll ein Rechteck ablaufen und am Ende wieder in der Ausgangsposition stehen. | |
− | + | <div style="margin-bottom:25px;"> | |
− | + | <popup name="Lösungsvorschlag"> | |
+ | Schritt<br> | ||
+ | Schritt<br> | ||
+ | Schritt<br> | ||
+ | LinksDrehen<br> | ||
+ | Schritt<br> | ||
+ | Schritt<br> | ||
+ | Schritt<br> | ||
+ | LinksDrehen<br> | ||
+ | Schritt<br> | ||
+ | Schritt<br> | ||
+ | Schritt<br> | ||
+ | LinksDrehen<br> | ||
+ | Schritt<br> | ||
+ | Schritt<br> | ||
+ | Schritt<br> | ||
+ | LinksDrehen<br> | ||
+ | </popup> | ||
+ | </div> | ||
+ | 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. | ||
+ | <div style="margin-bottom:25px;"> | ||
+ | <popup name="Lösungsvorschlag"> | ||
+ | MarkeSetzen<br> | ||
+ | Schritt<br> | ||
+ | MarkeSetzen<br> | ||
+ | Schritt<br> | ||
+ | MarkeSetzen<br> | ||
+ | Schritt<br> | ||
+ | MarkeSetzen<br> | ||
+ | Schritt<br> | ||
+ | LinksDrehen<br> | ||
+ | MarkeSetzen<br> | ||
+ | Schritt<br> | ||
+ | MarkeSetzen<br> | ||
+ | Schritt<br> | ||
+ | MarkeSetzen<br> | ||
+ | Schritt<br> | ||
+ | LinksDrehen<br> | ||
+ | MarkeSetzen<br> | ||
+ | Schritt<br> | ||
+ | MarkeSetzen<br> | ||
+ | Schritt<br> | ||
+ | MarkeSetzen<br> | ||
+ | Schritt<br> | ||
+ | MarkeSetzen<br> | ||
+ | Schritt<br> | ||
+ | MarkeSetzen<br> | ||
+ | </popup> | ||
+ | </div> | ||
+ | 3. Karol soll vier Ziegel in einer Reihe nebeneinander legen. | ||
+ | <div style="margin-bottom:25px;"> | ||
+ | <popup name="Lösungsvorschlag"> | ||
+ | Hinlegen<br> | ||
+ | LinksDrehen<br> | ||
+ | Schritt<br> | ||
+ | RechtsDrehen<br> | ||
+ | Hinlegen<br> | ||
+ | LinksDrehen<br> | ||
+ | Schritt<br> | ||
+ | RechtsDrehen<br> | ||
+ | Hinlegen<br> | ||
+ | LinksDrehen<br> | ||
+ | Schritt<br> | ||
+ | RechtsDrehen<br> | ||
+ | Hinlegen<br> | ||
+ | </popup> | ||
+ | </div> | ||
|width=20px| | |width=20px| | ||
|width=300px | | |width=300px | | ||
|} | |} | ||
− | |||
− | |||
− | |||
== Selbstdefinierte Methoden == | == Selbstdefinierte Methoden == | ||
Zeile 196: | Zeile 257: | ||
<br> | <br> | ||
'''Aufgaben''' | '''Aufgaben''' | ||
− | + | ||
− | + | 1. Bringe Karol mittels einer selbstdefinierten Anweisung bei, einen Riesenschritt auf einmal zu vollführen, der so groß wie drei normale Schritte ist. | |
+ | <div style="margin-bottom:25px;"> | ||
+ | <popup name="Lösungsvorschlag"> | ||
+ | <pre> | ||
+ | Anweisung Riesenschritt | ||
+ | Schritt | ||
+ | Schritt | ||
+ | Schritt | ||
+ | *Anweisung | ||
+ | |||
+ | Programm | ||
+ | Riesenschritt | ||
+ | *Programm | ||
+ | </pre> | ||
+ | </popup> | ||
+ | </div> | ||
+ | 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). | ||
+ | <div style="margin-bottom:25px;"> | ||
+ | <popup name="Lösungsvorschlag"> | ||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | </popup> | ||
+ | </div> | ||
+ | 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.<br> | ||
[[Bild:Screenshot_Roesselsprung.JPG]] | [[Bild:Screenshot_Roesselsprung.JPG]] | ||
+ | <div style="margin-bottom:25px;"> | ||
+ | <popup name="Lösungsvorschlag"> | ||
+ | <u>Lösungsmöglichkeit 1</u>: 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. | ||
+ | |||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | <u>Lösungsmöglichkeit 2</u>: 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'''. | ||
+ | |||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | |||
+ | </popup> | ||
+ | </div> | ||
<br> | <br> | ||
− | |||
|width=20px| | |width=20px| | ||
|width=300px | | |width=300px | | ||
|} | |} | ||
− | |||
== Parameter == | == Parameter == | ||
Zeile 222: | 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 239: | Zeile 440: | ||
− | '''Aufgabe 1:''' Karol soll mit Hilfe von Anweisungen mit Parameterwert | + | '''Aufgabe 1:''' Karol soll mit Hilfe von selbstdefinierten Anweisungen und Anweisungen mit Parameterwert eine Säulenhalle bauen. |
+ | |||
+ | [[Datei:Karol saeulenhalle.JPG]] | ||
+ | |||
+ | <div style="margin-bottom:25px;"> | ||
+ | <popup name="Lösungsvorschlag"> | ||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | |||
+ | Alternative Lösung: | ||
+ | |||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | </popup> | ||
+ | </div> | ||
+ | |||
+ | |||
+ | |||
+ | '''Aufgabe 2:''' Karol soll mit Hilfe einer selbstdefinierten Anweisung mit Parameterwert eine Treppe bauen. | ||
+ | |||
+ | [[Datei:Karol treppe.JPG]] | ||
+ | |||
+ | <div style="margin-bottom:25px;"> | ||
+ | <popup name="Lösungsvorschlag"> | ||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | </popup> | ||
+ | </div> | ||
== Wiederholung mit fester Anzahl == | == Wiederholung mit fester Anzahl == | ||
{| | {| | ||
|width=800px| | |width=800px| | ||
− | ''' | + | '''Problem:''' |
Karol soll vier Ziegel in einer Reihe hintereinander legen.<br> | Karol soll vier Ziegel in einer Reihe hintereinander legen.<br> | ||
Erste Lösung durch sequentielles Anschreiben der Anweisungen: | Erste Lösung durch sequentielles Anschreiben der Anweisungen: | ||
Zeile 278: | Zeile 573: | ||
</pre> | </pre> | ||
− | ''' | + | |
+ | |||
+ | '''Aufgaben''' | ||
+ | |||
+ | 1. Karol soll mit Ziegeln ein Quadrat auslegen. | ||
[[Bild:Screenshot_Quadrat.JPG]] | [[Bild:Screenshot_Quadrat.JPG]] | ||
+ | <div style="margin-bottom:25px;"> | ||
+ | <popup name="Lösungsvorschlag"> | ||
+ | <pre> | ||
+ | wiederhole 4 mal | ||
+ | Hinlegen | ||
+ | Schritt | ||
+ | LinksDrehen | ||
+ | *wiederhole | ||
+ | </pre> | ||
+ | </popup> | ||
+ | </div> | ||
+ | |||
+ | 2. Die bereits bekannte Aufgabe ''Karol soll vier Ziegel nebeneinander legen.'' soll mit einer Wiederholungsanweisung gelöst werden. | ||
+ | |||
+ | [[Datei:Screenshot ZiegelNebeneinander.JPG]] | ||
+ | |||
+ | <div style="margin-bottom:25px;"> | ||
+ | <popup name="Lösungsvorschlag"> | ||
+ | <pre> | ||
+ | wiederhole 4 mal | ||
+ | Hinlegen | ||
+ | LinksDrehen | ||
+ | Schritt | ||
+ | RechtsDrehen | ||
+ | *wiederhole | ||
+ | </pre> | ||
+ | </popup> | ||
+ | </div> | ||
+ | |||
+ | 3.In einer Welt der Größe 6x6 soll Karol mit Marken eine Diagonale erzeugen. | ||
+ | |||
+ | [[Datei:Screenshot Diagonale.JPG]] | ||
+ | |||
+ | <div style="margin-bottom:25px;"> | ||
+ | <popup name="Lösungsvorschlag"> | ||
+ | <pre> | ||
+ | wiederhole 5 mal | ||
+ | MarkeSetzen | ||
+ | Schritt | ||
+ | Linksdrehen | ||
+ | Schritt | ||
+ | RechtsDrehen | ||
+ | *wiederhole | ||
+ | MarkeSetzen | ||
+ | </pre> | ||
+ | </popup> | ||
+ | </div> | ||
+ | |||
+ | 4. In einer Welt der Größe 9x9 erzeugt Karol ein Kreuz aus Marken. | ||
+ | |||
+ | [[Datei:Screenshot kreuz.JPG]] | ||
+ | |||
+ | <div style="margin-bottom:25px;"> | ||
+ | <popup name="Lösungsvorschlag"> | ||
+ | <pre> | ||
+ | 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 | ||
+ | </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 | ||
+ | |||
+ | MarkeSetzen | ||
+ | </pre> | ||
+ | </popup> | ||
+ | </div> | ||
<span style="font-size:12pt;">'''Geschachtelte Wiederholung'''</span><br> | <span style="font-size:12pt;">'''Geschachtelte Wiederholung'''</span><br> | ||
− | ''' | + | '''Problem:''' Karol soll einen Quadratrand auslegen. |
[[Bild:Screenshot_Quadratrand.JPG]] | [[Bild:Screenshot_Quadratrand.JPG]] | ||
Zeile 291: | Zeile 736: | ||
'''Lösung''' | '''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. | ||
+ | |||
+ | <div style="margin-left:40px; margin-top:30px; margin-bottom:30px"> | ||
+ | [[Datei:Karol Quadratrand lsg.JPG]] | ||
+ | </div> | ||
+ | |||
+ | |||
+ | |||
+ | '''Aufgaben''' | ||
+ | |||
+ | 1. Karol soll in einer Welt der Größe 9x9 eine hübsche Gartenmauer bauen. | ||
+ | |||
+ | <div style="margin-left:40px; margin-top:30px; margin-bottom:30px"> | ||
+ | [[Datei:Karol Gartenmauer.JPG]] | ||
+ | </div> | ||
+ | |||
+ | <div style="margin-bottom:25px;"> | ||
+ | <popup name="Lösungsvorschlag"> | ||
<pre> | <pre> | ||
wiederhole 4 mal | wiederhole 4 mal | ||
− | wiederhole | + | wiederhole 4 mal |
Hinlegen | Hinlegen | ||
Schritt | Schritt | ||
+ | MarkeSetzen | ||
+ | Schritt | ||
+ | MarkeSetzen | ||
*wiederhole | *wiederhole | ||
LinksDrehen | LinksDrehen | ||
*wiederhole | *wiederhole | ||
+ | |||
</pre> | </pre> | ||
− | + | </popup> | |
+ | </div> | ||
+ | 2. Die Aufgabe 1 im Kapitel "Parameter" (''Säulenhalle'') soll allein mit Wiederholungsanweisungen gelöst werden. | ||
− | < | + | <div style="margin-bottom:25px;"> |
− | + | <popup name="Lösungsvorschlag"> | |
− | Karol soll eine Welt [8x8] vollständig mit Kacheln auslegen. Schreibe dazu ein | + | <pre> |
− | Programm, das Anweisungen | + | wiederhole 4 mal |
− | enthält. Überlege dir zuerst eine Strategie zur Lösung der Aufgabe, bei der du sie in Teilprobleme zerlegst. | + | wiederhole 2 mal |
+ | Schritt | ||
+ | LinksDrehen | ||
+ | wiederhole 6 mal | ||
+ | Hinlegen | ||
+ | *wiederhole | ||
+ | rechtsdrehen | ||
+ | Schritt | ||
+ | *wiederhole | ||
+ | Schritt | ||
+ | Schritt | ||
+ | LinksDrehen | ||
+ | *wiederhole | ||
+ | </pre> | ||
+ | </popup> | ||
+ | </div> | ||
+ | |||
+ | |||
+ | 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. | ||
+ | |||
+ | <div style="margin-bottom:25px;"> | ||
+ | <popup name="Lösungsvorschlag"> | ||
+ | <u>Lösungsstrategie</u><br> | ||
+ | Es empfiehlt sich, das Problem in folgende Teilprobleme zu zerlegen:<br> | ||
+ | * 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. | ||
+ | |||
+ | |||
+ | <div style="margin-left:100px; margin-top:30px; margin-bottom:30px"> | ||
+ | {{#ev:youtube|eseKxl3MYI0}} | ||
+ | </div> | ||
+ | |||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | |||
+ | </popup> | ||
+ | </div> | ||
− | |||
|width=20px| | |width=20px| | ||
|width=300px | | |width=300px | | ||
Zeile 334: | Zeile 870: | ||
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'') | 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. | ||
Zeile 355: | Zeile 892: | ||
</pre> | </pre> | ||
− | ''' | + | '''Aufgaben''' |
− | Karol soll in einer rechteckigen Welt von einer Ecke aus genau einmal um die Welt | + | |
+ | 1. Karol soll in einer rechteckigen Welt von einer Ecke aus genau einmal um die Welt | ||
herumlaufen und seine Strecke dabei mit Ziegeln belegen. | herumlaufen und seine Strecke dabei mit Ziegeln belegen. | ||
− | + | <div style="margin-bottom:25px;"> | |
− | + | <popup name="Lösungsvorschlag"> | |
+ | <pre> | ||
+ | wiederhole 4 mal | ||
− | + | wiederhole solange nichtIstWand | |
+ | hinlegen | ||
+ | schritt | ||
+ | *wiederhole | ||
+ | |||
+ | linksdrehen | ||
+ | |||
+ | *wiederhole | ||
+ | |||
+ | </pre> | ||
+ | </popup> | ||
+ | </div> | ||
+ | |||
+ | 2. Wie Aufgabe 1. Aber nun soll Karol an einem beliebigen Ort an der Wand starten. | ||
+ | |||
+ | <div style="margin-bottom:25px;"> | ||
+ | <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. | ||
+ | <pre> | ||
+ | wiederhole 4 mal | ||
+ | wiederhole solange nichtIstWand | ||
+ | Hinlegen | ||
+ | Schritt | ||
+ | *wiederhole | ||
+ | LinksDrehen | ||
+ | *wiederhole | ||
+ | |||
+ | wiederhole solange nichtIstZiegel | ||
+ | Hinlegen | ||
+ | Schritt | ||
+ | *wiederhole | ||
+ | </pre> | ||
+ | </popup> | ||
+ | </div> | ||
+ | |||
+ | 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. | ||
+ | <div style="margin-bottom:25px;"> | ||
+ | <popup name="Lösungsvorschlag"> | ||
+ | <pre> | ||
+ | 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 | ||
+ | </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> | ||
+ | </div> | ||
|width=20px| | |width=20px| | ||
|width=300px | | |width=300px | | ||
Zeile 392: | Zeile 1.028: | ||
</pre> | </pre> | ||
− | ''' | + | |
− | Das Beispielprogramm "Karol soll von einem beliebigen Punkt an der Wand aus einmal an der | + | '''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 | Wand entlang genau eine Runde laufen und dabei seine Ziegel hinlegen" soll in ein Programm | ||
mit einer bedingten Anweisung umgewandelt und dadurch vereinfacht werden. | mit einer bedingten Anweisung umgewandelt und dadurch vereinfacht werden. | ||
− | + | <div style="margin-bottom:25px;"> | |
− | Wie Aufgabe 1, nur dass Karol von einem beliebigen Feld in der Welt startet und auch wieder an | + | <popup name="Lösungsvorschlag"> |
+ | <pre> | ||
+ | wiederhole solange nichtIstZiegel | ||
+ | wenn nichtIstWand dann | ||
+ | Hinlegen | ||
+ | Schritt | ||
+ | sonst | ||
+ | LinksDrehen | ||
+ | *wenn | ||
+ | *wiederhole | ||
+ | </pre> | ||
+ | </popup> | ||
+ | </div> | ||
+ | |||
+ | |||
+ | 2. Wie Aufgabe 1, nur dass Karol von einem beliebigen Feld in der Welt startet und auch wieder an | ||
seinen Ausgangspunkt zurückkehrt.<br> | seinen Ausgangspunkt zurückkehrt.<br> | ||
a) Lösung ohne Verwendung der bedingten Anweisung.<br> | a) Lösung ohne Verwendung der bedingten Anweisung.<br> | ||
b) Lösung unter Verwendung der bedingten Anweisung. | b) Lösung unter Verwendung der bedingten Anweisung. | ||
− | + | <div style="margin-bottom:25px;"> | |
+ | <popup name="Lösungsvorschlag"> | ||
+ | a) | ||
+ | <pre> | ||
+ | //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 | ||
+ | </pre> | ||
+ | |||
+ | b) | ||
+ | <pre> | ||
+ | //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 | ||
+ | |||
+ | </pre> | ||
+ | </popup> | ||
+ | </div> | ||
+ | |||
+ | 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.<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;"> | ||
+ | <popup name="Lösungsvorschlag"> | ||
+ | a) | ||
+ | <pre> | ||
+ | wiederhole solange nichtIstWand | ||
+ | wenn istZiegel dann | ||
+ | Aufheben | ||
+ | Schritt | ||
+ | sonst | ||
+ | Hinlegen | ||
+ | Schritt | ||
+ | *wenn | ||
+ | *wiederhole | ||
+ | </pre> | ||
+ | |||
+ | b) | ||
+ | <pre> | ||
+ | wiederhole solange nichtIstWand | ||
+ | wenn istZiegel dann | ||
+ | wiederhole solange IstZiegel | ||
+ | Aufheben | ||
+ | *wiederhole | ||
+ | Schritt | ||
+ | sonst | ||
+ | Hinlegen | ||
+ | Schritt | ||
+ | *wenn | ||
+ | *wiederhole | ||
+ | </pre> | ||
+ | |||
+ | c) | ||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | </popup> | ||
+ | </div> | ||
|width=20px| | |width=20px| | ||
|width=300px | | |width=300px | | ||
|} | |} | ||
− | |||
− | |||
− | |||
== Einseitige bedingte Anweisung == | == Einseitige bedingte Anweisung == | ||
Zeile 437: | Zeile 1.227: | ||
<pre> | <pre> | ||
− | wiederhole solange | + | wiederhole solange nicht IstWand |
− | wenn | + | wenn nicht IstZiegel dann |
Hinlegen | Hinlegen | ||
*wenn | *wenn | ||
Zeile 445: | Zeile 1.235: | ||
</pre> | </pre> | ||
− | ''' | + | '''Aufgaben''' |
− | In einer Welt (9x8) sind 15 Marken beliebig verteilt. Karol soll von einem beliebigen | + | |
+ | 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 | Startpunkt ausgehend, alle Marken mit Ziegelsteinen belegen und dabei keine Marke | ||
vergessen. Teste das Programm mit verschiedenen Startpunkten von Karol. | vergessen. Teste das Programm mit verschiedenen Startpunkten von Karol. | ||
− | + | <div style="margin-bottom:25px;"> | |
+ | <popup name="Lösungsvorschlag"> | ||
+ | <pre> | ||
+ | //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 | ||
+ | </pre> | ||
+ | |||
+ | </popup> | ||
+ | </div> | ||
+ | |||
+ | |||
+ | 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! | ||
+ | |||
+ | <div style="margin-bottom:25px;"> | ||
+ | <popup name="Lösungsvorschlag"> | ||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | |||
+ | </popup> | ||
+ | </div> | ||
|width=20px| | |width=20px| | ||
|width=300px | | |width=300px | | ||
|} | |} | ||
+ | |||
+ | ==Ü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. | ||
+ | |||
+ | [[Datei:Uebung_Karol_Schleife.PNG]] | ||
+ | |||
+ | |||
+ | [[Lösungsvorschlag Karol Übungsaufgabe 1|Lösungsvorschlag]] | ||
+ | |||
+ | |||
+ | |||
+ | '''Aufgabe 2''' | ||
+ | |||
+ | Karol soll in einer beliebig großen Welt ein Schachbrett bauen. | ||
+ | |||
+ | [[Datei:SchachbrettÜ.jpg]] | ||
+ | |||
+ | |||
+ | [[Lösungsvorschlag Karol Übungsaufgabe 2|Lösungsvorschlag]] | ||
+ | |||
+ | |||
+ | |||
+ | '''Aufgabe 3''' | ||
+ | |||
+ | In einer quadratischen Welt mit ungeradzahliger Seitenlänge soll Karol folgendes Muster erstellen: | ||
+ | |||
+ | [[Datei:Uebung_Karol_Raute.PNG]] | ||
+ | |||
+ | [[Lösungsvorschlag Karol Übungsaufgabe 3|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. | ||
+ | |||
+ | [[Datei:Uebung_Karol_Burgmauer.PNG]] | ||
+ | |||
+ | [[Lösungsvorschlag Karol Übungsaufgabe 4|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. | ||
+ | <div style="margin-top:30px"> | ||
+ | [[Datei:Zinnen.PNG]] | ||
+ | </div> | ||
+ | |||
+ | [[Lösungsvorschlag Karol Übungsaufgabe 5|Lösungsvorschlag]] | ||
+ | |||
+ | |||
+ | |||
+ | '''Aufgabe 6''' | ||
+ | |||
+ | Karol soll im Ziegelparcours um die Ziegel herumlaufen und am Schluss bis zur Wand. | ||
+ | |||
+ | [[Datei:Karol_A6.PNG]] | ||
+ | |||
+ | [[Lösungsvorschlag Karol Übungsaufgabe 6|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. | ||
+ | |||
+ | [[Datei:Karol_A7.PNG]] | ||
+ | |||
+ | [[Lösungsvorschlag Karol Übungsaufgabe 7|Lösungsvorschlag]] | ||
+ | |||
+ | |||
+ | |||
+ | '''Aufgabe 8''' | ||
+ | |||
+ | Karol soll einen leeren Brunnen mit Marken als Boden bauen. | ||
+ | |||
+ | [[Datei:Brunnen.PNG]] | ||
+ | |||
+ | [[Lösungsvorschlag Karol Übungsaufgabe 8|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. | ||
+ | |||
+ | [[Datei:Karol_A9.PNG]] | ||
+ | |||
+ | [[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, 08:04 Uhr
Inhaltsverzeichnis |
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.
|
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
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 |
---|---|
|
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. |
Aufgaben:
1. Karol soll ein Rechteck ablaufen und am Ende wieder in der Ausgangsposition stehen. 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. 3. Karol soll vier Ziegel in einer Reihe nebeneinander legen. |
Selbstdefinierte Methoden
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.
Aufgabe 2: Karol soll mit Hilfe einer selbstdefinierten Anweisung mit Parameterwert eine Treppe bauen.
Wiederholung mit fester Anzahl
Problem:
Karol soll vier Ziegel in einer Reihe hintereinander legen. 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
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. 2. Die bereits bekannte Aufgabe Karol soll vier Ziegel nebeneinander legen. soll mit einer Wiederholungsanweisung gelöst werden. 3.In einer Welt der Größe 6x6 soll Karol mit Marken eine Diagonale erzeugen. 4. In einer Welt der Größe 9x9 erzeugt Karol ein Kreuz aus Marken.
Geschachtelte Wiederholung Problem: Karol soll einen Quadratrand auslegen. 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.
Aufgaben 1. Karol soll in einer Welt der Größe 9x9 eine hübsche Gartenmauer bauen. 2. Die Aufgabe 1 im Kapitel "Parameter" (Säulenhalle) soll allein mit Wiederholungsanweisungen gelöst werden.
|
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.
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)
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. 2. Wie Aufgabe 1. Aber nun soll Karol an einem beliebigen Ort an der Wand starten. 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. |
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: Bedingte Anweisung (zweiseitig): Sprache Karol: wenn Bedingung dann Anweisungen1 sonst Anweisungen2 *wenn
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.
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. |
Einseitige bedingte Anweisung
Aufgabe: 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.
|
Ü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.
Aufgabe 2
Karol soll in einer beliebig großen Welt ein Schachbrett bauen.
Aufgabe 3
In einer quadratischen Welt mit ungeradzahliger Seitenlänge soll Karol folgendes Muster erstellen:
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.
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.
Aufgabe 6
Karol soll im Ziegelparcours um die Ziegel herumlaufen und am Schluss bis zur Wand.
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.
Aufgabe 8
Karol soll einen leeren Brunnen mit Marken als Boden bauen.
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.
Aufgabe 10
Karol soll eine Pyramide in einer Welt mit maximaler Kantenlänge 20x20 bauen und mit Marken belegen.
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.