Ver Mensaje Individual
  #6 (permalink)  
Antiguo 06/04/2015, 04:39
aguml
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 9 meses
Puntos: 3
Respuesta: Función decimal -> binario

Aquí lo tienes corregido:
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. //Prototipo de funcion
  5. int DecimalToBinary(int x, int *overflow);
  6.  
  7. int main()
  8. {
  9.    int i, binario, error;
  10.  
  11.    // Como un entero tiene 4 bytes en mi maquina, si hago:
  12.    // (2^8)*4=1024 y como el 0 tambien cuenta, quiere decir que el rango valido
  13.    // es de 0 a 1023. Si intentaras imprimir un valor superior desbordarias el entero
  14.    for(i=0; i <= 1023; i++){
  15.       binario = DecimalToBinary(i, &error);
  16.       if(error == 1)
  17.          printf("Se desbordo el valor maximo posible para un entero binario.\n");
  18.       else
  19.          printf("%4d = %.10d\n", i, binario);
  20.    }
  21.    getchar();
  22.    return 0;
  23. }
  24. //---------------------------------------------------------------------------
  25.  
  26. int DecimalToBinary(int x, int *overflow){
  27.    //Declarem variables
  28.    int binary=0, potencia;
  29.  
  30.    //El valor maximo se saca elevando 2 al numero de bits de un byte que son 8
  31.    //y luego lo multiplicas por el numero de bytes del tipo
  32.    //Esto es util si se usa en una máquina en la que un entero tiene un tamaño diferente
  33.    int sizeMax = pow(2,8) * sizeof(int);
  34.  
  35.    if(x >= sizeMax){
  36.       *overflow=1;
  37.    }else{
  38.       *overflow = 0;
  39.       //ALGORITME
  40.       while (x != 0){
  41.          potencia=1; //¿para que empezar por 0?
  42.          if (x ==1 ){
  43.             binary++;
  44.             x--;
  45.          }else{ //Esta parte la he simplificado bastante
  46.             while(x > (pow(2, potencia)))
  47.                potencia++;
  48.             if(x < (pow(2, potencia)))
  49.                potencia--;
  50.             x -= pow(2, potencia);
  51.             binary += pow(10, potencia); //Aqui necesitabas sumar y tu asignabas
  52.          }
  53.       }
  54.    }
  55.    return binary;
  56. }
  57. //---------------------------------------------------------------------------

Si tienes alguna duda preguntala, la cuestion es que lo entiendas, no que lo copies sin mas.

Y aqui otro modo de hacerlo:
Código C:
Ver original
  1. int DecimalToBinary(int x, int *overflow)
  2. {
  3.    int binary=0;
  4.    int valueMax = 1024;
  5.    int digito;
  6.    int exponente = 1;
  7.  
  8.    if(x >= valueMax){
  9.       *overflow=1;
  10.    }else
  11.    {
  12.       *overflow = 0;
  13.       //ALGORITME
  14.       do{
  15.          //Obtenemos el valor del digito a escribir(0 ó 1)
  16.          digito = x % 2;
  17.          //Dividimos el numero por 2 para seguir
  18.          x /= 2;
  19.          //Añadimos el nuevo digito al numero binario
  20.          binary += digito * exponente;
  21.          //Aumentamos el exponente el exponente
  22.          exponente *= 10;
  23.       }while (x > 0);
  24.    }
  25.    return binary;
  26. }

Última edición por aguml; 06/04/2015 a las 07:20