Foros del Web » Programación para mayores de 30 ;) » Programación General »

Suma, resta, division y multiplicacion binarias en C Urgente

Estas en el tema de Suma, resta, division y multiplicacion binarias en C Urgente en el foro de Programación General en Foros del Web. Hola tengo que realizar un programa que realice lo siguiente: Sume dos numeros binarios, mas o menos asi: 100 + 100 = 1000 y lo ...
  #1 (permalink)  
Antiguo 20/09/2004, 17:25
Avatar de axy108  
Fecha de Ingreso: diciembre-2003
Ubicación: En frente de mi Computadora
Mensajes: 415
Antigüedad: 20 años, 4 meses
Puntos: 0
Suma, resta, division y multiplicacion binarias en C Urgente

Hola tengo que realizar un programa que realice lo siguiente:

Sume dos numeros binarios, mas o menos asi:

100 + 100 = 1000

y lo mismo para las cuatro operaciones basicas suma,resta,division y multiplicacion.

Si alguien me puede ayudar porfa se los agradeceria mucho, no tengo ni la ams remota idea de por donde empezar.

Bueno ya lo habia hecho pero al maestro no le gusto la forma en la que resolvi el problema, lo que hice anteriormente era que convertia los numeros binarios a decimales y asi hacia las operaciones y despues los volvia a convertir en binarios para mostrarlos en pantalla pero al maestro no le agrado mucho la idea y me dijo que el programa estaba mal ya que deberia de seguir la logica de las sumas, restas, divisiones y multiplicaciones binarias . (por eso y les parecera familiar los post anteriores que ya habia puesto ).

Ayudenme por favor esun poco urgente ya que es para el 22 de septiembre y pues perdi mucho tiempo haciendo el programa anterior que les mencione
__________________
Todos somos muy ignorantes :pensando: . Lo que ocurre es que no todos ignoramos las mismas cosas ;-) .... Albert Einstein :cool:
  #2 (permalink)  
Antiguo 21/09/2004, 12:35
Avatar de axy108  
Fecha de Ingreso: diciembre-2003
Ubicación: En frente de mi Computadora
Mensajes: 415
Antigüedad: 20 años, 4 meses
Puntos: 0
Nadie me puede ayudar

__________________
Todos somos muy ignorantes :pensando: . Lo que ocurre es que no todos ignoramos las mismas cosas ;-) .... Albert Einstein :cool:
  #3 (permalink)  
Antiguo 21/09/2004, 15:54
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Aqui está la idea..(es lo pricipal) no creo que sea dificil codificar...(solo hay que pensar un poquito.. )

http://www.math.grin.edu/~rebelsky/C...nt-binary.html

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #4 (permalink)  
Antiguo 22/09/2004, 10:41
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
hola, ya es 22 de septiembre y es mediodia.
lamentablemente no te puedo ayudar, pero me gustaria saber si lo terminaste y como quedo el codigo........
  #5 (permalink)  
Antiguo 22/09/2004, 15:29
Avatar de axy108  
Fecha de Ingreso: diciembre-2003
Ubicación: En frente de mi Computadora
Mensajes: 415
Antigüedad: 20 años, 4 meses
Puntos: 0
mira pues lo unico que pude hacer es la suma pero no me corre muy bien.

Pruebalo y haber si me puedes ayudar.

Código:
#include <conio.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>

int oper1[7];
int oper2[7];
int result[8];

void suma(){
	int i;
   int acarreo = 0;
	for(i=0;i<=8;i++){
		result[i]=0;
   }
	for(i=8;i>=1;i--){
   	if (oper1[i-1] == 0 && oper2[i-1] == 0){
      	if (acarreo == 1){
         	result[i] = 1;
            acarreo = 0;
         }
         else{
         	result[i] = 0;
            acarreo = 0;
         }
      }
      if (oper1[i-1] == 0 && oper2[i-1] == 1){
      	if(acarreo == 1){
            result[i] = 1;
            acarreo = 0;
         }
         else{
         	result[i] = 1;
            acarreo = 0;
         }
      }
      if (oper1[i-1] == 1 && oper2[i-1] == 0){
      	if(acarreo == 1){
            result[i] = 0;
            acarreo = 1;
         }
         else{
         	result[i] = 1;
            acarreo = 0;
         }
      }
      if (oper1[i-1] == 1 && oper2[i-1] == 1){
      	if(i==1){
         	if(acarreo == 1){
               result[i] = 1;
               result[0] = 1;
         	}
            else{
            	result[i] = 0;
               result[0] = 1;
         	}
         }
         else{
         	if(acarreo == 1){
               result[i] = 1;
            	acarreo = 1;
         	}
            else{
            	result[i] = 0;
            	acarreo = 1;
         	}
         }
      }
   }
   for(i=0;i<=8;i++){
		printf("%d",result[i]);
   }
}

