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 38: | Zeile 38: | ||
23: 3 | 23: 3 | ||
24: 5 | 24: 5 | ||
|Speicherkonfiguration3=# x * y = ? | |Speicherkonfiguration3=# Kleiner Gauß | ||
1: isz 23 | |||
2: jmp 4 | |||
3: jmp 8 | |||
|Speicherkonfiguration5=# | 4: dec 23 | ||
5: inc 24 | |||
6: inc 25 | |||
7: jmp 1 | |||
8: isz 25 | |||
9: jmp 11 | |||
10: stp | |||
11: dec 25 | |||
12: isz 25 | |||
13: jmp 15 | |||
14: jmp 1 | |||
15: inc 23 | |||
16: dec 25 | |||
17: jmp 12 | |||
18: 0 | |||
19: 0 | |||
20: 0 | |||
21: 0 | |||
22: 0 | |||
23: 4 | |||
24: 0 | |||
25: 0 | |||
|Speicherkonfiguration4=# x * y = ? | |||
1: isz 23 | |||
2: jmp 4 | |||
3: stp | |||
4: isz 24 | |||
5: jmp 7 | |||
6: jmp 11 | |||
7: dec 24 | |||
8: inc 25 | |||
9: inc 22 | |||
10: jmp 4 | |||
11: isz 22 | |||
12: jmp 14 | |||
13: jmp 17 | |||
14: dec 22 | |||
15: inc 24 | |||
16: jmp 11 | |||
17: dec 23 | |||
18: jmp 1 | |||
19: 0 | |||
20: 0 | |||
21: 0 | |||
22: 0 | |||
23: 2 | |||
24: 3 | |||
25: 0 | |||
|Speicherkonfiguration5=# | |||
|nohelp=true | |nohelp=true | ||
| Zeile 160: | Zeile 208: | ||
|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 | |2=Tipp 1 anzeigen | ||
|3=Tipp verstecken}} | |3=Tipp 1verstecken}} | ||
{{Lösung versteckt | |||
|1= start: isz x ; Ist x=0 ? | |||
jmp xistungleich0 ; nein, dann y überprüfen ab Marke xistungleich0 | |||
jmp xistgleich0 ; ja, dann y überprüfen ab Marke xistgleich0 | |||
xistungleich0: isz y ; Hier ist x!=0. Ist zusätzlich y=0? | |||
jmp xundyungleich0 ; nein, dann ist x!=0 und y!=0, also ab Marke xundyungleich0 | |||
; beide verringern und dann Schleife wiederholen | |||
jmp xgroesser y ; ja, dann ist x!=0 und y=0, also weiter bei Marke xgroessery | |||
xistgleich0: isz y ; Hier ist x=0. Ist zusätzlich y=0? | |||
jmp ygroesserx ; nein, dann ist x=0 und y!=0, also weiter bei Marke ygroesserx | |||
jmp xundygleich0 ; ja, dann ist x=0 und y=0, also weiter bei Marke xundygleich0 und fertig | |||
xundyungleich0: dec x ; Hier ist x!=0 und y!=0. Daher werden x und y verringert und dann | |||
; die Schleife wiederholt | |||
dec y | |||
inc z | |||
jmp start ; Schleifenende: Zurück zum Anfang in Marke start | |||
xundygleich0: stp ; fertig | |||
xgroessery: isz z ; Schleife, um z nach y zu verschieben | |||
jmp znachy | |||
jmp start ; wenn z ganz nach y verschoben, dann das Ganze von vorn | |||
znachy: inc y | |||
dec z | |||
jmp xgroessery | |||
ygroesserx: isz z ; Schleife, um z nach x zu verschieben | |||
jmp znachx | |||
jmp start ; wenn z ganz nach x verschoben, dann das Ganze von vorn | |||
znachx: inc x | |||
dec z | |||
jmp ygroesserx | |||
x: 9 ; Beispielwert für x | |||
y: 6 ; Beispielwert für y | |||
z: 0 ; Vorgabewert für z | |||
|2=Lösung in Assembler anzeigen | |||
|3=Lösunge in Assembler verstecken}} | |||
</div> | </div> | ||
</div> | </div> | ||
Version vom 15. Juni 2025, 15:30 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.
