Suma De Numeros Bonarios
Enviado por gely • 21 de Agosto de 2011 • 371 Palabras (2 Páginas) • 930 Visitas
SUMA DE NUMEROS BINARIOS
Para empesar el programa es necesario saber ciertas cosas primero:
0+0=0
0+1=1
1+1=0 y se lleva 1 (acarreo)
Lo que se pretende hacer es un programa que sume dos números binarios (de 4 bits) dados por el usuario, por lo que primero debemos solicitar los números y guardarlos en un arreglo, puedes fijar el número de bits de cada número o tambien solicitar el número de bits de los números.
Fijaremos a "n=3" por que los números binarios deben ser de 4 bits [0,3]
Usaremos a[n] y b[n] como los números binarios, res[n] como resultado y usaremos otra variable para llevar el acarreo "c=0"
El "%s" nos ayuda a guardar cada digito en una parte del arreglo
scanf("%s", a[]);
scanf("%s", b[]);
Porlo que si a=1011, a[0]=1, a[1]=0, a[2]=1, a[3]=1 y b=0111, b[0]=0, b[1]=1, b[2]=1, b[3]=1
Ahora hay que empesar a sumar donde necesitaremos 4 condiciones para llegar al resultado:
for(i=n;i>=0;i--)
{
/*empieza desde "n" para sumar desde la derecha y el decremento para ir hacia la izquierda*/
if(a[i]+b[i]+c=0)
{
res[i]=0;
c=0;
/*Es importante que "c" empiece siendo cero por que al sumarlo por primera ves lo mas
probable es que tenga basura y la suma salga mal*/
}
if(a[i]+b[i]+c=1)
{
res[i]=1;
c=0;
/*si la suma de a, b y c es 1 es el valor del resy pues 1 en binario es 1 por lo que el acarreo es
cero*/
}
if(a[i]+b[i]+c=2)
{
res[i]=0;
c=1;
/*2 en binario = 10, por eso res=0 y llevamos 1 como acarreo*/
}
if(a[i]+b[i]+c=3)
{
res[i]=1;
c=1;
/*finalmente 3 en binario = 11. Solo tenemos estas 4 condiciones por que solo estos 4
resultados podemos obtener sumando tres números (a,b,c)*/
}
}
Ya por ultimo lo que tenemos que hacer es imprimir primero el acarreo ("c") y después res[de 0 a 3],
si sumas los dos números de ejemplo notaras que el resultado es "10010" estos son 5 bits y res tiene 4, por eso se imprime primero el acarreo "c".
NOTA:
tu programa no funciona, 1011+0111=10010, y tu programa arroja 10011. Falta adicionar una bandera y modificarla en la segunda condicion, y en la ultima condicion tenerla en cuenta.
Pues según yo esta bien Wilmer (aunque no soy antierrores), en la tercera condición si a[3]=b[3]=1 y c=0, entonces res[3]=0 y c=1, y ya que res[3]=0 y no 1, no veo porque arrojaría 10011, sobre la bandera tienes razón encaso de que al final c=0 pues para que lo imprimes (si te refieres a eso no???).
...