Racket Zahl umdrehen?
In der Aufgabe geht es darum, dass wenn eine Zahl eingegeben wird.
Z. B. 123, dann soll diese am Ende 321 (also umgedreht ausgegeben werden)
Falls die erste Zahl eine 0 wäre. Z. B. 1450590, dann wird 950541 ausgegeben ohne die Null am Anfang. Folgender Code wurde hier Programmiert der mir nicht verständlich ist:
Ich hab den Code mal in 3 Abschnitte unterteilt:
Mit (quotient 156 10) kriege ich 15 raus, d. h. ich kann sozusagen die letzte Ziffer von 156 wegschneiden, deshalb bleibt 15
(remainder 156 10) ist wie der modulo 156 = 15 * 10 + Rest 6
d. h. ich kriege hier 6 raus, die letzte Ziffer.
Was passiert hier im Code in der 3 und 4 Zeile?
In der 3 Zeile legt er eine Prozedur fest get-npart der 2 Parameter übergeben werden. Klar!
In der 4 Zeile
(quotient (remainder number (* part 10)) part))
Was passiert hier? Warum (* part 10)? Was soll part überhaupt sein?
Eine bestimmte Stelle der Zahl?
2 Antworten
Mit der bestimmten Stelle der Zahl liegst du im Wesentlichen richtig.
Mach mal einen "Schreibtisch-Test", d. h. führe das Programm "von Hand" für ein paar Eingaben aus. Möglicherweise reicht auch eine einzige Eingabe, sie sollte mindestens zweistellig sein.
Beobachte dabei insbesondere, was jeweils für part eingesetzt wird.
-----
Übrigens, poste Quelltext bitte auch als solchen und nicht als Foto des Monitors. Oder allerwenigstens als "Screenshot", womöglich nur des interessierenden Fensters.
Für Quelltext gibt es in der "Formatierungsleiste" über den Eingabefeldern hier das Symbol </>.
Ich frage mich wieso dein Lehrer solch kryptische Namen für die Prozeduren und Argumente verwendet. Will er es euch nicht zu leicht machen?
Die Prozedur get-npart ermittelt eine Ziffer der Zahl. part muss dabei immer eine Zehnerpotenz sein.
z.B. (get-npart 1 4925843) würde eine 3 liefern
(get-npart 10 4925843) liefert 4
(get-npart 100 4925843) liefert 8
(get-npart 1000 4925843) liefert 5
usw.
Bei (zahl-umdreher x cn t) wird cn für das Zwischenergebnis verwendet. In jeder Rekursion wird cn mit 10 multipliziert und dann die nächste Ziffer dazu addiert.
Die Lösung habe ich von einem Kommillitionen. Vielen Dank wiedermal.