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 31: | Zeile 31: | ||
14: stp | 14: stp | ||
21: 5 | 21: 5 | ||
22: | 22: 7 | ||
23: 0 | 23: 0 | ||
|Speicherkonfiguration3=# x - y = ? erweitert | |Speicherkonfiguration3=# x - y = ? erweitert | ||
| Zeile 150: | Zeile 150: | ||
|2=Tipp anzeigen|3=Tipp verstecken}} | |2=Tipp anzeigen|3=Tipp verstecken}} | ||
{{Lösung versteckt | {{Lösung versteckt | ||
|1=„x - y = ? (Betrag und Vorzeichen der Differenz für beliebige x und y)” in Assembler | |1=„x - y = ? (Betrag und Vorzeichen der Differenz für beliebige x und y)” in Assembler | ||
| Zeile 182: | Zeile 181: | ||
|3=Lösung in Assembler verstecken}} | |3=Lösung in Assembler verstecken}} | ||
{{Box | {{Box | ||
| Zeile 201: | Zeile 191: | ||
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. | 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}} | ||
{{Lösung versteckt | |||
|1= Lösungsidee: n wird in einer Schleife mehrfach zu s addiert, dabei aber bei jedem Schleifendurchgang um 1 verringert. Da bei jedem Additionsdurchgang der Wert in n auf 0 heruntergezählt wird, wird n jedesmal zusätzlich in der Hilfsspeicherstelle h gerettet. Vor dem Zurückspielen dieses geretteten Wertes von h nach n wird er um 1 verringert. So wird also schrittweise erst n nach s geschoben, dann n-1, dann n-2 usw. bis 1. | |||
|2=Tipp anzeigen | |||
|3=Tipp verstecken}} | |||
{{Lösung versteckt | |||
|1=„Kleiner Gauß 1 + 2 + 3 + ... + n = ?” Lösung in Assembler | |||
<pre> | |||
start1: isz n ; n=0? | |||
jmp nnachsundh ; nein: Weiter mit n nach s und h verschieben | |||
jmp htest ; ja: weiter mit htest | |||
nnachsundh: dec n | |||
inc s | |||
inc h | |||
jmp start1 ; Schleifenende von Verschiebung n nach s und h | |||
htest: isz h ; h=0? | |||
jmp hminus1 ; nein: Dann weiter bei hminus1 | |||
stp ; ja: fertig | |||
hminus1: dec h ; h um 1 verringern | |||
start2: isz h ; h=0? Schleifenanfang Rückverschiebung von verringertem h nach n | |||
jmp hnachn ; nein: Dann Rückverschiebung verringertes h nach n durchführen | |||
jmp start1 ; ja: Rückverschiebung von verringertem h nach n fertig, daher mit verringertem n von vorne | |||
hnachn: inc n | |||
dec h | |||
jmp start2 ; Schleifenende von Rückverschiebung h nach n | |||
n: 4 | |||
s: 0 ; Summenvariable | |||
h: 0 ; Hilfsvariable | |||
</pre> | |||
|2=Lösung in Assembler anzeigen | |||
|3=Lösung in Assembler verstecken}} | |||
| Zeile 219: | Zeile 241: | ||
; Nach dem Programmende steht | ; Nach dem Programmende steht | ||
: Speicherzelle 29 der ggT von x und y, im Beispiel also der Wert 3. | : Speicherzelle 29 der ggT von x und y, im Beispiel also der Wert 3. | ||
; Hinweis | |||
: Dieses Maschinenprogramm erfordert mehr als 25 Speicherzellen im Hauptspeicher. | |||
|3=Üben}} | |3=Üben}} | ||
Version vom 16. Juni 2025, 11:45 Uhr
Programmieraufgaben Teil 2
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.
