Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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.

Editado por Urameshii
adicior o código do programa que possui as duas funções...

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.

Editado por GuaLBeRTo
Utilize tags [code] para separar código de texto. Obrigado!

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






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

×