Aufgabe 7.4

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.4
Es gibt eine Bibliotheksfunktion, die Basisumwandlung beherrscht, aber wahrscheinlich ist das etwas zu billig:

(define (dezimal->binär n) (number->string n 2))

Dann eben etwas länger:

(define (dezimal->binär n) (string-append (if (>= n 2) (dezimal->binär (quotient n 2)) "") (number->string (modulo n 2))))

Und noch allgemein für eine Basis b:

(define (andere_basis n b) (string-append (if (>= n b) (andere_basis (quotient n b) b) "") (number->string (modulo n b))))

Nicht immer “abschreiben”
Man soll meiner Meinung nach in Algo was lernen - nicht lesen und dann eine Lib benutzen…
Also, hier mein Vorschlag, bei dem man auch was lernen kann:

(define (baseconf dezimal to) (define (tobin-it dezimal) (begin (letrec ((x (modulo dezimal to)) (r (truncate(/ dezimal to)))) (if (NOT (zero? dezimal)) (begin (tobin-it r) (display (number->string x)) ) )))) (tobin-it dezimal))
Ach, ich benutze dabei übrigens das Horner-Scheme, das jeder aus OTRS1 kennen sollte…


Ich hab’ des noch mal anders gelöst. Bei mir kommen überhaupt keine Strings mehr vor…

[CODE]
(define dec-bin
(lambda (x)
(bin-iter x 0 0)))

(define bin-iter
(lambda (dec bin counter)
(if (zero? dec)
bin
(bin-iter
(quotient dec 2)
(+ bin (* (modulo dec 2) (expt 10 counter)))
(+ counter 1)))))[/CODE]
Das ganze beruht auf der Division-mit-Rest-Methode, auch aus OTRS-I. :type:


Auch schoen!!!
Mit meiner Loesung kann man allerdings jedes Zahlensystem Z(B) zur Basis B ins Dezimalsystem Z(10) umwandeln.
Aber Dein Weihnachtsmannsmilie ist spitze!!!


Dafuer gibt meines eine schoene Binaerzahl aus und nicht nur einzelne Ziffern… :wink:
Aber ich will ja dein Quality-Posting nicht wertmindern, also quasi dekrementieren…


Na, dann sind wir ja genau einer Meinung!
Vielleicht sollten wir qualitativ hochwertigste funktionale Scheme-skripte zusammen posten… :slight_smile:


Au ja! :bounce: