Título: Problemas con el vuelto en monedas Publicado por: adripillo14 en 5 Noviembre 2012, 17:15 pm Hola, mi profesor a dado para realizar 1 problema de las monedas pero cambio algunas cosas, por ejemplo las cantidades de monedas aceptables son 0.25, 0.10, 0.05, 0.01. Tengo que descomponer el billete en esa cantidad y decir cuantas monedas son en total con un plus si quiero de cuanta cantidad de cada una.
Bueno, mi programa casi funciona bien, con enteros anda perfecto, con decimales anda mas o menos, por ejemplo con 1.5 anda bien tambien, pero si ingreso 1.4 o algun otro valor no sale nunca. Les muestro el codigo a ver si me pueden ayudar por favor. Código: int main(){ Veran que dentro de "while" hay comentadas unas lineas, las puse para probrar, el tema es que si las descomento el programa me dice exactamente las monedas, o sea funciona bien. El problema es que no para nunca, repite el resultado todo el tiempo. Por esta misma razon es que estando como esta con el cout afuera del while funciona con numeros enteros y con algunos decimales nada mas. Muchas gracias por su tiempo. Título: Re: Problemas con el vuelto en monedas Publicado por: BatchianoISpyxolo en 5 Noviembre 2012, 17:36 pm No he leído mucho pero el error creo que está aquí:
Código
Cantidad debe ser mayor o igual a 0. Nunca vas a tener cantidades negativas. Como tú dices, si tienes 1.4 y vas restando .25, llegará un momento que saltes de un valor > 0 a otro valor < 0 entonces nunca será igual a 0 y el bucle se hará infinito. Por tanto: Código
Edito: debe ser mayor que 0 para que no se haga ciclo infinito. Título: Re: Problemas con el vuelto en monedas Publicado por: adripillo14 en 5 Noviembre 2012, 17:49 pm No he leído mucho pero el error creo que está aquí: Código
Cantidad debe ser mayor o igual a 0. Nunca vas a tener cantidades negativas. Como tú dices, si tienes 1.4 y vas restando .25, llegará un momento que saltes de un valor > 0 a otro valor < 0 entonces nunca será igual a 0 y el bucle se hará infinito. Por tanto: Código
Gracias por responderme pero tampoco funciona asi. Título: Re: Problemas con el vuelto en monedas Publicado por: BatchianoISpyxolo en 5 Noviembre 2012, 19:08 pm No funciona por la precisión. :[
Siempre testea el valor de las variables así sabrás que pasa. O a couts o con gdb (por ejemplo)... La solución está en que si tienes una cantidad inferior a .01 salgas del bucle.. O sea lo puedes hacer así: Código
¿ float canta = 0; float cante = 0; float canti = 0; ? Título: Re: Problemas con el vuelto en monedas Publicado por: adripillo14 en 5 Noviembre 2012, 19:34 pm No funciona por la precisión. :[ Siempre testea el valor de las variables así sabrás que pasa. O a couts o con gdb (por ejemplo)... La solución está en que si tienes una cantidad inferior a .01 salgas del bucle.. O sea lo puedes hacer así: Código
¿ float canta = 0; float cante = 0; float canti = 0; ? Esas canta, cante y canti son por unas pruebas. Con la solucion q me diste sale pero el resultado no es correcto en algunos casos como por ejemplo en 1.4 alguna otra idea? Título: Re: Problemas con el vuelto en monedas Publicado por: BatchianoISpyxolo en 5 Noviembre 2012, 19:35 pm ... A mí sí me da.
Edito: Me faltaba sumar la h del final. Edito el código arriba. Cuando usas dos decimales no termina de funcionar bien. Título: Re: Problemas con el vuelto en monedas Publicado por: adripillo14 en 5 Noviembre 2012, 19:54 pm ... A mí sí me da. Edito: Me faltaba sumar la h del final. Edito el código arriba. Cuando usas dos decimales no termina de funcionar bien. mira, esta es la salida de catidad = 1.4 Código: cantidad = 1.4 deberia usar 1 de 0.05 y ninguna de 0.01. Título: Re: Problemas con el vuelto en monedas Publicado por: adripillo14 en 5 Noviembre 2012, 20:32 pm mira, esta es la salida de catidad = 1.4 Código: cantidad = 1.4 deberia usar 1 de 0.05 y ninguna de 0.01. Fijate algo, puse couts en cada for para ver el valor de "cantidad". Cuando ingreo 1.4 empieza a restar y va lo mas bien hasta que le queda de resto "0.05". Ahi deberia restarle al "0.05" y darle 0 de "cantidad" y salir, pero no. Cuando le queda de cantidad = 0.05 no resta a la parte de 0.05 sino que se la saltea y va direcamente a restar a la de 0.01 y empieza hasta que queda "cantidad = 0.02", al proximo resto "cantidad va a 0.00999". La falla es que no resta 0.05 a 0.05, ahi deberia terminar. Título: Re: Problemas con el vuelto en monedas Publicado por: leosansan en 5 Noviembre 2012, 21:01 pm Citar Creo que el planteamiento es quitar todas las posbles monedas de 0.249, a lo que resta las de 0.099 y así sucesivamente. ¿Por qué esos valores y no 0.25 y 0.10?. Por los dichosos redondeos que hacen que cantidad sea "ligeramente" inferior a partir del primer cálculo. Con este planteamiento resulta: Código Saludos!. Título: Re: Problemas con el vuelto en monedas Publicado por: adripillo14 en 5 Noviembre 2012, 21:41 pm Código Saludos!. EXCELENTE!!!!!!!!!. Hacia 3 dias que no duermo, MIL GRACIAS!!!!!!!!. Título: Re: Problemas con el vuelto en monedas Publicado por: xiruko en 5 Noviembre 2012, 21:44 pm te dejo otra manera de hacerlo por si te sirve de ayuda:
Código
y la salida: Código: xiruko:~$ gcc monedas.c -o monedas un saludo! modifico: no vi que ya habias resuelto tu duda. igualmente lo dejo por si te sirve. Título: Re: Problemas con el vuelto en monedas Publicado por: leosansan en 5 Noviembre 2012, 22:19 pm ....... y la salida: Código: Introduce la cantidad: 1.4 Citar Salida que se obtiene con la ligera modiicación de los valores M, como comenté por los redondeos: Código Muy aguda la solución !!!. Saludos!. Título: Re: Problemas con el vuelto en monedas Publicado por: adripillo14 en 5 Noviembre 2012, 22:49 pm Muchas gracias a todos!!!!!.
Título: Re: Problemas con el vuelto en monedas Publicado por: xiruko en 5 Noviembre 2012, 23:03 pm gracias leosansan por la correccion, probe el codigo un par de veces y funcionaba bien asi que supuse que no habria ningun problema.
lo que pasa es que no entiendo porque pasa esto. si pruebo con 0.40 la solucion es correcta, pero con 1.40 no. ademas, teniendo en cuenta que la conversion a entero de un real se hace mediante truncamiento, no entiendo por que pasa esto. alguien sabe la respuesta? gracias! |