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 10: | Zeile 10: | ||
{{Box|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.|Lernpfad}} | {{Box|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.|Lernpfad}} | ||
<div style="width: 100%; overflow: hidden;"> | |||
<div style="width: 40%; float: left;"> | |||
{{Box|1=Programm testen im KHC-Emulator | |||
|2={{KnowHowComputer | |||
|Speicherkonfiguration1=# Alles auf 0 | |||
|Speicherkonfiguration2=# x - y = ? Version 2 | |||
1: isz 23 | |||
2: jmp 4 | |||
3: jmp 7 | |||
4: isz 24 | |||
5: jmp 10 | |||
6: jmp 20 | |||
7: isz 24 | |||
8: jmp 13 | |||
9: jmp 20 | |||
10: dec 23 | |||
11: dec 24 | |||
12: jmp 1 | |||
13: isz 24 | |||
14: jmp 16 | |||
15: jmp 19 | |||
16: inc 23 | |||
17: dec 24 | |||
18: jmp 13 | |||
19: inc 24 | |||
20: stp | |||
23: 3 | |||
24: 5 | |||
|Speicherkonfiguration3=# x * y = ? | |||
|Speicherkonfiguration4=# Kleiner Gauß | |||
|Speicherkonfiguration5=# ggT von x und y | |||
|nohelp=true | |||
}} | |||
|3=Experimentieren | |||
}} | |||
</div> | |||
<div style="margin-left: 42%;"> | |||
{{Box | |||
|1=Auch hier gilt wieder für alle Übungsaufgaben: | |||
|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. | |||
|3=Kurzinfo}} | |||
{{Box|1=5. Aufgabe „Ist x < y ?”| 2=Entscheide, ob der Wert der Variablen x kleiner ist als der Wert der Variablen y. | |||
{{Box | |||
|1=5. Aufgabe „Ist x < 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 | ||
: in Speicherzelle 21 ein beliebiger Wert x, z.B. der Wert 5, und <br>in Speicherzelle 22 ein beliebiger Wert y, z.B. der Wert 7. | : in Speicherzelle 21 ein beliebiger Wert x, z.B. der Wert 5, und <br>in Speicherzelle 22 ein beliebiger Wert y, z.B. der Wert 7. | ||
; Nach dem Programmende steht | ; 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, <br>andernfalls steht in Speicherzelle 23 weiterhin der Initialisierungswert 0.|3=Üben}} | : in Speicherzelle 23 der Wert 1, wenn der ursprüngliche Wert von x kleiner als der ursprüngliche Wert von y war, <br>andernfalls steht in Speicherzelle 23 weiterhin der Initialisierungswert 0. | ||
|3=Üben}} | |||
{{Lösung versteckt | {{Lösung versteckt | ||
| Zeile 21: | Zeile 72: | ||
|2=Tipp anzeigen|3=Tipp verstecken}} | |2=Tipp anzeigen|3=Tipp verstecken}} | ||
{{Box|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. | {{Box | ||
|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. | |||
; Vor dem Programmstart steht | ; Vor dem Programmstart steht | ||
: in Speicherzelle 23 ein beliebiger Wert x, z.B. der Wert 3, und <br> in Speicherzelle 24 ein beliebiger Wert y, z.B. der Wert 5. | : in Speicherzelle 23 ein beliebiger Wert x, z.B. der Wert 3, und <br> in Speicherzelle 24 ein beliebiger Wert y, z.B. der Wert 5. | ||
; Nach dem Programmende steht | ; Nach dem Programmende steht | ||
: in Speicherzelle 23 der Betrag der Differenz x - y, im Beispiel also der Wert 2, <br>in Speicherzelle 24 der Wert 1, wenn das Ergebnis negativ ist und der Wert 0, wenn dies nicht der Fall ist. <br>Da im vorliegenden Beispiel das Ergebnis 3 - 5 = -2, also negativ ist, steht in diesem Fall <br>in Speicherzelle 23 der Betrag 2 und <br>in Speicherzelle 23 der Wert 1 für das negative Vorzeichen|3=Üben}} | : in Speicherzelle 23 der Betrag der Differenz x - y, im Beispiel also der Wert 2, <br>in Speicherzelle 24 der Wert 1, wenn das Ergebnis negativ ist und der Wert 0, wenn dies nicht der Fall ist. <br>Da im vorliegenden Beispiel das Ergebnis 3 - 5 = -2, also negativ ist, steht in diesem Fall <br>in Speicherzelle 23 der Betrag 2 und <br>in Speicherzelle 23 der Wert 1 für das negative Vorzeichen | ||
|3=Üben}} | |||
{{Lösung versteckt | {{Lösung versteckt | ||
| Zeile 61: | Zeile 115: | ||
y: 3 | y: 3 | ||
</pre> | </pre> | ||
|2=Lösung in Assembler anzeigen|3=Lösung in Assembler verstecken}} | |2=Lösung in Assembler anzeigen | ||
|3=Lösung in Assembler verstecken}} | |||
| Zeile 67: | Zeile 122: | ||
|1=„x - y = ? (Betrag und Vorzeichen der Differenz für beliebige x und y)” in Maschinensprache | |1=„x - y = ? (Betrag und Vorzeichen der Differenz für beliebige x und y)” in Maschinensprache | ||
<pre> | <pre> | ||
</pre> | </pre> | ||
|2=Lösung in Maschinensprache anzeigen|3=Lösung in Maschinensprache verstecken}} | |2=Lösung in Maschinensprache anzeigen | ||
|3=Lösung in Maschinensprache verstecken}} | |||
--> | --> | ||
| Zeile 102: | Zeile 137: | ||
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}} | ||
{{Box | {{Box | ||
| Zeile 113: | Zeile 149: | ||
{{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 124: | Zeile 160: | ||
|1= Der ggT zweier natürlicher Zahlen x und y kann mit dem so genannten „Euklidischen Algorithmus“ berechnet werden:<br> | |1= 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) | „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) | ||
|2=Tipp anzeigen|3=Tipp | |2=Tipp anzeigen | ||
|3=Tipp verstecken}} | |||
</div> | |||
</div> | |||
<!-- | <!-- | ||
Hinweis: Im Javascript-Code khc-emulator.html kann die Anzahl der verfügbaren Hauptspeicherzellen ganz oben in der Variablen speicheranzahl verändert werden. Der Standardwert ist speicheranzahl = 25; kann aber bei umfangreicheren Programmen beliebig erhöht werden. Bei diesem ggT-Programm bietet sich z.B. der Wert speicheranzahl = 30 an. | Hinweis: Im Javascript-Code khc-emulator.html kann die Anzahl der verfügbaren Hauptspeicherzellen ganz oben in der Variablen speicheranzahl verändert werden. Der Standardwert ist speicheranzahl = 25; kann aber bei umfangreicheren Programmen beliebig erhöht werden. Bei diesem ggT-Programm bietet sich z.B. der Wert speicheranzahl = 30 an. | ||
Version vom 15. Juni 2025, 15:18 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.
