Karl addiert mehrere Zahlen

Karl addiert mehrere Zahlen beliebiger Größe. Damit das Programm funkioniert sollte Karls Welt 10 hoch sein. 

Video (Youtube)

Karl rechnet: 61 +1079 +1326 + 1268. Dies ergibt 3734.

kompletter Quelltext
//Karl addiert mehrere Zahlen beliebiger Länge
// Karls Welt sollte 10 hoch sein

Anweisung Umdrehen
  Schnell
  RechtsDrehen
  RechtsDrehen
  Langsam
*Anweisung

Anweisung ZurMarke
  wiederhole solange NichtIstMarke
    Schritt
  *wiederhole
*Anweisung

Bedingung NichtIstLinksWand
     schnell
      linksdrehen
      wenn IstWand dann falsch sonst wahr *wenn
      rechtsdrehen
     langsam
*Bedingung


Bedingung SindZehnZiegel
  Schnell
  falsch
  wiederhole 9 mal
    wenn IstZiegel   dann
      Aufheben
      LinksDrehen
      Hinlegen
      RechtsDrehen
    *wenn
  *wiederhole
  wenn IstZiegel dann wahr *wenn
  LinksDrehen
  wiederhole solange IstZiegel
    Aufheben
    RechtsDrehen
    Hinlegen
    LinksDrehen
  *wiederhole
  RechtsDrehen
  Langsam
*Bedingung

Bedingung KeineWandUndZiegel
  wahr
  wenn IstZiegel dann falsch *wenn
  wenn IstWand dann falsch *wenn
*Bedingung

Anweisung ZehnerUebertrag
  wiederhole 10 mal Aufheben *wiederhole
  RechtsDrehen
  Schritt
  RechtsDrehen
  Hinlegen
// wiederhole solange SindZehnZiegel
//     wiederhole 10 mal Aufheben *wiederhole
//     LinksDrehen
//     Schritt
//     RechtsDrehen
//     Hinlegen
//   *wiederhole
  umdrehen
  LinksDrehen
  ZurMarke
  RechtsDrehen
*Anweisung

Anweisung LegeZiegelNachUnten
  wiederhole solange KeineWandUndZiegel
    Schritt
  *wiederhole
  wenn IstZiegel dann Aufheben
    umdrehen
    ZurMarke
    Hinlegen
  sonst
    umdrehen
    ZurMarke
  *wenn
  wenn SindZehnZiegel
    dann
    ZehnerUebertrag
  *wenn
  umdrehen
*Anweisung


wiederhole solange NichtIstLinksWand
  MarkeSetzen

  wiederhole solange NichtIstWand
    LegeZiegelNachUnten
    wiederhole solange KeineWandUndZiegel
      Schritt
    *wiederhole
  *wiederhole
  
  Umdrehen
  ZurMarke
  MarkeLöschen
  RechtsDrehen
  Schritt
  RechtsDrehen
*wiederhole

Anleitung

1. Schritt: Mehrere Ziegelsteine einsammeln

Karl läuft von der Marke zum nächsten Ziegelsteinturm und legt diesen hinter seiner Marke untern ab. Dies soll auch mit mehreren Türmen funktionieren. Ein Zehnerübergang soll vermieden werden.

 

Zum Schluß stößt Karl an der Wand oben an. Um zu erkennen, dass alle Ziegelstapel eingesammelt worden sind, braucht man selbstdefinierte Bedingungen. Dies erfolgt im nächsten Schritt.

2. Schritt: Wann hat Karl eine Reihe komplett eingesammelt?

Woher weiß Karl, dass er alle Ziegelsteine "über" sich eingesammelt hat. Praktischerweise muss er nach oben bis zur Wand laufen und nachsehen, ob sich hier noch ein Ziegel befindet. Wenn allerdings noch ein Ziegelstapel vorhanden ist, kann er nicht bis zur Wand laufen, da Karl nicht so hoch springen kann.

Karl soll so lange laufen, bis er entweder an die Wand oder auf Ziegel trifft. Steht er zum Schluß vor der Wand, so ist er fertig. Steht er vor einem Ziegel, so muss er noch weiter addieren.

Bedingungen (Quelltext)
Bedingung NichtZiegelNichtWand
  wahr
  wenn IstZiegel dann falsch *wenn
  wenn IstWand dann falsch *wenn
*Bedingung
 
Bedingung NichtFertig
  wiederhole solange NichtZiegelNichtWand
    Schritt
  *wiederhole
  wenn IstZiegel dann wahr sonst falsch *wenn
  umdrehen
  wiederhole solange NichtIstMarke
    Schritt
  *wiederhole
  umdrehen
*Bedingung
Quelltext
Anweisung Umdrehen
  LinksDrehen
  LinksDrehen
*Anweisung

 Bedingung NichtZiegelNichtWand
  wahr
  wenn IstZiegel dann falsch *wenn
  wenn IstWand dann falsch *wenn
*Bedingung

Bedingung NichtFertig

  wiederhole solange NichtZiegelNichtWand
    Schritt
  *wiederhole
  wenn IstZiegel dann wahr sonst falsch *wenn
  umdrehen
  wiederhole solange NichtIstMarke
    Schritt
  *wiederhole
  umdrehen

*Bedingung


wiederhole solange NichtFertig
  wiederhole solange NichtIstZiegel
    Schritt
  *wiederhole
  Aufheben
  Umdrehen
  wiederhole solange NichtIstMarke
    Schritt
  *wiederhole
  Hinlegen
  Umdrehen
*wiederhole

3. Schritt: Wie erkennt er, dass ein Stapel die Höhe 10 hat?

Karl muss erkennen können, ob ein Stapel die Höhe 10 hat, denn dann muss er einen Zehnerübergang durchführen. Hier gibt es teilweise Möglichkeiten, dies mit Hilfe der Programmierumgebung zu bewerkstelligen (siehe Handbuch). Man kann die Bedingung allerdings selbst programmieren. 

Steht Karl vor einem Ziegelturm, so legt er (wenn möglich) 9 mal einen Ziegelstein zur Seite. Befindet sich zum Schluß noch ein Ziegel vor ihm, so waren es ursprünglich 10 Ziegel. Ist kein Stein mehr vorhanden, so waren es auf jeden Fall weniger als 10.

Bedingung SindZehnZiegel (Quelltext)
Bedingung SindZehnZiegel
  Schnell
  falsch
  wiederhole 9 mal
    wenn IstZiegel   dann
      Aufheben
      LinksDrehen
      Hinlegen
      RechtsDrehen
    *wenn
  *wiederhole
  wenn IstZiegel dann wahr *wenn
  LinksDrehen
  wiederhole solange IstZiegel
    Aufheben
    RechtsDrehen
    Hinlegen
    LinksDrehen
  *wiederhole
  RechtsDrehen
  Langsam
*Bedingung
Anweisung ZehnerUebertrag
Anweisung ZehnerUebertrag
  wiederhole 10 mal
    Aufheben
  *wiederhole
  RechtsDrehen
  Schritt
  RechtsDrehen
  Hinlegen
  RechtsDrehen
  Schritt
  RechtsDrehen
*Anweisung

Zurück