Aquí lo tienes corregido:
Código C:
Ver original#include <stdio.h>
#include <math.h>
//Prototipo de funcion
int DecimalToBinary(int x, int *overflow);
int main()
{
int i, binario, error;
// Como un entero tiene 4 bytes en mi maquina, si hago:
// (2^8)*4=1024 y como el 0 tambien cuenta, quiere decir que el rango valido
// es de 0 a 1023. Si intentaras imprimir un valor superior desbordarias el entero
for(i=0; i <= 1023; i++){
binario = DecimalToBinary(i, &error);
if(error == 1)
printf("Se desbordo el valor maximo posible para un entero binario.\n"); else
printf("%4d = %.10d\n", i
, binario
); }
return 0;
}
//---------------------------------------------------------------------------
int DecimalToBinary(int x, int *overflow){
//Declarem variables
int binary=0, potencia;
//El valor maximo se saca elevando 2 al numero de bits de un byte que son 8
//y luego lo multiplicas por el numero de bytes del tipo
//Esto es util si se usa en una máquina en la que un entero tiene un tamaño diferente
int sizeMax
= pow(2,8) * sizeof(int);
if(x >= sizeMax){
*overflow=1;
}else{
*overflow = 0;
//ALGORITME
while (x != 0){
potencia=1; //¿para que empezar por 0?
if (x ==1 ){
binary++;
x--;
}else{ //Esta parte la he simplificado bastante
while(x
> (pow(2, potencia
))) potencia++;
if(x
< (pow(2, potencia
))) potencia--;
binary
+= pow(10, potencia
); //Aqui necesitabas sumar y tu asignabas }
}
}
return binary;
}
//---------------------------------------------------------------------------
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 originalint DecimalToBinary(int x, int *overflow)
{
int binary=0;
int valueMax = 1024;
int digito;
int exponente = 1;
if(x >= valueMax){
*overflow=1;
}else
{
*overflow = 0;
//ALGORITME
do{
//Obtenemos el valor del digito a escribir(0 ó 1)
digito = x % 2;
//Dividimos el numero por 2 para seguir
x /= 2;
//Añadimos el nuevo digito al numero binario
binary += digito * exponente;
//Aumentamos el exponente el exponente
exponente *= 10;
}while (x > 0);
}
return binary;
}