[ harry.h @ 03.10.2004. 14:15 ] @
Pozdarav svima ja sam novi clan pa molim pomoc.Treba mi ako ko zna program ili algoritam za pascal.Zadatak glasi:Izraditi program koji za uneseni decimalini broj pretvara u binarni.
[ bancika @ 03.10.2004. 16:49 ] @
"evo resenjaaaa" :)
Code:

var binarni: string;
     dec: Integer;
begin
  ReadLn(dec);
  binarni := '';
  repeat
    binarni := binarni + Chr(Ord('0') + dec mod 2);
    dec := dec div 2
  until dec = 0;
  WriteLn(binarni); 
end.

ovo je iz glave, al mislim da je ok.
mozes u proizvoljnu bazu da prevodis uz male modifikacije. ako je baza manja od 10 onda zameni 2 sa osnovom te baze, a ako je veca od 10 onda bi islo
Code:

  binarni := binarni + hex[dec mod b];

gde je hex konstanta '0123456789ABCDEF', a b osnova baze

valjda je pomoglo :)
pozdrav
[ TvrdiMijo @ 03.10.2004. 19:56 ] @
banicka,mislim da ovo ne šljaka kako treba.

prvo,decimalni broj treba rastaviti na cijeli dio i decimalni dio,a zatim svaki posebno pretvorit u binarni zapis.cijeli dio se lako pretvori djeljenjem s 2 (a ostatak je binarna znamenka),dok se decimalni pretvara ovako:decimalni dio se pomnoži s dva,a znamenka je cijeli dio novog broja(0 ili 1).zatim se od tog broja oduzme 1(ako isti nije jedan,inače je kraj)i ponovno isti postupak.za razliku od cijelih,ovaj postupak može potrajat beskonačno iteracija,stoga je potrebno odraditi neku granicu(recimo 8 ponavljanja).primjer:
3.75=
cijeli dio =3(baza 10)=11(baza 2)
razlomljeni dio 1. 0.75*2=1.5(prva znamenka je 1)(ostatak je 1.5-1=0.5)
2. 0.50*2=1.0(prva znamenka je 1)(ostatak je 1.0-1=0.0,i tu je kraj)
=11.
dakle 3.72(baza 10)=11.11(baza 2);

na osnovu ovog algoritma nije teško sastavit program.Meni se sada neda,ali ako treba...
[ bancika @ 03.10.2004. 21:20 ] @
pa da, ja sam razumeo DEKADNI...u pravu si
ovo moje se odnosilo samo na cele brojeve, zbog toga je dec: Integer
[ harry.h @ 04.10.2004. 20:56 ] @
Cool,kuzim ovo gore,al moze li sada sve u potpunosti da mi ispisete.Ajde pa cu i ja vama pomagat za koji mjesec jer sam sada pocetnik pa je svaka pomoc dobra.
[ Almedin @ 04.10.2004. 21:39 ] @
Kako bi islo za 3.20?
[ bancika @ 05.10.2004. 00:01 ] @
trebalo bi ovako nesto da bude
Code:

var broj, raz: real;
     ceo, i: integer;
     binarni: string;
//prvo celi deo
begin
  read(broj);
  ceo := trunc(broj);
  raz := frac(broj);
  binarni := '';
  repeat
    binarni := binarni + Chr(Ord('0') + dec mod 2);
    dec := dec div 2
  until dec = 0;
  binarni := binarni + '.';
  i := 0;
  repeat
    Inc(i);
    raz := raz * 2;
    binarni := binarni + Chr(Ord('0') + trunc(raz));  
    raz := frac(raz);
  until (raz = 1) or (i = 10); //ili postavi i na koliko hoces
  WriteLn(binarni);
end.

[ TvrdiMijo @ 05.10.2004. 23:19 ] @
mala ispravka:

Code:

var broj, raz: real;
     ceo, i: integer;
     binarni: string;
//prvo celi deo
begin
  read(broj);
  ceo := trunc(broj);
  raz := frac(broj);
  binarni := '';
  repeat
    binarni := binarni + Chr(Ord('0') + ceo mod 2);
    ceo := ceo div 2
  until ceo = 0;
  binarni := binarni + '.';
  i := 0;
  repeat
    Inc(i);
    raz := raz * 2;
    binarni := binarni + Chr(Ord('0') + trunc(raz));  
    raz := frac(raz);
  until (raz = 0) or (i = 10); //ili postavi i na koliko hoces
  WriteLn(binarni);
end.
 


3.20(10)=
3(10)=
3 div 2=1,3 mod 2=1;z1=1;
1 div 2=0,1 mod 2=1;z2=1;
0.20(10)=
0.20*2=0.40;z1=0;
0.40*2=0.80;z2=0;
0.80*2=1.50;z3=1;
0.60*2=1.20;z4=1;
0.20*2=0.40;z1=0;itd,beskonačno periodičan broj;
3.20(10)=11.001100110011...