Nachricht für neue Nutzer.
Nachricht für engagierte Nutzer.
Lernpfad Know-How-Computer/KHC Programmieraufgaben Teil 2: Unterschied zwischen den Versionen
Aus ZUM-Unterrichten
KKeine Bearbeitungszusammenfassung Markierung: Quelltext-Bearbeitung 2017 |
KKeine Bearbeitungszusammenfassung Markierung: Quelltext-Bearbeitung 2017 |
||
| Zeile 8: | Zeile 8: | ||
übersichtlink=Benutzer:Ukalina/Lernpfad_Know-How-Computer}} | übersichtlink=Benutzer:Ukalina/Lernpfad_Know-How-Computer}} | ||
{{Box|Anspruchsvollere Programmieraufgaben für Könner|Hier kommen ein paar weitere Programmieraufgaben, die schon etwas anspruchsvoller sind. Entsprechend länger und unübersichtlicher sind die Maschinenprogramme. Daher macht es Sinn, erst ein Assemblerprogramm zu schreiben. Auch dieses kann man mit Stift und Streichhölzern erst mal | {{Box|Anspruchsvollere Programmieraufgaben für Könner|Hier kommen ein paar weitere Programmieraufgaben, die schon etwas anspruchsvoller sind. Entsprechend länger und unübersichtlicher sind die Maschinenprogramme. Daher macht es Sinn, erst ein Assemblerprogramm zu schreiben. Auch dieses kann man mit Stift und Streichhölzern erst mal von Hand auf dem Papier testen. Anschließend kann man es in die KHC-Maschinensprache übersetzen, um es z.B. im KHC-Emulator laufen zu lassen.|Lernpfad}} | ||
<div style="width: 100%; overflow: hidden;"> | <div style="width: 100%; overflow: hidden;"> | ||
| Zeile 167: | Zeile 167: | ||
{{Box | {{Box | ||
|1=5. Aufgabe | |1=5. Aufgabe "Ist x < y ?" | ||
|2=Entscheide, ob der Wert der Variablen x kleiner ist als der Wert der Variablen y. | |2=Entscheide, ob der Wert der Variablen x kleiner ist als der Wert der Variablen y. | ||
; Vor dem Programmstart steht | ; Vor dem Programmstart steht | ||
| Zeile 176: | Zeile 176: | ||
{{Lösung versteckt | {{Lösung versteckt | ||
|1= Hier kann man sich am Grundaufbau des Programms aus der 4. Aufgabe | |1= Hier kann man sich am Grundaufbau des Programms aus der 4. Aufgabe "Ist x = y ?" und an den entsprechenden Tipps orientieren. | ||
|2=Tipp anzeigen|3=Tipp verstecken}} | |2=Tipp anzeigen|3=Tipp verstecken}} | ||
{{Box | {{Box | ||
|1=6. Aufgabe | |1=6. Aufgabe "x - y = ? (Betrag und Vorzeichen der Differenz für beliebige x und y)" | ||
|2=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. | |2=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 | ; Vor dem Programmstart steht | ||
| Zeile 190: | Zeile 190: | ||
{{Lösung versteckt | {{Lösung versteckt | ||
|1= Auch hier ist es sinnvoll, wie in den Programmen | |1= Auch hier ist es sinnvoll, wie in den Programmen "Ist x = y ?" und "Ist x < y ?" eine entsprechende Fallunterscheidung durchzuführen. | ||
|2=Tipp anzeigen|3=Tipp verstecken}} | |2=Tipp anzeigen|3=Tipp verstecken}} | ||
{{Lösung versteckt | {{Lösung versteckt | ||
|1= | |1="x - y = ? (Betrag und Vorzeichen der Differenz für beliebige x und y)" in Assembler | ||
<pre> | <pre> | ||
start: isz x | start: isz x | ||
jmp | jmp xistungleich0 | ||
jmp | jmp xistgleich0 | ||
xistungleich0: isz y | xistungleich0: isz y | ||
jmp | jmp xundyungleich0 | ||
jmp fertig | |||
jmp | xistgleich0: isz y | ||
xistgleich0: isz y | jmp ynachx | ||
jmp ynachx | jmp fertig | ||
jmp | xundyungleich0: dec x | ||
xundyungleich0: dec x | |||
dec y | dec y | ||
jmp start | jmp start | ||
ynachx: isz y | ynachx: isz y | ||
jmp yrunterxrauf | jmp yrunterxrauf | ||
jmp yauf1 | jmp yauf1 | ||
yrunterxrauf: inc x | yrunterxrauf: inc x | ||
dec y | dec y | ||
jmp ynachx | jmp ynachx | ||
yauf1: inc y | yauf1: inc y | ||
fertig: stp | fertig: stp | ||
x: 5 | x: 5 | ||
y: 3 | y: 3 | ||
| Zeile 226: | Zeile 224: | ||
{{Box | {{Box | ||
|1=7. Aufgabe | |1=7. Aufgabe "Kleiner Gauß 1 + 2 + 3 + ... + n = ?" | ||
|2=Berechne die Summe der natürlichen Zahlen von 1 bis n, also 1+2+3+...+n. | |2=Berechne die Summe der natürlichen Zahlen von 1 bis n, also 1+2+3+...+n. | ||
; Vor dem Programmstart steht | ; Vor dem Programmstart steht | ||
| Zeile 232: | Zeile 230: | ||
; Nach dem Programmende steht | ; 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. | : in Speicherzelle 24 die Summe der natürlichen Zahlen von 1 bis 4, im Beispiel also der Wert 1+2+3+4 = 10. | ||
Das Programm heißt | Das Programm heißt "Kleiner Gauß", weil der berühmte Mathematiker Carl Friedrich Gauß einer Anekdote nach in der Schule schon als kleiner Junge die Summe der natürlichen Zahlen von 1 bis 100 sehr schnell mithilfe einer Formel berechnete, die er selbst entdeckt hatte und die heute als Gaußsche Summenformel bekannt ist. | ||
|3=Üben}} | |3=Üben}} | ||
| Zeile 244: | Zeile 242: | ||
{{Lösung versteckt | {{Lösung versteckt | ||
|1= | |1="Kleiner Gauß 1 + 2 + 3 + ... + n = ?" Lösung in Assembler | ||
<pre> | <pre> | ||
start1: isz n | start1: isz n | ||
jmp nnachsundh | jmp nnachsundh | ||
jmp htest ; ja: weiter mit htest | jmp htest ; ja: weiter mit htest | ||
nnachsundh: dec n | nnachsundh: dec n | ||
inc s | inc s | ||
inc h | inc h | ||
jmp start1 | jmp start1 | ||
htest: isz h | htest: isz h | ||
jmp | jmp hminus1 | ||
stp | stp | ||
hminus1: dec h | hminus1: dec h | ||
start2: isz h | start2: isz h | ||
jmp hnachn | |||
jmp hnachn | jmp start1 | ||
jmp start1 | |||
hnachn: inc n | hnachn: inc n | ||
dec h | dec h | ||
jmp start2 | jmp start2 | ||
n: 4 | n: 4 | ||
s: 0 | s: 0 | ||
h: 0 | h: 0 | ||
</pre> | </pre> | ||
|2=Lösung in Assembler anzeigen | |2=Lösung in Assembler anzeigen | ||
| Zeile 276: | Zeile 270: | ||
{{Box | {{Box | ||
|1=8. Aufgabe | |1=8. Aufgabe "Produkt x * y = ?" | ||
|2=Berechne das Produkt zweier Zahlen x und y. | |2=Berechne das Produkt zweier Zahlen x und y. | ||
; Vor dem Programmstart steht | ; Vor dem Programmstart steht | ||
| Zeile 293: | Zeile 287: | ||
{{Box | {{Box | ||
|1=9. Aufgabe | |1=9. Aufgabe "Größter gemeinsamer Teiler ggT von x und y = ?" | ||
|2=Berechne den größten gemeinsamen Teiler zweier natürlicher Zahlen x und y, also den ggT von x und y. | |2=Berechne den größten gemeinsamen Teiler zweier natürlicher Zahlen x und y, also den ggT von x und y. | ||
; Vor dem Programmstart steht | ; Vor dem Programmstart steht | ||
| Zeile 306: | Zeile 300: | ||
|1={{Box | |1={{Box | ||
|1=Lösungsidee | |1=Lösungsidee | ||
|2=Der ggT zweier natürlicher Zahlen x und y kann mit dem so genannten | |2=Der ggT zweier natürlicher Zahlen x und y kann mit dem so genannten "Euklidischen Algorithmus" berechnet werden:<br> | ||
"Euklid berechnete den größten gemeinsamen Teiler, indem er nach einem gemeinsamen 'Maß' für die Längen zweier Linien suchte. Dazu zog er wiederholt die kleinere der beiden Längen von der größeren ab. Dabei nutzt er aus, dass sich der größte gemeinsame Teiler zweier Zahlen (oder Längen) nicht ändert, wenn man die kleinere von der größeren abzieht." (siehe Wikipedia: https://de.wikipedia.org/wiki/Euklidischer_Algorithmus) | |||
|3=Unterrichtsidee}} | |3=Unterrichtsidee}} | ||
|2=Tipp anzeigen | |2=Tipp anzeigen | ||
| Zeile 313: | Zeile 307: | ||
{{Lösung versteckt | {{Lösung versteckt | ||
|1= | |1="ggT von x und y = ?" Lösung in Assembler | ||
<pre> | <pre> | ||
start: isz x | start: isz x | ||
Version vom 15. Juli 2025, 12:22 Uhr
Anspruchsvollere Programmieraufgaben für Könner
Hier kommen ein paar weitere Programmieraufgaben, die schon etwas anspruchsvoller sind. Entsprechend länger und unübersichtlicher sind die Maschinenprogramme. Daher macht es Sinn, erst ein Assemblerprogramm zu schreiben. Auch dieses kann man mit Stift und Streichhölzern erst mal von Hand auf dem Papier testen. Anschließend kann man es in die KHC-Maschinensprache übersetzen, um es z.B. im KHC-Emulator laufen zu lassen.
