Karl soll eine Treppe bauen

Karl soll eine Treppe bauen. Gehe davon aus, dass Karl beim Klettern nicht mehr als eine Ziegelhöhe auf einmal überwinden kann und Ziegel nicht tiefer als eine Ziegelhöhe nach unten wirft. Dies kann man im der Programmierumgebung auch so einstellen.

Video dazu: Video (Youtube)

1. Teil: Karl hat nur die Befehle Schritt, Hinlegen und Linksdrehen zur Verfügung.

Einfache primitive Lösung

Erste einfache Lösung

Schritt
linksdrehen
linksdrehen
Hinlegen
Schritt
linksdrehen
linksdrehen
Hinlegen
Schritt
Hinlegen
Schritt
Hinlegen
Schritt
linksdrehen
linksdrehen
Hinlegen
Schritt
Hinlegen
Schritt
Hinlegen
Schritt
linksdrehen
linksdrehen
Hinlegen
Schritt
linksdrehen
linksdrehen
Hinlegen
Schritt
linksdrehen
linksdrehen
Schritt
linksdrehen
linksdrehen
Hinlegen
Schritt
linksdrehen
linksdrehen

2. Teil:  Der Quelltext ist schlecht lesbar.

Markiere im Text Stellen die mehrmals wiederholt werden. Ergänze im Quelltext möglichst viele Schleifen.

Lösung mit Wiederholungen

Lösung mit Wiederholungen

Schritt
LinksDrehen
LinksDrehen
Hinlegen

Schritt

wiederhole 2 mal
  LinksDrehen
  LinksDrehen

  wiederhole 3 mal
    Hinlegen
    Schritt
  *wiederhole

*wiederhole


wiederhole 2 mal
  LinksDrehen
  LinksDrehen
  Hinlegen
  Schritt
*wiederhole

LinksDrehen
LinksDrehen
Schritt

LinksDrehen
LinksDrehen
Hinlegen
Schritt

LinksDrehen
LinksDrehen

3. Teil: Benutze eigendefinierte Anweisungen. 

Lösung mit eigenen Anweisungen

Lösung mit eigenen Anweisungen

Anweisung Umdrehen
  LinksDrehen
  LinksDrehen
*Anweisung

Anweisung SteinHinlegenUndSchritt
  Hinlegen
  Schritt
*Anweisung

Schritt
Umdrehen
SteinHinlegenUndSchritt

wiederhole 2 mal
  Umdrehen
  wiederhole 3 mal
    SteinHinlegenUndSchritt
  *wiederhole

*wiederhole


wiederhole 2 mal
  Umdrehen
  SteinHinlegenUndSchritt
*wiederhole

Umdrehen
Schritt

Umdrehen
SteinHinlegenUndSchritt
Umdrehen

4. Teil: Schreibe den Text ganz neu. Die Lösung soll flexibel für bestimmte Treppenhöhen nutzbar sein. Die Welt sollt nur genügend hoch und lang sein.

flexible Lösung

flexible Lösung

Anweisung umdrehen
  LinksDrehen
  LinksDrehen
*Anweisung

Schritt(8)
MarkeSetzen
Umdrehen
Schritt

wiederhole solange NichtIstMarke
wiederhole solange NichtIstWand
   Hinlegen
   Schritt

*wiederhole
Umdrehen
wiederhole solange NichtIstMarke
  Schritt
*wiederhole
Umdrehen
Schritt
MarkeSetzen
wenn  NichtIstWand
dann Schritt
*wenn
*wiederhole
Umdrehen

5. Teil: Zum guten Progammierstil gehört es dazu, den Quelltext zu kommentieren.

Quelltext mit Kommentaren

Version

Quelltext mit Kommentaren
{Progamm: Karl baut eine Treppe
  man muss darauf achten, dass die Welt genügend
  hoch und lang ist
}
Anweisung umdrehen  {Karl dreht sich um}
  LinksDrehen
  LinksDrehen
*Anweisung

Schritt(9)    {die gewünschte Höhe + 1 eingeben}
MarkeSetzen
Umdrehen
Schritt

wiederhole solange NichtIstMarke
  wiederhole solange NichtIstWand {Karl legt bis zur Wand Ziegel}
    Hinlegen
    Schritt
  *wiederhole
  Umdrehen
  wiederhole solange NichtIstMarke {Karl geht wieder zurück}
    Schritt
  *wiederhole
  Umdrehen
  Schritt  {damit es eine Treppe wird}
  MarkeSetzen
  wenn  NichtIstWand {kann beim letzten Ziegel passieren}
    dann Schritt
  *wenn
*wiederhole
Umdrehen

Alternative: Einfache Lösung mit Variabler Wiederholung.

Anweisung mit einer Variablen
{Treppe bauen}
Anweisung umdrehen
  LinksDrehen
  LinksDrehen
*Anweisung

Anweisung lege(X)
  Schnell
  wiederhole X mal
    Hinlegen
    Schritt
  *wiederhole
  umdrehen
  wiederhole X mal
    Schritt
  *wiederhole
  umdrehen
  Schritt
  Langsam
*Anweisung

lege(8)
lege(7)
lege(6)
lege(5)
lege(4)
lege(3)
lege(2)
lege(1)

Zurück