Ir ao conteúdo
  • Cadastre-se
Urameshii

Programa decimal binário e binário decimal

Recommended Posts

Quando eu comecei o curso de Análise de Sist. tive que fazer esses dois algorítmos. Procurei ajuda na internet e não consegui nada do que eu queria, por isso resolvi postar esse código (lógico que antes procurei saber se já haviam resolvido esse problema).

obs: a expressão ""(exp (expoente*ln(2)))"" equivale a potência, pois o pascalzim não reconhece a função ""^"".

Espero ter ajudado alguém :D


Program binario_decimal ;
var
binario:string;
i,expoente,tam:integer;
decimal:real;
Begin
write ('Informe um número binário ');
read (binario);
tam:=length(binario);
for i:=tam downto 1 do
begin
if binario[i]='1' then
decimal:=decimal+(exp (expoente*ln(2)));
expoente:=expoente+1;
end;
write ('O número binário ',binario,' é igual a ',decimal:0:0,' decimal');
end.


Program decimal_binario ;
var
decimal,quociente,resto:integer;
binario,strresto,strquociente:string;
Begin
write ('Digite o valor decimal ');
read (decimal);
quociente:=decimal;
while (quociente>=2) do
begin
resto:=quociente mod 2;
str(resto,strquociente);
binario:=strquociente+binario;
quociente:=quociente div 2;
end;
str(quociente,strquociente);
binario:=strquociente+binario;
writeln ('O valor decimal ',decimal,' em binário é ',binario);
End.


Program binario_decimal_binario ;
var
sair:boolean;
opcao:char;
procedure binario_decimal;
var
binario:string;
i,expoente,tam:integer;
decimal:real;
vld:boolean;
Begin
clrscr;
writeln;
write (' Informe o número binário ');
read (binario);
tam:=length(binario);
vld:=true;
for i:=tam downto 1 do
begin
if binario[i]='1' then
decimal:=decimal+(exp (expoente*ln(2)));
expoente:=expoente+1;
if (binario[i]<>'1') and (binario<>'0') then
vld:=false;
end;
writeln;
if (vld=false) then
writeln (' O número informado é inválido! possui dígitos diferentes de 1 e 0')
else
begin
writeln (' O número binário ',binario,' é igual a ',decimal:0:0,' decimal');
writeln;
write (' Pressione qualquer tecla para voltar ao menu principal ');
end;
readkey;
End;
procedure decimal_binario;
var
decimal,quociente,resto:integer;
binario,strresto,strquociente:string;
Begin
clrscr;
writeln;
write (' Informe o valor decimal ');
read (decimal);
quociente:=decimal;
while (quociente>=2) do
begin
resto:=quociente mod 2;
str(resto,strquociente);
binario:=strquociente+binario;
quociente:=quociente div 2;
end;
str(quociente,strquociente);
binario:=strquociente+binario;
writeln;
writeln (' O valor decimal ',decimal,' é igual a ',binario,' em binário');
writeln;
write (' Pressione qualquer tecla para voltar ao menu principal ');
readkey;
End;
Begin
repeat
clrscr;
textcolor (lightred);
writeln;
writeln;
writeln (' Informe a opção desejada');
writeln;
writeln;
write (' 1');
textcolor (lightgreen);
writeln (' - Transformar numero binário em decimal');
writeln;
textcolor (lightred);
write (' 2');
textcolor (lightgreen);
writeln (' - Transformar numero decimal em binário');
textcolor (lightred);
writeln;
write (' 3');
textcolor (lightgreen);
write (' - Sair');
opcao:=readkey;
case opcao of

#49:binario_decimal;

#50:decimal_binario;

#51:sair:=true;

end;
until (sair=true);
clrscr;
writeln;
write (' contato: [email]rossiniliberal@bol.com.br[/email]');
readkey;
End.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu li os seus códigos... e é o que eu estou pricisando...

mas eu priciso desse código em code gear rad studio 2007. :huh:

usando edit para receber os valores binários.

o programa de conversão eu fiz.

preciso agora de fazer a soma entre números binários.

