JavaScript - Convertir cantidad de dinero a monedas y billetes de distinta denominación
Hoy vamos a resolver un ejercicio de JavaScript. Se trata de un programa para convertir un número en monedas y billetes de distinta denominación. El mismo dice así:
Escribe una función de JavaScript para convertir una cantidad X de dinero en monedas o billetes. A la función se le deben pasar los valores de las monedas y billetes en las que queremos cambiar mediante un array
Veamos un ejemplo…
Entrada:
Salida: 25, 10, 10, 1
Básicamente sirve para saber cuántas monedas y billetes vas a usar si vas a dar una determinada cantidad de dinero.
Por ejemplo, supongamos que solo existen billetes de 20, 50 y 100 pesos. Si tuviera que dar 290 pesos daría 2 billetes de 100, 1 de 50 y 2 de 20.
Nota: aquí se prefiere dar primero los billetes o monedas más grandes.
Al ejecutar esto en el programa de JavaScript, la salida es: 100, 100, 50, 20, 20
Lo cual es correcto.
Primero ordenamos el arreglo de las denominaciones disponibles para que quede ordenado de mayor a menor. Ahora nos enfocamos en la cantidad de dinero.
Recorremos las denominaciones disponibles y mientras la cantidad de dinero sea mayor o igual a la denominación actual, vamos a colocar esa denominación en una lista e ir restándola de la cantidad de dinero.
Al final vamos a terminar de recorrer todas las monedas y por lo tanto la cantidad de dinero llegará a 0. Finalmente regresamos las denominaciones usadas, mismas que tendrán los billetes y monedas que vamos a usar.
Nota: debemos garantizar que las denominaciones sean las suficientes para dar cualquier cantidad de dinero, pues si no, podríamos caer en un ciclo infinito.
Entonces el código queda como se ve a continuación. He encerrado todo el comportamiento en una función:
const dineroAMonedas = (cantidad, monedas) => {
/*
https://parzibyte.me/blog
*/ // Primero ordenamos las monedas de mayor a menor:
// https://parzibyte.me/blog/2018/10/28/ordenar-arreglos-javascript-sort/#Ordenar_arreglo_de_enteros_ascendente
monedas.sort((unNumero, otroNumero) => otroNumero - unNumero);
const monedasUsadas = [];
for (const moneda of monedas) {
while (cantidad >= moneda) {
monedasUsadas.push(moneda);
cantidad -= moneda;
}
}
return monedasUsadas;
};
Primero ordenamos las denominaciones (billetes y monedas) en la línea 7. Luego declaramos la lista de las monedas y billetes que vamos a usar en la línea 8.
Recorremos las denominaciones en la línea 9, y mientras la cantidad sea mayor o igual que la denominación actual, la agregamos a las monedas usadas con push (línea 11) además de restar esa denominación de la cantidad.
Finalmente regresamos las monedas y billetes usados en la línea 15. Todo esto programando con JavaScript.
Finalmente veamos el modo de uso para ver el código completo. Queda como se ve a continuación:
const dineroAMonedas = (cantidad, monedas) => {
/*
https://parzibyte.me/blog
*/ // Primero ordenamos las monedas de mayor a menor:
// https://parzibyte.me/blog/2018/10/28/ordenar-arreglos-javascript-sort/#Ordenar_arreglo_de_enteros_ascendente
monedas.sort((unNumero, otroNumero) => otroNumero - unNumero);
const monedasUsadas = [];
for (const moneda of monedas) {
while (cantidad >= moneda) {
monedasUsadas.push(moneda);
cantidad -= moneda;
}
}
return monedasUsadas;
};
const cantidad = 290;
const billetes = [100, 50, 20];
const monedasYBilletes = dineroAMonedas(cantidad, billetes);
console.log("Dada la cantidad %f y los billetes %s, pueden representarse con: %s", cantidad, billetes, monedasYBilletes);
Al momento de ejecutarlo la salida es correcta, es el ejemplo que usé al inicio:
Recuerda que como estamos programando en JavaScript esto puede correr en el servidor o en el cliente.
Para terminar te dejo con más tutoriales de JavaScript en mi blog.
En este post te quiero compartir un código de C++ para listar y cancelar trabajos…
Gracias a WebAssembly podemos ejecutar código de otros lenguajes de programación desde el navegador web…
Revisando y buscando maneras de imprimir un PDF desde la línea de comandos me encontré…
Esta semana estuve recreando la API del plugin para impresoras térmicas en Android (HTTP a…
Hoy te enseñaré a extraer la cadena base64 de una clave PEM usando una función…
Encender un foco con un Bot de Telegram es posible usando una tarjeta como la…
Esta web usa cookies.