Lernpfad Know-How-Computer/KHC Programmieraufgaben Teil 1: Unterschied zwischen den Versionen
KKeine Bearbeitungszusammenfassung Markierung: Quelltext-Bearbeitung 2017 |
KKeine Bearbeitungszusammenfassung Markierung: Quelltext-Bearbeitung 2017 |
||
| Zeile 3: | Zeile 3: | ||
vorher=zurück|vorherlink=Benutzer:Ukalina/Lernpfad_Know-How-Computer/KHC-Emulator| | vorher=zurück|vorherlink=Benutzer:Ukalina/Lernpfad_Know-How-Computer/KHC-Emulator| | ||
weiter=weiter| | weiter=weiter| | ||
weiterlink=Benutzer:Ukalina/Lernpfad_Know-How-Computer/ | weiterlink=Benutzer:Ukalina/Lernpfad_Know-How-Computer/Know-How-Assembler| | ||
übersicht=Startseite|übersichtlink=Benutzer:Ukalina/Lernpfad_Know-How-Computer}} | übersicht=Startseite|übersichtlink=Benutzer:Ukalina/Lernpfad_Know-How-Computer}} | ||
| Zeile 131: | Zeile 131: | ||
vorher=zurück|vorherlink=Benutzer:Ukalina/Lernpfad_Know-How-Computer/KHC-Emulator| | vorher=zurück|vorherlink=Benutzer:Ukalina/Lernpfad_Know-How-Computer/KHC-Emulator| | ||
weiter=weiter| | weiter=weiter| | ||
weiterlink=Benutzer:Ukalina/Lernpfad_Know-How-Computer/ | weiterlink=Benutzer:Ukalina/Lernpfad_Know-How-Computer/Know-How-Assembler| | ||
übersicht=Startseite|übersichtlink=Benutzer:Ukalina/Lernpfad_Know-How-Computer}} | übersicht=Startseite|übersichtlink=Benutzer:Ukalina/Lernpfad_Know-How-Computer}} | ||
Version vom 8. Juni 2025, 16:33 Uhr
In den bisherigen Kapiteln hast du alles erfahren, was du zum Programmieren des Know-How-Computers wissen musst. Jetzt kannst du loslegen und deine eigenen Programme schreiben! Hier kommen ein paar Programmieraufgaben für dich. Die ersten sind „zum Warmwerden” noch ziemlich einfach, im zweiten Teil kommen aber auch einige deutlich anspruchsvollere Aufgaben. Bei allen Übungsaufgaben gehen wir von folgenden Grundvoraussetzungen aus:
- Im Startzustand ist der Hauptspeicher des KHC standardmäßig leer, das heißt, jede Zelle enthält von vornherein erst mal den Wert 0, solange nicht etwas anderes 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.
Berechne die Summe zweier Zahlen x und y.
- Vor dem Programmstart steht
- in Speicherzelle 7 ein beliebiger Wert x, z.B. der Wert 5 und
in Speicherzelle 8 ein beliebiger Wert y, z.B. der Wert 4. - Nach dem Programmende steht
- in Speicherzelle 7 die Summe x + y, im Beispiel also der Wert 9.
- Erweiterung
- Sorge zusätzlich dafür, dass am Ende in Speicherstelle 8 wieder der ursprüngliche Wert y steht.
Pseudocode für das Programm „x + y = ?”:
solange nicht y = 0 wiederhole erhöhe x um 1 verringere y um 1 solange_ende
; Lösung zur 1. Aufgabe: „x + y = ?” 1: isz 8; Ist y in Speicherzelle M(8) gleich 0? 2: jmp 4; Nein: weiter mit Befehl in Speicherzelle M(4) 3: stp ; Ja: Fertig 4: inc 7; Erhöhe x in Speicherzelle M(7) um 1 5: dec 8; Verringere y in Speicherzelle M(8) um 1 6: jmp 1; Zurück zu Befehl in Speicherzelle M(1) 7: 5 ; Startwert in Speicherzelle M(7) ist der Wert x=5 8: 4 ; Startwert in Speicherzelle M(8) ist der Wert y=4
Berechne die Differenz zweier Zahlen x und y, wobei vorausgesetzt wird, dass y nicht größer als x ist, das Ergebnis also nicht negativ werden kann.
- Vor dem Programmstart steht
- in Speicherzelle 7 ein beliebiger Wert x, z.B. der Wert 5 und
in Speicherzelle 8 ein beliebiger Wert y, der aber nicht größer als x sein darf, hier z.B. der Wert 3. - Nach dem Programmende steht
- in Speicherzelle 7 die Differenz x - y, im Beispiel also der Wert 2.
Entscheide, ob der Wert x in Speicherzelle 12 gerade oder ungerade ist.
- Vor dem Programmstart steht
- in Speicherzelle 12 ein beliebiger Wert x, z.B. der Wert 3 und
in Speicherzelle 13 der Wert 0. - Nach dem Programmende steht
- in Speicherzelle 13 der Wert 1, wenn der ursprüngliche Wert x eine ungerade Zahl war.
Wenn x gerade war, steht in Speicherzelle 13 weiterhin der Initialisierungswert 0.
Im Beispiel steht also am Ende in Speicherstelle 13 eine 1.
Pseudocode für das Programm „Ist x ungerade?”:
solange nicht x = 0 wiederhole
wenn y = 0
dann erhöhe y um 1
sonst verringere y um 1
wenn_ende
verringere x um 1
solange_ende
Lösung zur 3. Aufgabe: „Ist x ungerade?”
1: isz 12 ; x=0? 2: jmp 4 ; nein: weiter bei 4 3: stp ; ja: fertig 4: dec 12 5: isz 13 ; y=0? 6: jmp 10 ; nein: weiter bei 10 7: jmp 8 ; ja: weiter bei 8 8: inc 13 9: jmp 1 10: dec 13 11: jmp 1 12: 5 13: 0
Entscheide, ob die Werte x und y, die in zwei verschiedenen Speicherzellen stehen, gleich sind oder nicht.
- 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 3. - Nach dem Programmende steht
- in Speicherzelle 23 der Wert 1, wenn die ursprünglichen Werte x und y gleich waren, andernfalls steht
in Speicherzelle 23 weiterhin der Initialisierungswert 0.
x und y werden beide in einer Schleife heruntergezählt, solange dies möglich ist, solange also beide größer als 0 sind. Dabei müssen vor jedem Schleifendurchgang vier Fälle unterschieden werden:
- x>0 und y>0: Dann x und y beide verringern und Schleife wiederholen
- x=0 und y=0: Dann z=1 setzen und fertig
- x>0 und y=0: Dann z=0 lassen und fertig
- x=0 und y>0: Dann z=0 lassen und fertig
Lösung zur 4. Aufgabe: „Ist x = y?”
1: isz 21 ; Ist x=0 ? 2: jmp 4 ; nein: x>0, dann y überprüfen ab M(4) 3: jmp 7 ; ja: x=0, dann y überprüfen ab M(7) 4: isz 22 ; Hier ist x>0. Ist zusätzlich y=0? 5: jmp 10 ; nein: dann ist x>0 und y>0, also beide verringern und Schleife wiederholen ab M(10) 6: jmp 14 ; ja: dann ist x>0 und y=0, also fertig in M(14) 7: isz 22 ; Hier ist x=0. Ist zusätzlich y=0? 8: jmp 14 ; nein: dann ist x=0 und y>0, also fertig in M(14) 9: jmp 13 ; ja: dann ist x=0 und y=0, also z=1 in M(13) und fertig in M(14) 10: dec 21 ; Hier ist x>0 und y>0. Daher x und y verringern und dann Schleife wiederholen 11: dec 22 ; 12: jmp 1 ; zurück zum Schleifenanfang in M(1) 13: inc 23 ; Im Fall x=0 und y=0: z in M(23) von 0 auf 1 erhöhen und 14: stp ; fertig 21: 5 ; x 22: 3 ; y 23: 0 ; z
