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
Multiplikatives Inverses bestimmen ($7 \rightarrow -7, 42 \rightarrow -42$)
Absolutbetrag
Countdown aber mit Startzahl als Input
Ersten $n$ Zahlen der 2er-Reihe
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
</nodisp>