void main(){
	int i,j;
   /*
   for(i=0;i<=7;i++){
   	oper1[i]=0;
      oper2[i]=0;
      oper3[i]=0;
   }
   */
   for(i=0;i<=7;i++){
   	printf("Introduce el %d digito del operando 1: ",i+1);
   	//scanf("%d",&oper1[i]);
      cin>>oper1[i];
      if (oper1[i] == 1 || oper1[i] == 0){
      	i = i;
      }
      else {
      	i--;
      }
   }
   clrscr();
   printf("Operando uno es: ");
   for(i=0;i<=7;i++){
   	printf("%d",oper1[i]);
   }
   //printf("\n");
   //getch();
   for(j=0;j<=7;j++){
   	printf("Introduce el %d digito del operando 2: ",j+1);
   	//scanf("%d",&oper2[j]);
      cin>>oper2[j];
      if (oper2[j] == 1 || oper2[j] == 0){
      	j = j;
      }
      else {
      	j--;
      }
   }
   clrscr();
   printf("Operando uno es:  ");
   for(i=0;i<=7;i++){
   	printf("%d",oper1[i]);
   }
   printf("\nOperando dos es:  ");
   for(j=0;j<=7;j++){
   	printf("%d",oper2[j]);
   }
   printf("\nResultado:       ");
   suma();
   getch();
}
SALUDOS y GRACIAS

__________________
Todos somos muy ignorantes :pensando: . Lo que ocurre es que no todos ignoramos las mismas cosas ;-) .... Albert Einstein :cool:
  #6 (permalink)  
Antiguo 23/09/2004, 12:15
 
Fecha de Ingreso: diciembre-2002
Mensajes: 23
Antigüedad: 21 años, 4 meses
Puntos: 0
Para realizar una suma:

Código:
#include <stdio.h>
#include <stdlib.h>

#define NUM_BITS 8

int readline(char num[][NUM_BITS]);
void binarysum(char num[][NUM_BITS], char result[]);

int main(void){
   
   char num[2][NUM_BITS], result[NUM_BITS+1];
   int i, j;
   
   if (readline(num)){
      
      binarysum(num, result);
      
      puts("");
      for (i = 0; i < 2; i++){
         printf(" ");
         for (j = 0; j < NUM_BITS; j++)
            printf("%c", '0' + num[i][j]);
         printf("\n");
      }
      
      for (j = 0; j < NUM_BITS+1; j++)
         printf("%c", '0' + result[j]);
      printf("\n");
      
      return EXIT_SUCCESS;
   }else{
      puts("Invalid input - binary numbers must contain between 1-8 characters");
      
      return EXIT_FAILURE;
   }
   
}

int readline(char num[][NUM_BITS]){
   
   int c, i, j, k;
   
   for (i = 0; i < 2; i++){
      j = 0;
      while (j < NUM_BITS && (c = getchar()) != EOF && (c == '0' || c == '1'))
            num[i][j++] = c - '0';
      
      if (j == NUM_BITS)
         getchar();
      
      if (j == 0){
         return 0;
      }else{
         for (k = NUM_BITS; k > 0; k--)
            num[i][k-1] = (j >= 1) ? num[i][--j] : 0;
      }
   }
   return 1;
   
}

void binarysum(char num[][NUM_BITS], char result[]){
   
   int i, bit_1, bit_2, carry_flag = 0;
   
   for (i = NUM_BITS; i > 0; i--){
      bit_1 = num[0][i-1];
      bit_2 = num[1][i-1];
      
      result[i] = bit_1 ^ bit_2 ^ carry_flag;
      carry_flag = (bit_1 & bit_2) | (bit_1 & carry_flag) | (bit_2 & carry_flag);
   }
   result[i] = carry_flag;
   
}
Para restar sumas el primer numero con el 'complemento a dos' del segundo.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 15:16.