Título: funcion de conversion de bases Publicado por: m@o_614 en 19 Marzo 2014, 01:09 am Saludos
tengo una funcion llamada obtener numero, a la que le paso una cadena como argumento algo como #456 y la base(hex,octal,binaria o decimal), y me regresa un int con el numero(ya sin el #) el problema es que si le ingreso el numero #65536 me imprime que el numero es 65535 y no entiendo por qué imprime eso, ya lo habia probado para numeros de otras bases y lo hacia correctamente no se por que ahora no, solo puse la funcion que me da problemas por que el codigo es un poco largo Código
me imprime 6 36 536 5536 65535 gracias de antemano Título: Re: funcion de conversion de bases Publicado por: eferion en 19 Marzo 2014, 08:48 am 6
36 536 5536 65536 [65536] A mi me sale el resultado correcto. Título: Re: funcion de conversion de bases Publicado por: leosansan en 19 Marzo 2014, 08:54 am Pues a mí me da bien: Citar 6 Process returned 0 (0x0) execution ti36 536 5536 65536 [65536] Press any key to continue. Pero en principio lo que he hecho es prescindir de pow y de la librería math y lo he calculado directamente: Código
Pero me quedé con el "mosqueo" de lo que te ocurría. Casi no lo pillo, pero sí, lo he pillado. El problema radica que el uso de pow (http://www.cplusplus.com/reference/cmath/pow/?kw=pow) implica que la variable sea de tipo float o double y si se usa un int pasan cosas raras, cosa que no sucede con mi método. Es decir, la solución a tu código: Código
¡¡¡¡ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/aaaaa.gif) Título: Re: funcion de conversion de bases Publicado por: amchacon en 19 Marzo 2014, 12:51 pm El problema radica en el printf("%g"). No se debe usar el %g para enteros.
Podemos comprobar que retorno es correcto Código
Aunque por eficiencia, yo lo haría sin la función pow (tal y como ha hecho Leo). Título: Re: funcion de conversion de bases Publicado por: eferion en 19 Marzo 2014, 13:10 pm Yo le pondría un parche al cálculo de la potencia propuesto por leosansan.
Código
Básicamente para que funcione en bases que no sea la decimal. Título: Re: funcion de conversion de bases Publicado por: leosansan en 19 Marzo 2014, 16:37 pm El problema radica en el printf("%g"). No se debe usar el %g para enteros. ....................................... Creo que no, el problema radica en lo que indiqué. Una salida con int y %d en el printf: Citar 6 36 536 5536 65535 [65535] Y si los declara como float o double e imprime con %d ya ni te cuento. Yo le pondría un parche al cálculo de la potencia propuesto por leosansan. ......................................................... Básicamente para que funcione en bases que no sea la decimal. Bien observado amigo eferion. Pero ya lo dice la variable: "num_decimal". No creo que ese fuera el propósito de m@o_614, pero efectivamente el método es lo bastante versátil como para ser usado para distintas bases. Y repito sí tienes razón, su uso es más potente. .....y me has sacado un as que tenía en la manga para otros temas ;) ¡¡¡¡ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/aaaaa.gif) Título: Re: funcion de conversion de bases Publicado por: eferion en 19 Marzo 2014, 17:25 pm .....y me has sacado un as que tenía en la manga para otros temas ;) jajajaja. Vaya por dios, siento haberte fastidiado el plan... la próxima avísame por MP para no meter la pata ;) Título: Re: funcion de conversion de bases Publicado por: amchacon en 19 Marzo 2014, 17:32 pm Creo que no, el problema radica en lo que indiqué. ¿Me has puesto la salida bien? ¿? :huh:Una salida con int y %d en el printf: Y si los declara como float o double e imprime con %d ya ni te cuento. Título: Re: funcion de conversion de bases Publicado por: leosansan en 19 Marzo 2014, 17:53 pm La salida a tu código en mi ordenadorr y compilador:
Citar 6 36 536 5536 65535 EN FUNCION: [65535] 6 36 536 5536 65535 EN FUNCION: [65535] EN MAIN: 65535 Process returned 0 (0x0) execution time : 0.028 s Press any key to continue. ¿Me has puesto la salida bien? ¿? :huh: Te tengo en una muy alta estima, de corazón, como para jugar con esos detalles. En realidad creo que todo acaba dependiendo del compilador. Fíjate que a eferion el código de m@o_614 le dio el resultado correcto y sin embargo a m@o_614 y a mi nos daba mal. ¿¿¿¿¿¿?????..... No encuentro otra explicación que todo acaba dependiendo del compilador y versión usado. Un fuerte abrazo y todos mis respetos hacia ti.(http://i1280.photobucket.com/albums/a497/leosansan/leosan1/emoticonos22_zpsaaeb9e29.gif) ¡¡¡¡ Saluditos! ..... !!!! (http://i1280.photobucket.com/albums/a497/leosansan/leosan1/9fumar_zps9b929c04.gif) Título: Re: funcion de conversion de bases Publicado por: amchacon en 19 Marzo 2014, 19:01 pm Te tengo en una muy alta estima[/b], de corazón, como para jugar con esos detalles. Me has entendido mal Leo, no me referia que lo hicieses de mala fe ^^Lo que quería decir esque me comentas que la salida es erronea y me la enseñas: Citar 6 36 536 5536 65535 EN FUNCION: [65535] EN MAIN: 65535 Es exactamente la salida que pones en tu primer post. No entiendo, ¿acaso no era esa la salida correcta? :huh: Título: Re: funcion de conversion de bases Publicado por: leosansan en 19 Marzo 2014, 19:49 pm Me has entendido mal Leo, no me referia que lo hicieses de mala fe ^^ Lo que quería decir esque me comentas que la salida es erronea y me la enseñas: Es exactamente la salida que pones en tu primer post. No entiendo, ¿acaso no era esa la salida correcta? :huh: No ya que la entrada era el número "65536" y devolvía el "65535". ¡¡¡¡ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/aaaaa.gif) Título: Re: funcion de conversion de bases Publicado por: amchacon en 19 Marzo 2014, 19:58 pm La leche, que mala vista tengo ;D
Título: Re: funcion de conversion de bases Publicado por: leosansan en 19 Marzo 2014, 20:07 pm ........................................................................ Citar int num_decimal = 0; .......................................................................Aunque por eficiencia, yo lo haría sin la función pow (tal y como ha hecho Leo). Gracias por el último comentario y el problema base radica, como ya comenté, en que también declaras en tu código como int, en lugar de float o double, a la variable num_decimal . Y no te preocupes por tu vista, es excelente, te lo asegura un declarado alumno incondicional tuyo. Un fuerte abrazo campeón. ¡¡¡¡ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/aaaaa.gif) Título: Re: funcion de conversion de bases Publicado por: m@o_614 en 20 Marzo 2014, 01:44 am muchas gracias a todos por sus respuestas, nunca me hubiera dado cuenta que era la función pow() la que me daba problemas, otra duda: por qué en la linea
entero = operando-'0'; le ponen -'0' en vez de -48?? Título: Re: funcion de conversion de bases Publicado por: rir3760 en 20 Marzo 2014, 02:56 am otra duda: por qué en la linea Porque el valor es el mismo pero '0' es mas claro.entero = operando-'0'; le ponen -'0' en vez de -48? Un saludo Título: Re: funcion de conversion de bases Publicado por: leosansan en 20 Marzo 2014, 06:47 am Porque el valor es el mismo pero '0' es mas claro. Un saludo ¿Es que hay diferencia?. Yo en particular lo he dejado porque así lo había puesto el autor del tema, además de que me manejo con cierta soltura con los códigos ASCII y es un forma de ir re teniéndolos. Pero volviendo al principio, ¿Existe alguna diferencia de eficiencia o algo por el estilo?. Aún estoy en los inicios en este mundillo de la programación y me gustaría sentar bien las bases y, si alguien de tu nivel pone eso, por algo será. ¡¡¡¡ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/aaaaa.gif) Título: Re: funcion de conversion de bases Publicado por: eferion en 20 Marzo 2014, 09:34 am muchas gracias a todos por sus respuestas, nunca me hubiera dado cuenta que era la función pow() la que me daba problemas, otra duda: por qué en la linea entero = operando-'0'; le ponen -'0' en vez de -48?? Dicho de otra forma: Código: ASCII int bin oct hex Puedes utilizar cualquiera de las 5 opciones porque todas, al fin y al cabo, significan exactamente lo mismo. Título: Re: funcion de conversion de bases Publicado por: amchacon en 20 Marzo 2014, 10:04 am No hay ninguna diferencia de eficiencia, el compilador lo modifica poniendo 48.
Si se pone es porque así sabes porque pusistes 48. |