C/Visual C - No encuentro el error

 
Vista:

No encuentro el error

Publicado por Daniel (2 intervenciones) el 12/05/2007 20:31:31
Hola, estoy haciendo una función que convierte números decimales mayores que cero a binarios, al final me quedó así:

long int cbin(int ndec)
{
int i=0;
long int res=0;
if(ndec<2)
return ndec;
else
{
do{
res=res+((ndec%2)*(long)pow(10,i));
ndec=ndec/2;
i++;
}
while(ndec>2);
res=res+(1*(long)pow(10,i));
return res;
}
}

El problema es que a la hora de hacerla funcionar no devuelve los valores que debería, a pesar de que haviendo pruebas de escritorio si deberían de dar.

Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:No encuentro el error

Publicado por Edardo Negrete (76 intervenciones) el 12/05/2007 23:51:04
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
long int cbin( int ndec );

void main()
{
printf( "%d", cbin( 10 ) );
getche();
}

long int cbin( int ndec )
{

int i=0;
long int res=0;


if(ndec<2)
return ndec;
else
{
do
{
res += ( ( ndec % 2 ) * ( long ) pow( 10, i ) );
ndec = ndec / 2;
i++;
// Aqui estaba el error la condicion se debe cumplir para numeros mayores o iguales a dos

} while( ndec >= 2 );

res += ( 1 * ( long ) pow( 10, i ) );
return res;
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No encuentro el error

Publicado por Daniel (2 intervenciones) el 13/05/2007 03:02:19
Probé cambiando dicha condición y pasandole diferentes números estos fueron los resultados:

4
99

7
110

2
10

1
1

3
11

18
10009

23
10109

43
101011

Unos resultados se compusieron, y otros tienen 9!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No encuentro el error

Publicado por Daniel (2 intervenciones) el 13/05/2007 03:38:28
Bueno, ya solucioné el error, cambiando la condición justo como me decían arriba, poer además había que quitar el pow y cambiarlo por multiplicar i por 10 en cada iteración del bucle do..while. Sigo sin entender porque con el pow daba resultados tan disímiles, ojalá alguien me haga el favor de aclararme que pasaba en el pow o que restricciones tiene ya que en la referencia que tengo no aparece nada extraño.

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No encuentro el error

Publicado por Nelek (816 intervenciones) el 14/05/2007 08:44:13
Hola,

siento decirte que no siempre todo tiene explicacion. A mi hay veces que el POW tambien me da problemas aunque en la mayoria no lo hace. Ya me gustaria saber porque lo que hoy funciona perfectamente manyana ya no lo hace (sin haber cambiado el codigo).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar