rationale Zahl als Binärzahl < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 13:53 Di 12.11.2013 | Autor: | kRAITOS |
Aufgabe | Erweitern Sie ihr Programm so, dass es bei Eingabe zweier natürlicher Zahlen diese als Bruch interpretiert und die gegebene rationale Zahl in die Darstellung zur Basis 2 umrechnet. |
Hallo.
Das vorherige Programm war dafür gedacht, eine natürliche Zahl gegeben zur Basis 10 in die Darstellung zur Basis 2 umzurechnen.
So sieht es aus:
function Dual = dual(a)
z = [];
b = a;
while a >= 1;
a = b/2;
if floor(a) == a;
x = 0;
z = [z x];
elseif floor(a) ~= a;
x = 1;
z = [z x];
end
b = floor(a);
end
Dual = [];
for i = length(z):-1:1;
Dual = [Dual z(i)];
end
Jetzt weiß ich jedoch nicht wirklich weiter...
Ich habe mir überlegt, eine Variable c = a/b reinzuschreiben, damit erstmal die rationale Zahl erkannt wird.
Doch wie es dann weitergeht, ist mir gerade ein wenig schleierhaft...
Bis jetzt sieht es wie folgt aus:
function DualRat = dualrat(a,b)
z = [];
c = a/b;
while c < 1;
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 14:05 Di 12.11.2013 | Autor: | abakus |
> Erweitern Sie ihr Programm so, dass es bei Eingabe zweier
> natürlicher Zahlen diese als Bruch interpretiert und die
> gegebene rationale Zahl in die Darstellung zur Basis 2
> umrechnet.
> Hallo.
>
> Das vorherige Programm war dafür gedacht, eine natürliche
> Zahl gegeben zur Basis 10 in die Darstellung zur Basis 2
> umzurechnen.
>
>
> So sieht es aus:
>
>
> function Dual = dual(a)
> z = ;
> b = a;
> while a >= 1;
> a = b/2;
> if floor(a) == a;
> x = 0;
> z = [z x];
> elseif floor(a) ~= a;
> x = 1;
> z = [z x];
> end
> b = floor(a);
> end
> Dual = ;
> for i = length(z):-1:1;
> Dual = [Dual z(i)];
> end
>
>
>
> Jetzt weiß ich jedoch nicht wirklich weiter...
>
> Ich habe mir überlegt, eine Variable c = a/b
> reinzuschreiben, damit erstmal die rationale Zahl erkannt
> wird.
>
> Doch wie es dann weitergeht, ist mir gerade ein wenig
> schleierhaft...
>
>
> Bis jetzt sieht es wie folgt aus:
>
> function DualRat = dualrat(a,b)
> z = ;
> c = a/b;
> while c < 1;
Hallo,
ohne mich in dein Programm zu vertiefen:
Der Bruch ist als Summe von Brüchen 1/2, 1/4, 1/8, 1/16... darzustellen, die entweder je einmal verwendet oder eben nicht verwendet werden.
Nehmen wir z.B. 11/13.
Steckt 1/2 drin? Ja! Also schreiben wir eine 1.
Danach bleibt ein Rest von 11/13-1/2= 9/26.
Steckt 1/4 drin? Ja! Also wieder eine 1.
9/26-1/4=5/52. Steckt da 1/8 drin? Nein, also 0.
Der Bruch heißt bis hierher 0,110.
Nun schaut man, ob 1/16 in 5/52 enthalten ist und bildet den Rest usw.
Gruß Abakus
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 14:22 Di 12.11.2013 | Autor: | kRAITOS |
Ja das weiß ich aber ich weiß nicht, wie ich das umsetzen soll...
|
|
|
|
|
Hallo kRAITOS,
> Ja das weiß ich aber ich weiß nicht, wie ich das umsetzen
> soll...
Ein IF-Vergleich hilft.
Er sollte mit [mm] \ge [/mm] oder $<$ arbeiten.
Grüße
reverend
|
|
|
|
|
Status: |
(Frage) überfällig | Datum: | 15:51 Di 12.11.2013 | Autor: | kRAITOS |
Also bis jetzt sieht es bei mir so aus, hab das alte Programm versucht abzuändern aber es kommt keine Lösung raus...
Woran könnte das z.B. liegen?
function DualRat = dualrat(a,b)
z = [];
c = a/b;
while c < 1;
c = b*2;
if floor(c) == 0;
x = 0;
z = [z x];
elseif floor(c) ~= c;
x = 1;
z = [z x];
end
c = floor(b*2);
end
DualRat = [];
for i = length(z):-1:1;
DualRat = [DualRat z(i)];
end
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 16:20 Do 14.11.2013 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|