Aufgabe 7.3

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Aufgabe 7.3
Hab ich vom Ansatz her ähnlich wie die Palindrom-Aufgabe gelöst:

[CODE](define (list-sum L)
(do ((k L (list-tail k 1)) (sum 0 (+ sum (car k)))) ((null? k) sum) ()))

(define (quersumme zahl)
(list-sum (map string->number (map string (string->list (number->string zahl))))))

(define (divides3? n)
(if (< n 10)
(or (eq? n 3) (eq? n 6) (eq? n 9))
(divides3? (quersumme n))))[/CODE]


Da Krull so seltsam Befehle benutzt, die ich noch nie hörte: Hier eine längere Lösung mit mir bekannten Befehlen :smiley:

([CODE]define (Quersumme Zahl)
(cond ((< Zahl 10) Zahl)
(else (Berechnung Zahl 0))))

(define (Berechnung n Summe)
(cond ((< n 10) ( check(+ Summe n)))
(else (Berechnung (/ (- n (mod n 10)) 10) (+ Summe (mod n 10))))))

;Definieren der ModuloFunktion

(define (mod Zahl1 Zahl2)
(remainder Zahl1 Zahl2))

;Prüfen von der Quersumme nochmal die Quersumme gebildet werden muss

(define (check Summe)
(cond ((< Summe 10) Summe)
(else (Quersumme Summe))))[/CODE]


Warum definierst du dir die Modulo-Funktion neu? Du kannst entweder remainder oder modulo benutzen, beides gibt’s schon. Der Unterschied ist der, dass remainder das gleiche Vorzeichen wie der Zähler hat, und modulo das gleiche wie der Nenner.

Bei der Quersumme gehst du aber auch ein bisschen umständlich vor; das hier reicht doch auch:

(define (quersumme n) (if (< n 10) n (+ (quersumme (quotient n 10)) (remainder n 10))))