domingo, 11 de marzo de 2007

Suma de dos 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".

Eso es todo espero les sirva si tienen dudas, comentarios o sugerencias escriban.

12 comentarios:

  1. gracias por pensar en tus amigos a quienes sin duda le sirve este tipo de cosas!!!. espero sigas poniendo codigos, para aprender mas, y que mejor que atravez de ti.(tu blog). ha gracias por decir que mi vida es de telenovela. se te quiere mucho...marilu

    ResponderEliminar
  2. Hola Amigo, 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.

    Saludos.

    Wilmer Garzón

    ResponderEliminar
  3. 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???).

    Bueno Wilmer gracias por comentar y si aun crees que tenga algún error puedes ser mas especifico para seguir comentándolo.

    ResponderEliminar
  4. HOLA NECESITO AYUDA SOY ESTUDIANTE Y MI DEBILIDAD ES LA PROGRAMACION, NECESITO HACER UN PROGRAMA EN C QUE ME REALIZE LAS CUATRO OPERACIONES BASICAS (SUMA RESTA DIVICION, MULTIPLICACION)EN NUMEROS BINARIOS , ES DECIR
    (1)SUMA
    (2)RESTA ETC..
    OPCION(1) 5 2
    5(B)=00000101
    2(B)=00000010
    7(B)=00000111
    5+2=7 el numero en notacion de base 2 maximo es de 8 como se muestra en el ejemploal final uno beve presionar la opcion (0) y debe decir FIN DEL PROGRAMA PORFAVOR AYUDENME LO TENGO QUE ENTREGAR EL JUEVES Y NO SE QUE HACER

    ResponderEliminar
  5. Bueno pues si tuviera tiempo te ayudaría pero también estudio y con tantos proyectos lamento no poder hacerlo sin embargo ya tienes la suma (solo te faltan 3 jeje), te recomiendo que investigues como se hacen las otras operaciones (seguro ya te las enseñaron), supongo harás un menú de opciones te recomiendo que uses "enum" para enumerar las opciones y un "swich" para escogerlas, en realidad no es tan difícil, ya por ultimo una opción es recurrir a los foros, pero solo para asesoría no esperes que hagan la tarea por ti

    Suerte y nos dices como te fue.

    ResponderEliminar
  6. hola amigos solo tengom una duda i???......

    ResponderEliminar
  7. Buen aporte. En escencia esta bien pensado. Pero para aquellos que solo copian y pegan no les va a jalar o va a marcar errores. Por que ese codigo esta mal.

    ResponderEliminar
    Respuestas
    1. se suponen ke por lo menos ya deben saber lo basico, para ke asi se den cuenta ke el programa no esta comple, aun faltan las librerias, la declaracion de los vectores y las variables ke se usan etc,, saludos

      Eliminar
  8. Efectivamente esa es la principal idea de estas entradas ayudar pero no resolver :)

    ResponderEliminar
  9. te felicito por la paciencias ke tienes al explikr el programa amigo,, saludos, y muy bien tu programa,

    ResponderEliminar
  10. considero ke en esta si te salio mal amigo, me supon y yo asi lo ise, res debe valer 0, te recomiendo ke lo chekes, saludos

    if(a[i]+b[i]+c=3)
    {
    res[i]=1;
    c=1;

    ResponderEliminar
    Respuestas
    1. Hola David, gracias por comentar, no se si este en lo correcto según yo 3 en binario seria 11 por lo que res=1 y c=1, si gustas aportar mas datos :)

      Eliminar