// Mehrere Dezimalzahlen addieren
//
//   Eingabe: Alle Summanden (eingeben im
//            Hauptprogramm, siehe unten)
//   Ausgabe: Summe
//
// ! Einstellungen Karol: 10 hochspringen
// !                Welt: Höhe 10
// !                Welt: 2D-Darstellung
//
// Für ein beliebiges Zahlensystem bis 10
// muss die Basis abgeändert werden.
// Suche dazu den Absatz nach "$".
//
// Eine größere Breite der Welt ermög-
// licht mehr Stellen (Absatz nach "&").
//
// Rudolf Pausenberger, 22.6.2013

// Anweisungen //////////////////////////

// Ein Schritt rückwärts
anweisung RückSchritt
  schnell
  linksdrehen linksdrehen
  schritt
  linksdrehen linksdrehen
*anweisung

// Nächste Spalte = nächste ZehnerStelle:
// Ein Schritt nach rechts
anweisung nS
    schnell
    rechtsdrehen schritt linksdrehen
*anweisung

// Geradeaus zur Wand laufen
anweisung VorLaufen
    schnell
    wiederhole solange NichtIstWand
        schritt
    *wiederhole
*anweisung

// Ziffernstapel um eins erhöhen
anweisung X
    hinlegen
*anweisung

// Eingabe der Zahl abschließen
anweisung Enter
    linksdrehen
    VorLaufen
    rechtsdrehen
    RückSchritt
*anweisung

// 10 Einer -> 1 Zehner  (10 = dezimal) $
anweisung Übertrag
    wenn IstZiegel(10) dann
      wiederhole 10 mal
          aufheben
      *wiederhole
      nS
      schritt
      hinlegen
      RückSchritt
      linksdrehen schritt rechtsdrehen
    *wenn
*anweisung

// Zwei Ziffern addieren
anweisung HalbAddierer
    wiederhole solange IstZiegel
     aufheben
     schritt
     hinlegen
     Übertrag
     RückSchritt
   *wiederhole
*anweisung

// Vorherigen Übertrag addieren
anweisung VollAddierer
   schritt schritt
   wenn IstZiegel dann
      aufheben
      RückSchritt
      hinlegen
      Übertrag
   sonst
      RückSchritt
   *wenn
   RückSchritt
*anweisung

// Stellenweise addieren                &
// (Wiederholzahl = Breite der Welt - 1)
anweisung Plus
   schritt
   wiederhole 4 mal
      HalbAddierer
      VollAddierer
      nS
   *wiederhole
   linksdrehen
   VorLaufen
   rechtsdrehen
*anweisung

anweisung ZumStart
  VorLaufen linksdrehen
  VorLaufen linksdrehen
  schritt schritt
  linksdrehen linksdrehen
*anweisung

// Hauptprogramm ////////////////////////

// !  Zur Eingabe der Ziffern auf der   !
// !  jeweiligen Dezimalstelle müssen   !
// !  Sie die Anzahl der x in der       !
// !  jeweiligen Zeile verändern.       !

//  nS = nächste Stelle im Dezimalsystem

ZumStart

// EINGABE erster Summand
x x               nS  // Einer (Spalte 5)
x                 nS  // Zehner       (4)
x x x x x         nS  // Hunderter    (3)
                      // Tausender    (2)
Enter

// EINGABE nächster Summand
x x               nS  // Einer (Spalte 5)
x                 nS  // Zehner       (4)
x x x x x         nS  // Hunderter    (3)
                      // Tausender    (2)
Enter

// VERKNÜPFUNG
Plus

// !  EINGABE evtl. weiterer Summanden  !
// !   jeweils mit "Enter" abschließen  !
// !   Für jeden weiteren Summanden     !
// !   ein weiteres "Plus" anfügen.     !