====== 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 ++++