Peruzzi
Domaćin
- Poruka
- 4.066
Kako da prevedem dekadni broju binarni?
Svuda ima za prirodne brojeve, a to sam i sam se snasao, deljenje sa dva pa ostatak ili ubacivanje stepena dvojke pa oduzimanje. svejedno oba rade, ali sta da radim sa onim IZA zareza?
Uradio sam nesto koda i pretvara recimo 0.625, 0.75, 0.5, i slicne kako treba a recimo za 0.87 udje u mrtvu petlju, pa sam ogranicio na max sto cifara i izbaci neki stocifreni niz 1 i 0, i najbudjavije od svega taj broj ne mogu da konvertujem posle u dekadni, izbaci gresku
Evo vam kod koji prevodi sve to, ono sto nema to je da je edit1 edit kontrola u koju se ukucava broj koji se konvertuje a edit2 je rezultat konverzije
delphi naravno
procedure TForm1.Button1Click(Sender: TObject);
{convert}
var
dva,i,poz:integer; {stepen dvojke prilikom konverzije celog dela, 2 4 8}
vrednost:real; {rezultat}
ceo:integer; {ceo deo dec broja}
neceo:real; {deo iza zareza dekadnog broja}
konvertovan:string; {string u kome se cuva rezultat}
broj:string; {broj koji se konvertuje, broj=ceo+neceo}
dvadva:real; {stepen dvojke prilikom konverzije necelog dela, 0.5 0.25}
cifre:integer; {broj cifara u bin broju iza zareza}
begin
if converzija then {ako je konverzija binarni u dekadni, tj deo koda koji pretvara bin u dec}
begin
poz:=pos('.',edit1.Text);
dva:=1;
vrednost:=0;
for i:=poz-1 downto 1 do
begin
vrednost:=vrednost+StrtoFloat(edit1.text)*dva;
dva:=dva*2;
end;
dva:=1;
for i:=poz to length(edit1.Text) do
begin
vrednost:=vrednost+StrToFloat(edit1.Text)*(1/dva);
dva:=dva*2;
end;
edit2.Text:=floattostr(vrednost);
end
else {ako je dekadni u binarni, tj deo koda za konverziju dekadnog u binarni}
begin
{razdvoji na ceo deo i deo iza zareza,
ceo deo pretvara deljenjem sa dva pa na ostatak,
neceo deo (iza zareza) pretvara stavljanjem stepena dvojke i oduzimanjem}
broj:=edit1.text;
{razdvaja}
neceo:=strtofloat(copy(broj, pos('.',broj),length(broj)-pos('.',broj)+1));
ceo:=strtoint(copy(broj, 1, pos('.',broj)-1));
{pretvara ceo}
repeat
konvertovan:=inttostr(ceo mod 2) + konvertovan;
ceo:=ceo div 2;
until ceo=0;
{pretvara neceo}
dvadva:=0.5;
konvertovan:=konvertovan+'.';
cifre:=0;
repeat
cifre:=cifre+1; {izbegava mrtvu petlju}
if dvadva<=neceo then begin
neceo:=neceo-dvadva;
konvertovan:=konvertovan+'1';
end
else konvertovan:=konvertovan+'0';
dvadva:=dvadva*0.5;
until ((neceo=0.0) or (cifre=100));
edit2.text:=konvertovan;
end;
end;
prijatno
Svuda ima za prirodne brojeve, a to sam i sam se snasao, deljenje sa dva pa ostatak ili ubacivanje stepena dvojke pa oduzimanje. svejedno oba rade, ali sta da radim sa onim IZA zareza?
Uradio sam nesto koda i pretvara recimo 0.625, 0.75, 0.5, i slicne kako treba a recimo za 0.87 udje u mrtvu petlju, pa sam ogranicio na max sto cifara i izbaci neki stocifreni niz 1 i 0, i najbudjavije od svega taj broj ne mogu da konvertujem posle u dekadni, izbaci gresku
Evo vam kod koji prevodi sve to, ono sto nema to je da je edit1 edit kontrola u koju se ukucava broj koji se konvertuje a edit2 je rezultat konverzije
delphi naravno
procedure TForm1.Button1Click(Sender: TObject);
{convert}
var
dva,i,poz:integer; {stepen dvojke prilikom konverzije celog dela, 2 4 8}
vrednost:real; {rezultat}
ceo:integer; {ceo deo dec broja}
neceo:real; {deo iza zareza dekadnog broja}
konvertovan:string; {string u kome se cuva rezultat}
broj:string; {broj koji se konvertuje, broj=ceo+neceo}
dvadva:real; {stepen dvojke prilikom konverzije necelog dela, 0.5 0.25}
cifre:integer; {broj cifara u bin broju iza zareza}
begin
if converzija then {ako je konverzija binarni u dekadni, tj deo koda koji pretvara bin u dec}
begin
poz:=pos('.',edit1.Text);
dva:=1;
vrednost:=0;
for i:=poz-1 downto 1 do
begin
vrednost:=vrednost+StrtoFloat(edit1.text)*dva;
dva:=dva*2;
end;
dva:=1;
for i:=poz to length(edit1.Text) do
begin
vrednost:=vrednost+StrToFloat(edit1.Text)*(1/dva);
dva:=dva*2;
end;
edit2.Text:=floattostr(vrednost);
end
else {ako je dekadni u binarni, tj deo koda za konverziju dekadnog u binarni}
begin
{razdvoji na ceo deo i deo iza zareza,
ceo deo pretvara deljenjem sa dva pa na ostatak,
neceo deo (iza zareza) pretvara stavljanjem stepena dvojke i oduzimanjem}
broj:=edit1.text;
{razdvaja}
neceo:=strtofloat(copy(broj, pos('.',broj),length(broj)-pos('.',broj)+1));
ceo:=strtoint(copy(broj, 1, pos('.',broj)-1));
{pretvara ceo}
repeat
konvertovan:=inttostr(ceo mod 2) + konvertovan;
ceo:=ceo div 2;
until ceo=0;
{pretvara neceo}
dvadva:=0.5;
konvertovan:=konvertovan+'.';
cifre:=0;
repeat
cifre:=cifre+1; {izbegava mrtvu petlju}
if dvadva<=neceo then begin
neceo:=neceo-dvadva;
konvertovan:=konvertovan+'1';
end
else konvertovan:=konvertovan+'0';
dvadva:=dvadva*0.5;
until ((neceo=0.0) or (cifre=100));
edit2.text:=konvertovan;
end;
end;
prijatno