pode me ajudar ???:confused::(

esse é o meu código:

abraços.^_^

contato:

gualbertodog@hotmail.com

  public
{ Public declarations }
var

PosicaoAnterior : integer;

Procedure RotdeConv_dec; // converte para dec

Procedure RotdeconV_bin; // converte de dec para bin
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.RotdeConv_dec;

var

i, bin :Integer;
calcular :Real;
inverter :String;

begin

calcular := 0;
inverter := AnsiReverseString(Edit1.text);

For i:= 1 to Length(Edit1.text) do begin

//convertendo de bin pra dec

If PosicaoAnterior = 1 Then Begin
bin := StrToInt(inverter[i]);
calcular := calcular + (bin * Power(2,i-1)); //Power faz a 'mágica' potencia
end
//fim da conversão de bin pra dec
else

//convertendo de oct pra dec
if PosicaoAnterior = 2 Then Begin
bin := StrtoInt(Inverter[i]);
calcular := calcular + (bin * Power(8, i - 1));
end
//fim da conversão de oct pra dec
else
// convertndo de hex pra dec
if PosicaoAnterior = 3 Then Begin

Case Inverter[i]of
'A' :Bin := 10;
'B' :Bin := 11;
'C' :Bin := 12;
'D' :Bin := 13;
'E' :Bin := 14;
'F' :Bin := 15;
else Bin:=StrtoInt(Inverter[i]);

end;

calcular := calcular + (bin * power(16,i-1));
end;

// fim da conversão de hex pra dec
end;

Edit1.text := (FloatToStr(Calcular));
end;


procedure TForm1.RotdeConv_bin;

var
calculo, conversao, bin, Resto : Integer;
aux : String;

Begin

aux :='';
if Edit1.Text <> '' Then
conversao := Trunc(StrToFloat(Edit1.text))
else
conversao := 0;
Edit1.text := '';
//convertendo pra bin

if RadioGroup1.ItemIndex = 1 Then Begin

repeat
bin := conversao div 2;
resto := conversao mod 2;
aux := aux + IntToStr(resto);
conversao := bin;

until (conversao <= 1); aux := aux + IntToSTR(bin); Edit1.Text := AnsiReverseString(aux); end
//fim da convertendo pra bin

else // convertendo pra oct

if RadioGroup1.ItemIndex=2 then Begin Repeat Bin := Conversao div 8; Resto := Conversao mod 8; Conversao := Bin; Aux := Aux + IntToStr(resto); Until (Conversao <= 1); if bin > 0 then
aux := aux + IntToSTR(bin);
Edit1.Text := AnsiReverseString(aux);
end
//fim da conversão pra oct
else Begin
//convertendo pra hex
Repeat
bin := conversao div 16;
resto := conversao mod 16;
conversao := bin;

case resto of
10 : Edit1.Text := Edit1.Text + 'A';
11 : Edit1.Text := Edit1.Text + 'B';
12 : Edit1.Text := Edit1.Text + 'C';
13 : Edit1.Text := Edit1.Text + 'D';
14 : Edit1.Text := Edit1.Text + 'E';
15 : Edit1.Text := Edit1.Text + 'F';
else Edit1.Text :=Edit1.Text+ IntToStr(resto);
end;

until (conversao <= 1); if bin > 0 then
Edit1.Text := Edit1.Text + IntToSTR(bin);
Edit1.text := AnsiReverseString(Edit1.text);
end;
//fim da conversao pra hex
end;


procedure TForm1.BitBtn2Click(Sender: TObject);
begin
close
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9']) then
key := #0;
end;



procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
case(RadioGroup1.ItemIndex) of

0: begin
RotdeconV_dec;
PosicaoAnterior := 0;
end;

1: begin

if (PosicaoAnterior = 2) Or (PosicaoAnterior = 3) Then Begin
RotdeconV_dec;
PosicaoAnterior := 1;
RotdeconV_bin;
end

else Begin
PosicaoAnterior := 1;
RotdeconV_bin;
end;
end;

2: begin

If (PosicaoAnterior = 1) or (PosicaoAnterior = 3) Then Begin
RotdeconV_dec;
PosicaoAnterior := 2;
RotdeconV_bin;

end else Begin
PosicaoAnterior := 2;
RotdeconV_bin;

end;
end;

3: begin

If (PosicaoAnterior = 1) or (PosicaoAnterior = 2) Then Begin
RotdeconV_dec;
PosicaoAnterior := 3;
RotdeconV_bin;

end else Begin
PosicaoAnterior := 3;
RotdeconV_bin;

end;
end;
end;
end;

//fim
end.

Compartilhar este post


Link para o post
Compartilhar em outros sites
eu li os seus códigos... e é o que eu estou pricisando...

mas eu priciso desse código em code gear rad studio 2007. :huh:

usando edit para receber os valores binários.

o programa de conversão eu fiz.

preciso agora de fazer a soma entre números binários.

pode me ajudar ???:confused::(

esse é o meu código:

abraços.^_^

Gilberto, eu olhei teu código e entendi a lógica, mas não entendi a sintaxe... até porquê eu não sei (é sério) o que é "gear rad studio 2007" (parece delphi =]) e não sei se poderei te dar algum suporte com relação a essa linguagem ou IDE em particular, mas posso te explicar a lógica de funcionamento do algoritmo.

Se isso poderá ajudar você responde e me explica direito a tua dúvida...

Você quer transformar o número binário em decimal? Não tá entendendo como foi convertido? quer somar dois números binários e mostrar a soma em binário ou decimal???

...

Espero ter ajudado e poder ajudar

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

é delphi mesmo, mas agora o delphi viro "code gear rad studio" (porque agora a embarcadero é sócia da "borland") e eu estudo no code gear rad studio 2007, priciso somar em binário e mostrar o resultado em binário. Sei que é só converter pra bin, depois para dec(sem mostrar os valores) e depois de novo em bin e mostrar o result. mas não to conseguindo. :(

se puder me ajudar. ficarei muito grato !

Abraço :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom... como voce falou... a solução mais simples é você converter os numeros binários para decimais, somar, e depois converter novamente para binário...

vou te explicar o código usando o código do pascal (agora que eu vi que ele ta com um bug =))...

primeiro você lê os dois números em binário


write ('Informe um número binário ');
read (binario1);
write ('Informe um número binário ');
read (binario2);

depois você converte o primeiro, voce armazena o valor na variavel soma. Na segunda conversao, voce efetua a adicao da conversao atual com a conversao anterior (armazenada antes na variavel soma) e guarda o valor da operacao na variavel soma, criada agora exatamente para essa função (em negrito)


procedure binario_decimal;
var
binario:string;
i,expoente,tam,[b]soma[/b]:integer;
decimal:real;
vld:boolean;
Begin
clrscr;
writeln;
write (' Informe o número binário ');
read (binario);
tam:=length(binario);
vld:=true;
for i:=tam downto 1 do
begin
if binario[i]='1' then
decimal:=decimal+(exp (expoente*ln(2)));
expoente:=expoente+1;
if (binario[i]<>'1') and (binario<>'0') then
vld:=false;
end;
writeln;
if (vld=false) then
writeln (' O número informado é inválido! possui dígitos diferentes de 1 e 0');
[b] soma:=soma+decimal;[/b]
readkey;
End;

depois de fazer a conversão, e ter a soma dos dois numeros binarios (so que agora em decimal) é só converter de novo para decimal usando o procedimento para conversao de decimais em binarios...


procedure decimal_binario;
var
decimal,quociente,resto,soma:integer;
binario,strresto,strquociente:string;
Begin
clrscr;
quociente:=soma;
while (quociente>=2) do
begin
resto:=quociente mod 2;
str(resto,strquociente);
binario:=strquociente+binario;
quociente:=quociente div 2;
end;
str(quociente,strquociente);
binario:=strquociente+binario;
writeln;
writeln (' A soma dos numeros binarios e igual a ',binario,' em binário');
writeln;
readkey;
End;

Acho que vai funcionar mais ou menos assim, se você tiver tempo, da uma enxugada no codigo. Sinceramente nao fiz tudo certinho por falta de tempo só peguei e colei pra te explicar... (fiz isso agora na aula de Javanês =) )

boa sorte ai cara, qualquer coisa é só falar, espero ter ajudado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×