====== Zusatzaufgaben LMC ======
Empfohlene **Vorgehensweise für alle Aufgaben**:
1) Programmiere das Programm zuerst mit **Python**. Verwende dabei nur diejenigen Elemente, die in ähnlicher Form auch im Befehlssatz des LMC vorkommen, also:
* Variablen mit ganzen Zahlen (z.B. $x = 42$) aber keine Listen
* Mathematische Operationen: $+$ & $-$
* while-Schleife, if-elif-else: mit Branch-Befehlen umsetzbar
2) Mache einen **Plan**: Wie kannst du das Programm mit dem LMC schreiben? Zum Beispiel: Welche Art von Schleife macht hier Sinn?
3) Implementiere es mit dem **LMC**.
==== Schnapps-Aufgabe ====
**Ziel:** BenutzerIn gibt Alter ein. LMC bestimmt, was die Person trinken darf und gibt entsprechenden Output aus:
* "H" für Himbeersirup
* "B" für Bier
* "S" für Schnaps
++++Lösung|
INP
SUB SZN
BRP ALK
LDA H
OTC
HLT
ALK SUB TWO
BRP SCHN
LDA B
OTC
HLT
SCHN LDA S
OTC
HLT
SZN DAT 16
TWO DAT 2
H DAT 72
B DAT 66
S DAT 83
++++
==== Multiplikation ====
**Ziel:** Die Benutzerin soll nacheinander zwei Zahlen eingeben. Diese werden dann multipliziert. Das Resultat wird ausgegeben und gespeichert.
++++Lösung Python-Code|
a = input()
b = input()
r = 0 # result
while a > 0:
r = r + b
a = a - 1
print(r)
++++
==== Fibonacci-Folge ====
**Ziel:** Der Benutzer soll eine Zahl $n$ als Input eingeben. Der Code gibt dann die ersten $n$ Zahlen der Fibonacci-Folge aus: $1,1,2,3,5,8,13,\ldots$. Die beiden Einsen am Anfang dürfen auch ignoriert werden.
==== Ganzzahldivision ====
**Ziel:** Die Benutzerin soll nacheinander zwei Zahlen eingeben. Der Code ermittelt dann die Ganzzahldivision mit Rest dieser beider Zahlen. Beispiel: $23/5 = 4$ Rest $3$.
==== Lösungen ====
++++Weitere Codeideen|
1. Multiplikatives Inverses bestimmen ($7 \rightarrow -7, 42 \rightarrow -42$)
1. Absolutbetrag
1. Countdown aber mit Startzahl als Input
1. Ersten $n$ Zahlen der 2er-Reihe
1. Schreiben Sie einen Bootloader: Dieser liest ein anderes Programm vom Input und schreibt es in den Speicher. Wenn eine 000 (HALT) gelesen wird, soll das eingelesene Programm ausgeführt werden.
++++
++++Lösung Multiplikation|
INP
STO A
INP
STO B
JMP LDA A
BRZ FINE
SUB ONE
STA A
LDA R
ADD B
STA R
BRA JMP
FINE LDA R
OUT
HLT
ONE DAT 1
A DAT 0
B DAT 0
R DAT 0
++++
++++Lösung Fibonacci|
LOOP LDA N
BRZ END
SUB ONE
STO N
LDA X
ADD Y
OUT
STO TEMP
LDA Y
STO X
LDA TEMP
STO Y
BRA LOOP
END HLT
X DAT 1
Y DAT 1
TEMP DAT 0
N DAT 8
ONE DAT 1
++++
++++Ganzzahldivision|
LOOP LDA X
SUB Y
STO X
BRP CONT
LDA Q
OUT
LDA X
ADD Y
OUT
HLT
CONT LDA Q
ADD ONE
STA Q
BRA LOOP
X DAT 25
Y DAT 5
Q DAT 0
ONE DAT 1
++++
++++Schnapps-Aufgabe|
// BenutzerIn gibt Alter ein
// LMC gibt aus:
// H für Himbeersirup
// B für Bier
// S/W für Schnapps/ Whisky
INP // Alter eingeben
SUB SIXTN
BRP ALK // Alter >= 16 -> springe zu Bier oder Schnapps
LDA H // Himbeersirup
OTC
HLT
ALK SUB TWO // Entscheide ob Bier oder Schnapps
BRP SCHN // springe zu Schnapps
LDA B // Bier
OTC
HLT
SCHN LDA S // Schnapps
OTC
HLT
B DAT 66
H DAT 72
S DAT 85
SIXTN DAT 16
TWO DAT 2
++++