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 233: | Zeile 233: | ||
: in Speicherzelle 25 das Produkt x * y, im Beispiel also der Wert 2*3 = 6. | : in Speicherzelle 25 das Produkt x * y, im Beispiel also der Wert 2*3 = 6. | ||
|3=Üben}} | |3=Üben}} | ||
{{Lösung versteckt | |||
|1= Lösungsidee: Der Wert y in M(24) wird so oft zu p in M(25) hinzuaddiert wie es der Wert x in M(23) angibt. Da nach dem einmaligen Hinzuaddieren von M(24) zu M(25) der Wert in M(24) gleich 0 ist, wird der Wert von M(24) bei diesem Hinzuaddieren zu M(25) gleichzeitig auch noch in die Hilfsspeicherzelle h mit M(22) "gerettet" und von dort aus anschließend wieder nach M(24) zurück kopiert. Nach jeder Erhöhung von M(25) um M(24) wird M(23) um 1 verringert. Dies wird solange wiederholt, bis M(23) gleich 0 ist. | |||
|2=Tipp anzeigen | |||
|3=Tipp verstecken}} | |||
{{Box | {{Box | ||
| Zeile 248: | Zeile 254: | ||
|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 | |2=Tipp anzeigen | ||
|3=Tipp | |3=Tipp verstecken}} | ||
{{Lösung versteckt | {{Lösung versteckt | ||
|1= start: isz x ; Ist x=0 ? | |1=„ggT von x und y = ?” Lösung in Assembler | ||
<pre> | |||
start: isz x ; Ist x=0 ? | |||
jmp xistungleich0 ; nein, dann y überprüfen ab Marke xistungleich0 | jmp xistungleich0 ; nein, dann y überprüfen ab Marke xistungleich0 | ||
jmp xistgleich0 ; ja, dann y | jmp xistgleich0 ; ja, dann y überprüf en ab Marke xistgleich0 | ||
xistungleich0: isz y ; Hier ist x!=0. Ist zusätzlich y=0? | 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 | jmp xundyungleich0 ; nein, dann ist x!=0 und y!=0, also ab Marke xundyungleich0 | ||
| Zeile 283: | Zeile 291: | ||
y: 6 ; Beispielwert für y | y: 6 ; Beispielwert für y | ||
z: 0 ; Vorgabewert für z | z: 0 ; Vorgabewert für z | ||
</pre> | |||
|2=Lösung in Assembler anzeigen | |2=Lösung in Assembler anzeigen | ||
|3=Lösunge in Assembler verstecken}} | |3=Lösunge in Assembler verstecken}} | ||
</div> | </div> | ||
</div> | </div> | ||
{{Fortsetzung| | {{Fortsetzung| | ||
Version vom 16. Juni 2025, 12:00 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.
