Zahlendarstellung < Algorithmen < Schule < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 18:12 Do 30.11.2006 | Autor: | SUNNY000 |
Hallo, ich muss eine Aufgabe lösen, und weiß nicht wie ich diesen Algorithmus schreiben soll. Kann mir da bitte jemand helfen?
Zu jeder reellen Zahl a [mm] \in \IR [/mm] , 0 <= a < 1 und jeder natürlichen Zahl b [mm] \in \IN, [/mm] b >= (Basis) lassen sich Ziffern [mm] a_{-1}, a_{-2}, [/mm] . . . zwischen 0 und b-1 finden, so dass gilt
a = [mm] \summe_{k=1}^{\infty}b^{-k}a_{-k}
[/mm]
Man nennt dann 0, [mm] a_{-1}, a_{-2} [/mm] . . . eine Darstellung von a zur Basis b.
Geben Sie einen Algorithmus an, der eine beliebige Zahl a mit 0 < a < 1 in die gewünschte Darstellung zu einer Basis b umwandelt. Der Algorithmus soll n Nachkommastellen ausgeben und dann ohne Rundung
abbrechen. Beispiel: 0, [mm] 78539_{10} \mapsto [/mm] 0, [mm] 1100100_{2} [/mm] für n = 7 Nachkommastellen.
Kann mir bitte jemand sagen, wie ich ungefähr die aufgabe lösen kann?
|
|
|
|
Hallo SUNNY000!
> Hallo, ich muss eine Aufgabe lösen, und weiß nicht wie ich
> diesen Algorithmus schreiben soll. Kann mir da bitte jemand
> helfen?
> Zu jeder reellen Zahl a [mm]\in \IR[/mm] , 0 <= a < 1 und jeder
> natürlichen Zahl b [mm]\in \IN,[/mm] b >= (Basis) lassen sich
> Ziffern [mm]a_{-1}, a_{-2},[/mm] . . . zwischen 0 und b-1 finden,
> so dass gilt
> a = [mm]\summe_{k=1}^{\infty}b^{-k}a_{-k}[/mm]
> Man nennt dann 0, [mm]a_{-1}, a_{-2}[/mm] . . . eine Darstellung
> von a zur Basis b.
> Geben Sie einen Algorithmus an, der eine beliebige Zahl a
> mit 0 < a < 1 in die gewünschte Darstellung zu einer Basis
> b umwandelt. Der Algorithmus soll n Nachkommastellen
> ausgeben und dann ohne Rundung
> abbrechen. Beispiel: 0, [mm]78539_{10} \mapsto[/mm] 0,
> [mm]1100100_{2}[/mm] für n = 7 Nachkommastellen.
> Kann mir bitte jemand sagen, wie ich ungefähr die aufgabe
> lösen kann?
Hast du selber mal Zahlen von einem in ein anderes Zahlensystem umgewandelt? Wenn nicht, wäre es vielleicht nicht schlecht, das ein paar mal zu machen, damit du auch verstehst, warum der Algorithmus so funktioniert. Ich mache es dir mal für ein Beispiel vor, wir wollen die Dezimalzahl 25 in eine Dualzahl (also zur Basis 2) umwandeln. Dafür berechnen wir zuerst 25 geteilt durch 2, wobei wir im Folgenden immer eine Division ohne Rest machen, den Rest schmeißen wir also einfach weg. Wir erhalten:
25/2=12
Das ist die Zahl, mit der wir gleich weiterrechnen müssen. Vorher müssen wir aber noch den Rest dieser Division herausfinden (also genau das, was wir vernachlässigt haben), das machen wir mit "mod" (kennst du das?):
25 mod 2=1
Das ist ein Teil unserer Lösung. Jetzt rechnen wir mit der 12 weiter und machen wieder genau dasselbe: erst ohne Rest dividieren, und dann den Rest bestimmen:
12/2=6
12 mod 2=0
Jetzt mit der 6:
6/2=3
6 mod 2=0
Und nun mit der 3:
3/2=1
3 mod 2=1
Und zuletzt noch mit der 1, dann bleibt nur noch die Null übrig:
1/2=0
1 mod 2=1
Unser Ergebnis erhalten wir jetzt, indem wir die Zahlen (die bei den mod-Rechnungen rauskamen) von unten nach oben als unsere Zahl schreiben:
11001.
Das ist 25 im Dualsystem, denn diese Zahl bedeutet ja: [mm] 1*2^4+1*2^3+0*2^2+0*2^1+1*2^0=16+8+0+0+1=25. [/mm]
Du musst also in deinem Algorithmus eine Schleife machen, in der du immer ohne Rest dividierst, mit dem Ergebnis dann später weiterrechnest, vorher aber noch den Rest bei der Division berechnest, und am Ende die Zahlen in der richtigen Reihenfolge ausgibst.
Viele Grüße
Bastiane
|
|
|
|