[quote author=dai link=1111089082/0#4 date=1112041155]gracas a bebado consegui!!!!!!!!!!!!!
segue aqui o programa que soma dois numeros binarios (para ser executado em pascal).!!!!!!!!!!!!
bjos !!!!! DAI.!!!!!!
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[i] <> '0' ) and ( bin1[i] <>'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[i] <> '0' ) and ( bin2[i] <>'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.
[/quote]
Ae a soma não tem de numeros com sinal????