Guest Josy Postado Julho 4, 2006 Denunciar Share Postado Julho 4, 2006 Gente to aprendendo C agora, e tenho um script que faz essa soma em Pascal, mas preciso fazer essa soma em C e não to conseguindo... Agradeço se alguém me der uma maoPASCAL -->Program soma_binarios; Uses WinCrt; Var bin1, resposta,bin2, result, result_final: string [20] ; n1, n2, i,alg1, alg2, somabin, vai, vem, cont, erro: integer; Begin repeat clrscr; Writeln ('+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++'); Writeln (' Programa para somar números Binários!!!!!'); Writeln ('+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++'); writeln; result_final:=''; {zero esta variável, pois quando o loop é feito a resposta anterior fica armazenada e é repetida} result:= ''; Write (' Digite o 1º número: '); readln (n1); str (n1, bin1); for i:=1 to length(bin1) do {este for foi criador para tratar o erro quando o usuário digitar um número não binário} if ( bin1 <> '0' ) and ( bin1 <>'1') then begin clrscr; Writeln ('++++++++++++++++++++++++++++++++++++++++++++++++++++++++'); Writeln (' Programa para somar números Binários!!!!!'); Writeln ('++++++++++++++++++++++++++++++++++++++++++++++++++++++++'); writeln; writeln (' Lembrete: Números binários são compostos por zeros e uns!!!!'); write (' Redigite o número: '); readln(n1); str (n1, bin1); {transforma a variável numérica em uma string} end; write (' Digite o 2º Número:+ '); readln (n2); str (n2, bin2); for i:=1 to length(bin2) do {este for também foi criador para tratar o erro quando o usuário digitar um número não binário} if ( bin2 <> '0' ) and ( bin2 <>'1') then begin clrscr; Writeln ('++++++++++++++++++++++++++++++++++++++++++++++++++++++++'); Writeln (' Programa para somar números Binários!!!!!'); Writeln ('++++++++++++++++++++++++++++++++++++++++++++++++++++++++'); writeln; writeln (' Digite o 1º número: ',n1); writeln (' Lembrete: Números binários são compostos por zeros e uns!!!!'); write (' Redigite o numero: '); readln(n2); str (n2, bin2); {transforma a variável numérica em uma string} end; if length(bin1) > length (bin2) then {outro problema que poderia ocorrer é um número digitado ser maior que o outro} repeat {portanto foi criado esse tratamento para colocar zeros quando não hover número} bin2:= '0' + bin2; {digitado pelo usuário do programa fazendo com que eles tenham o mesmo tamanho.} until length(bin1) = length (bin2) else if length(bin1) < length(bin2) then repeat bin1:= '0' + bin1; until length(bin1) = length(bin2); vem:=0; cont:= length(bin1); while cont >= 1 do begin val(bin1[cont], alg1, erro); {essa funcção (val) transforma uma string em um número inteiro, somente em inteiro} val(bin2[cont], alg2, erro); if (vem = 0) and (alg1 = 0) and (alg2 = 0) then {agora vem as condições que efetuam os testes das somas dos números} begin {se vai1,vem1, se é zero ou um, etc.} vai := 0; somabin := 0; end else if ((vem = 0) and (alg1 = 1) and (alg2 = 0)) or ((vem = 0) and (alg1 = 0) and (alg2 = 1)) then begin vai := 0; somabin := 1; end else if ((vem = 0) and (alg1 = 1) and (alg2 = 1)) then begin vai := 1; somabin := 0; end else if (vem = 1) and (alg1 = 0) and (alg2 = 0) then begin vai := 0; somabin := 1; end else if ((vem = 1) and (alg1 = 1) and (alg2 = 0)) or ((vem = 1) and (alg1 = 0) and (alg2 = 1)) then begin vai := 1; somabin := 0; end else if (vem = 1) and (alg1 = 1) and (alg2 = 1) then begin vai := 1; somabin := 1; end; str(somabin, result); {transforma o resulta em uma string para que possa ser invertido} result_final := result + result_final; {o número invertido é acumulado em result_final} vem := vai; cont:= cont - 1; {contador que para o estrutura de repetição} end; if vem = 1 then result_final := '1' + result_final; {trratamento de erro} writeln (' ---------------------------'); writeln (' O total da soma é: ', result_final); writeln; writeln ('+++++++++++++++++++++++++++++++++++++++++'); writeln (' Quando desejar sair aperte a tecla ESC.'); writeln ('+++++++++++++++++++++++++++++++++++++++++'); resposta:=readkey; until resposta = #27; {condição para sair do programa} End. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest 0x28 Postado Julho 4, 2006 Denunciar Share Postado Julho 4, 2006 Se está a aprender C de que está a espera.Não vejo melhor maneira para começar, não esteja a espera que os outros façam o trabralho por si.Caso é isso que você queira, não aprenda C recomendo-lhe, salte para visual basic. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Antrofilico Postado Junho 4, 2008 Denunciar Share Postado Junho 4, 2008 Existe um site bem interessante com opções para Converter e realizar operações com Binário. Veja o seguinte site:www.calculadoraonline.com.br Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcelo Utikawa da Fonseca Postado Junho 5, 2008 Denunciar Share Postado Junho 5, 2008 Porque a soma tem que ser feita em binário? Você pode apenas converter os números para um decimal e então realizar a soma em decimal. Seria mais simples!Para exibir em binário utilize a função abaixo:void ExibeBinario(unsigned long numero) { int shift=1; printf("Binario de %ld: "); while(numero>>shift) shift++; while(shift-->0) printf("%c", (numero>>shift)&1 ? '1' : '0'); printf("\n"); } Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Guest Josy
Gente to aprendendo C agora, e tenho um script que faz essa soma em Pascal, mas preciso fazer essa soma em C e não to conseguindo... Agradeço se alguém me der uma mao
PASCAL -->
Program soma_binarios;
Uses WinCrt;
Var
bin1, resposta,bin2, result, result_final: string [20] ;
n1, n2, i,alg1, alg2, somabin, vai, vem, cont, erro: integer;
Begin
repeat
clrscr;
Writeln ('+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++');
Writeln (' Programa para somar números Binários!!!!!');
Writeln ('+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++');
writeln;
result_final:=''; {zero esta variável, pois quando o loop é feito a resposta anterior fica armazenada e é repetida}
result:= '';
Write (' Digite o 1º número: ');
readln (n1);
str (n1, bin1);
for i:=1 to length(bin1) do {este for foi criador para tratar o erro quando o usuário digitar um número não binário}
if ( bin1 <> '0' ) and ( bin1 <>'1') then
begin
clrscr;
Writeln ('++++++++++++++++++++++++++++++++++++++++++++++++++++++++');
Writeln (' Programa para somar números Binários!!!!!');
Writeln ('++++++++++++++++++++++++++++++++++++++++++++++++++++++++');
writeln;
writeln (' Lembrete: Números binários são compostos por zeros e uns!!!!');
write (' Redigite o número: ');
readln(n1);
str (n1, bin1); {transforma a variável numérica em uma string}
end;
write (' Digite o 2º Número:+ ');
readln (n2);
str (n2, bin2);
for i:=1 to length(bin2) do {este for também foi criador para tratar o erro quando o usuário digitar um número não binário}
if ( bin2 <> '0' ) and ( bin2 <>'1') then
begin
clrscr;
Writeln ('++++++++++++++++++++++++++++++++++++++++++++++++++++++++');
Writeln (' Programa para somar números Binários!!!!!');
Writeln ('++++++++++++++++++++++++++++++++++++++++++++++++++++++++');
writeln;
writeln (' Digite o 1º número: ',n1);
writeln (' Lembrete: Números binários são compostos por zeros e uns!!!!');
write (' Redigite o numero: ');
readln(n2);
str (n2, bin2); {transforma a variável numérica em uma string}
end;
if length(bin1) > length (bin2) then {outro problema que poderia ocorrer é um número digitado ser maior que o outro}
repeat {portanto foi criado esse tratamento para colocar zeros quando não hover número}
bin2:= '0' + bin2; {digitado pelo usuário do programa fazendo com que eles tenham o mesmo tamanho.}
until length(bin1) = length (bin2)
else
if length(bin1) < length(bin2) then
repeat
bin1:= '0' + bin1;
until length(bin1) = length(bin2);
vem:=0;
cont:= length(bin1);
while cont >= 1 do
begin
val(bin1[cont], alg1, erro); {essa funcção (val) transforma uma string em um número inteiro, somente em inteiro}
val(bin2[cont], alg2, erro);
if (vem = 0) and (alg1 = 0) and (alg2 = 0) then {agora vem as condições que efetuam os testes das somas dos números}
begin {se vai1,vem1, se é zero ou um, etc.}
vai := 0;
somabin := 0;
end
else
if ((vem = 0) and (alg1 = 1) and (alg2 = 0)) or
((vem = 0) and (alg1 = 0) and (alg2 = 1)) then
begin
vai := 0;
somabin := 1;
end
else
if ((vem = 0) and (alg1 = 1) and (alg2 = 1)) then
begin
vai := 1;
somabin := 0;
end
else
if (vem = 1) and (alg1 = 0) and (alg2 = 0) then
begin
vai := 0;
somabin := 1;
end
else
if ((vem = 1) and (alg1 = 1) and (alg2 = 0)) or
((vem = 1) and (alg1 = 0) and (alg2 = 1)) then
begin
vai := 1;
somabin := 0;
end
else
if (vem = 1) and (alg1 = 1) and (alg2 = 1) then
begin
vai := 1;
somabin := 1;
end;
str(somabin, result); {transforma o resulta em uma string para que possa ser invertido}
result_final := result + result_final; {o número invertido é acumulado em result_final}
vem := vai;
cont:= cont - 1; {contador que para o estrutura de repetição}
end;
if vem = 1 then
result_final := '1' + result_final; {trratamento de erro}
writeln (' ---------------------------');
writeln (' O total da soma é: ', result_final);
writeln;
writeln ('+++++++++++++++++++++++++++++++++++++++++');
writeln (' Quando desejar sair aperte a tecla ESC.');
writeln ('+++++++++++++++++++++++++++++++++++++++++');
resposta:=readkey;
until resposta = #27; {condição para sair do programa}
End.
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.