Lernpfad Know-How-Computer/KHC Programmieraufgaben Teil 2
- Alle Zellen des Hauptspeichers enthalten solange standardmäßig den Wert 0, bis etwas anderes per Tastatureingabe oder durch das Laden einer Speicherkonfiguration hineingeschrieben wird.
- Nach dem Programmende darf der Datenwert, der dann in einer Speicherzelle steht, von dem ursprünglichen Wert abweichen, der vor der Programmausführung in der Zelle stand.
Entscheide, ob der Wert der Variablen x kleiner ist als der Wert der Variablen y.
- Vor dem Programmstart steht
- in Speicherzelle 21 ein beliebiger Wert x, z.B. der Wert 5, und
in Speicherzelle 22 ein beliebiger Wert y, z.B. der Wert 7. - Nach dem Programmende steht
- in Speicherzelle 23 der Wert 1, wenn der ursprüngliche Wert von x kleiner als der ursprüngliche Wert von y war,
andernfalls steht in Speicherzelle 23 weiterhin der Initialisierungswert 0.
Berechne die Differenz zweier beliebiger natürlicher Zahlen x und y. Im Gegensatz zu Aufgabe 2 wird jetzt nicht mehr zwingend vorausgesetzt, dass y kleiner oder gleich x sein muss. Das bedeutet, dass das Ergebnis nun auch negativ werden kann. Da im KHC negative Zahlen als Grunddatentypen nicht zugelassen sind, wird das Ergebnis in zwei Speicherzellen ausgegeben: die eine enthält den Betrag der Differenz und die andere das Vorzeichen des Ergebnisses, wobei der Wert 1 für ein negatives Ergebnis steht, der Wert 0 für ein nicht-negatives Ergebnis.
- Vor dem Programmstart steht
- in Speicherzelle 23 ein beliebiger Wert x, z.B. der Wert 3, und
in Speicherzelle 24 ein beliebiger Wert y, z.B. der Wert 5. - Nach dem Programmende steht
- in Speicherzelle 23 der Betrag der Differenz x - y, im Beispiel also der Wert 2,
in Speicherzelle 24 der Wert 1, wenn das Ergebnis negativ ist und der Wert 0, wenn dies nicht der Fall ist.
Da im vorliegenden Beispiel das Ergebnis 3 - 5 = -2, also negativ ist, steht in diesem Fall
in Speicherzelle 23 der Betrag 2 und
in Speicherzelle 23 der Wert 1 für das negative Vorzeichen
"x - y = ? (Betrag und Vorzeichen der Differenz für beliebige x und y)" in Assembler
start: isz x
jmp xistungleich0
jmp xistgleich0
xistungleich0: isz y
jmp xundyungleich0
jmp fertig
xistgleich0: isz y
jmp ynachx
jmp fertig
xundyungleich0: dec x
dec y
jmp start
ynachx: isz y
jmp yrunterxrauf
jmp yauf1
yrunterxrauf: inc x
dec y
jmp ynachx
yauf1: inc y
fertig: stp
x: 5
y: 3
Berechne die Summe der natürlichen Zahlen von 1 bis n, also 1+2+3+...+n.
- Vor dem Programmstart steht
- in Speicherzelle 23 ein beliebiger Wert n, z.B. der Wert 4.
- Nach dem Programmende steht
- in Speicherzelle 24 die Summe der natürlichen Zahlen von 1 bis 4, im Beispiel also der Wert 1+2+3+4 = 10.
"Kleiner Gauß 1 + 2 + 3 + ... + n = ?" Lösung in Assembler
start1: isz n
jmp nnachsundh
jmp htest
nnachsundh: dec n
inc s
inc h
jmp start1
htest: isz h
jmp hminus1
stp
hminus1: dec h
start2: isz h
jmp hnachn
jmp start1
hnachn: inc n
dec h
jmp start2
n: 4
s: 0
h: 0
Berechne das Produkt zweier Zahlen x und y.
- Vor dem Programmstart steht
- in Speicherzelle 23 ein beliebiger Wert x, z.B. der Wert 2, und
in Speicherzelle 24 ein beliebiger Wert y, z.B. der Wert 3. - Nach dem Programmende steht
- in Speicherzelle 25 das Produkt x * y, im Beispiel also der Wert 2*3 = 6.
Berechne den größten gemeinsamen Teiler zweier natürlicher Zahlen x und y, also den ggT von x und y.
- Vor dem Programmstart steht
- in Speicherzelle 27 eine beliebige natürliche Zahl x, z.B. der Wert 9 und
in Speicherzelle 28 eine beliebige natürliche Zahl y, z.B. der Wert 6. - Nach dem Programmende steht
- Speicherzelle 29 der ggT von x und y, im Beispiel also der Wert 3.
- Hinweis
- Für dieses Maschinenprogramm sollte der KHC mindestens 30 Speicherzellen besitzen.
Der ggT zweier natürlicher Zahlen x und y kann mit dem so genannten "Euklidischen Algorithmus" berechnet werden:
"ggT von x und y = ?" Lösung in Assembler
start: isz x
jmp xistungleich0
jmp xistgleich0
xistungleich0: isz y
jmp xundyungleich0
jmp xgroesser y
xistgleich0: isz y
jmp ygroesserx
jmp xundygleich0
xundyungleich0: dec x
dec y
inc z
jmp start
xundygleich0: stp
xgroessery: isz z
jmp znachy
jmp start
znachy: inc y
dec z
jmp xgroessery
ygroesserx: isz z
jmp znachx
jmp start
znachx: inc x
dec z
jmp ygroesserx
x: 9
y: 6
z: 0
Schaffst du das auch ohne Hilfe?
Hier kommen Aufgaben, zu denen es in diesem Lernpfad ganz bewusst keine Tipps und keine Lösungen gibt. Bist du so fit und schaffst es auch ohne Hilfe, diese KHC-Maschinenprogramme zu schreiben? Um dein Programm zu testen, verwende am besten den KHC-Emulator mit den 40 Speicherzellen in diesem Kapitel.
Kopiere den Inhalt von Zelle x so nach Zelle y, dass nach dem Programmende sowohl in x als auch in y der ursprüngliche Wert von x steht.
- Vor dem Programmstart steht
- in Speicherzelle x ein beliebiger Wert, z.B. der Wert 4, und
in den Speicherzellen y der Wert 0. - Nach dem Programmende steht
- in den Speicherzellen x und y der ursprüngliche Wert von x, also im Beispiel der Wert 4.
Verdopple den Wert in Zelle x.
- Vor dem Programmstart steht
- in Speicherzelle x ein beliebiger Wert, z.B. der Wert 5.
- Nach dem Programmende steht
- in Speicherzellen x das Doppelte seines ursprünglichen Wertes, im Beispiel also der Wert 10.
Berechne die Hälfte von x als ganze Zahl mit Rest. Beispiel: 7 / 2 = 3 Rest 1
- Vor dem Programmstart steht
- in Speicherzelle x ein beliebiger Wert, z.B. der Wert 7, und
in den Speicherzellen y und z der Wert 0. - Nach dem Programmende steht
- in Speicherzelle y die Hälfte des ursprünglichen x-Wertes, abgerundet auf eine ganze Zahl, im Beispiel also der Wert 3 und
in Speicherzelle z der Divisionsrest, im Beispiel also der Wert 1, denn 7 / 2 = 3 Rest 1.
Berechne den ganzzahligen Quotient von x geteilt durch y mit Rest, wobei der Versuch einer Division durch 0 abgefangen wird. Beispiel: 14 / 4 = 3 Rest 2
- Vor dem Programmstart steht
- in Speicherzelle x ein beliebiger Wert, z.B. der Wert 14,
in Speicherzelle y ein weiterer beliebiger Wert, z.B. der Wert 4 und
in den Speicherzellen q, r und f der Wert 0. - Nach dem Programmende steht
- in Speicherzelle q der ganzzahlige Quotient von x geteilt durch y, im Beispiel also der Wert 3, da die Zahl 4 dreimal vollständig in die 14 passt, und
in Speicherzelle r der Divisionsrest, im Beispiel also der Wert 2.
In Speicherzelle f steht normalerweise der Wert 0 außer in dem Fall, dass in y der Wert 0 stand, denn durch 0 darf bekanntlich nicht dividiert werden. In diesem Fehlerfall steht in f der Wert 1.
