Jump to content

[Source] Decimal <-> Binário


Cyber.CRz
 Share

Recommended Posts

Pode conter alguns bugs, no entanto também sei que não está bem estruturado e não está organizado da melhor maneira. mas também não levei muito asério...

function DecToBin(dec:longint) : string;
var i: Integer;
  bin01, finalbin, finalstep: string;
begin
  if dec > 0 then begin
    repeat
    bin01 := '0';
    if (dec mod 2) = 1 then bin01 := '1';
    finalbin := finalbin + bin01;
    dec := (dec div 2);
    until (dec div 2) = 0;
    if not(finalbin = '1') or (finalbin = '10') or (finalbin = '0') then begin
       finalbin := finalbin + '1';
    end;
    for i := Length(finalbin) downto 0 do begin
        finalstep := (finalstep + finalbin[i]);
    end;
    DecToBin := finalstep;
    end
  else DecToBin := '0';
end;    

function BinToDec(bin:string) : string;
var currHeading, intBinChar, x, i: Integer;
  dec: Real;
begin
  if StrToFloat(bin) > 0 then begin
    dec := 0;
    currHeading := 0;
    FOR i := Length(bin) DOWNTO 0 DO
    Begin
       IF currHeading > 0 THEN currHeading := currHeading * 2
       ELSE currHeading := 1;
       Val(bin[i], intBinChar, x);
       dec := dec + (intBinChar * currHeading);
    end;
    BinToDec := FloatToStr(dec);
    end
  else BinToDec := '0';
end;

Cumprimentos

Link to comment
Share on other sites

Mais simples e rápido...

function DecToBin(dec:longint) : string;
var
  mask : longint;
  idx : integer;
begin
  mask := $00000001;
  Result := '                                ';
  idx := 32;
  while idx > 0 do begin
    if (dec and mask) = 0 then Result[idx] := '0'
    else                       Result[idx] := '1';
    mask := mask shl 1;
    Dec(idx);
  end;
end;
Link to comment
Share on other sites

Mais simples e rápido...

function DecToBin(dec:longint) : string;
var
  mask : longint;
  idx : integer;
begin
  mask := $00000001;
  Result := '                                ';
  idx := 32;
  while idx > 0 do begin
    if (dec and mask) = 0 then Result[idx] := '0'
    else                       Result[idx] := '1';
    mask := mask shl 1;
    Dec(idx);
  end;
end;

muito mais estável também  😉

Link to comment
Share on other sites

Desculpem lá voltar a este tópico, mas nestas 2 semanas estive a brincar/relembrar um pouco o pascal e fazer programas simples, e por acaso também fiz para converter decimal<->binário, mas as soluções a que cheguei são diferentes das vossas, mas funciona 😁

Decimal para Binário

{**********************************************************************}
// Converte numeros decimais para numeros binarios atraves
// da divisao sucessiva por 2; o resto da ultima divisao			
// sera o primeiro digito binario; o resto da penultima divisao  
// sera o segundo digito binario; o resto da antepenultima divisao
// sera o terceiro digito binario e assim sucessivamente		  
//																
//					 Compilador FreePascal 2.6.0			  
{**********************************************************************}
Program dectobin;
uses crt;
var num, quociente, resto, temp : integer;
binario : string;

begin
clrscr;
binario := '';
writeln('Escreva um numero');
readln(num);
temp:=num;
while (temp <> 0) do
begin
quociente := temp div 2;
resto := temp mod 2;
case resto of
{ O primeiro resto da divisao ira para ultimo digito binario
 e assim sucessivamente }
0: binario := '0' + binario;
1: binario := '1' + binario;
end;
temp := quociente;
end;
writeln('O numero ',num,' em binario e representado por ',binario);
readln;
end.

Binário para decimal

{****************************************************}
{*  Converte um numero binario num numero decimal
{*  Exemplo:								  
{*  101 = 1*2^2+0*2^1+1*2^0 = 5			  
{*
{*Compilador FreePascal 2.6.0		
{****************************************************}
Program bintodec;
Uses crt;
Var binario:string;
aux,decimal,i:integer;

Begin
clrscr;
writeln('Escreva o numero binario');
readln(binario);
decimal:=0;
aux:=length(binario)-1;
For i:=1 to length(binario) do
 Begin
case (binario[i]) of
  '1' : decimal:=decimal+round(exp(aux*ln(2))); //decimal=decimal+2^aux
end;
aux:=aux-1;
 end;
writeln(binario,' := ',decimal);
readln;
end.
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.