Foros del Web » Programando para Internet » Javascript »

Programa maquina expendedora

Estas en el tema de Programa maquina expendedora en el foro de Javascript en Foros del Web. Vereis,tengo que programar una maquina expendedora en la que introduces precio y dinero que has introducido y te devuelva las monedas minimas para devolver el ...
  #1 (permalink)  
Antiguo 30/11/2014, 04:54
 
Fecha de Ingreso: noviembre-2014
Mensajes: 1
Antigüedad: 9 años, 4 meses
Puntos: 0
Programa maquina expendedora

Vereis,tengo que programar una maquina expendedora en la que introduces precio y dinero que has introducido y te devuelva las monedas minimas para devolver el cambio.Esto es lo que he hecho hasta ahora:
<script type="text/javascript">
function doseuros(dinero){
monedas2=0
do{
dinero=dinero-2
monedas2=monedas2+1
}while(dinero>=2)
cambio2=$cambio-monedas2*2
return monedas2
}

function uneuro(dinero){
monedas1=0
do {
dinero=dinero-1
monedas1++
}while(dinero>1)
cambio3=cambio2-monedas1
return monedas1
}

function cincuenta(dinero){
monedas05=0
do{
dinero=dinero-0.5
monedas05++
}while(dinero>0.5)
cambio4=cambio3-monedas05*0.5
return monedas05
}

function veinte(dinero){
monedas02=0
do{
dinero=dinero-0.2
monedas02++
}while(dinero>0.2)
cambio5=cambio4-monedas02*0.2
return monedas02
}

function diez(dinero){
monedas10=0
do{
dinero=dinero-0.1
monedas10++
}while(dinero>0.1)
cambio6=cambio5-monedas10*0.1
return monedas10
}

function cinco(dinero){
monedas005=0
do{
dinero=dinero-0.01
monedas005++
}while(dinero>0.05)
return monedas005
}


var $precio=parseInt(prompt("Precio"))
var $dinero=parseInt(prompt("Dinero introducido"))
var $cambio=$dinero-$precio
alert($cambio)

doseuros($cambio)
alert(monedas2)
uneuro(cambio2)
alert(monedas1)
cincuenta(cambio3)
alert(monedas05)
veinte(cambio4)
alert(monedas02)
diez(cambio5)
alert(monedas10)
cinco(cambio6)
alert(monedas005)
</script>
  #2 (permalink)  
Antiguo 30/11/2014, 09:54
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: Programa maquina expendedora

Tienes un montón de funciones iguales. ¿Por qué no les pones dos argumentos, moneda y cantidad, en vez de sólo cantidad?

La función que hace el cálculo es un do-while. ¿Es realmente necesario un bucle para calcular cuántas monedas de un tipo dado puedes devolver? Párate a pensar.

$precio y $dinero te los puedes ahorrar. Pregunta directamente $cambio; hacer la resta es innecesario para el problema.

En cuanto al uso de tus funciones, el trozo final de tu código donde usas $cambio, ahí sí es recomendable usar un bucle, mientras quede cambio que devolver.
  #3 (permalink)  
Antiguo 01/12/2014, 05:20
 
Fecha de Ingreso: septiembre-2011
Mensajes: 2
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Programa maquina expendedora

Estaba leyendo tu problema cuando empiezo a ver el código sin ni 1 linea de comentario. Entiendo que tú como sumo creador del código lo entiendas, pero si pretendes que la gente te ayude, aunque sea muy fácil el código escribe comentarios que son gratis y la gente no tendrá que hacer por entender tu codigo.

Por lo demás te diria lo mismo que el compañero 1 funcion con 2 parametros es mejor que muchas funciones. Intenta reultilizar lo que hagas .

Tambien te digo en Pseudocódigo una solución fácil.

array monedasDisponibles [2,1,0.5, ... ] // monedas de las que dispone la maquina
var cambio; //cambio que tendra que dar la maquina
array cambioADar; //cantidad de cada moneda que disponsara


function cambioMaquina($cambio){

for(i=0; i<monedasDisponibles.count(); i++){// recorremos todo el bucle de monedas posibles

if(monedasDisponibles[i]<$cambio){ // si la cantidad a cambiar es mayor que la moneda actual
cambioADar[i] = parteEntera($cambio/monedasDisponibles[i]); /* le doy la parte entera de la division del cambio entre las monedas*/
$cambio -= monedasDisponibles[i] * cambioADar[i]; /* quito del cambio que tengo que dar las monedas que ya he dado*/
}
if ($cambio == 0) break; // si ya no tengo que dar mas cambio termino
}
return cambioADar; // dispenso el numero de monedas
}

Bueno iba a poner pseudocodigo y al final me pudo, he mezclado un poco de muchos lenguajes intenta ponerlo en el que necesites. La funcion parteEntera no es mas que el suelo de un numero (ej.: 9.823 -> suelo o parte entera = 9)

Etiquetas: maquina, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:38.