javascript

JavaScript: convertir dinero a monedas y billetes

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

Convirtiendo dinero a monedas y billetes

Veamos un ejemplo…

Entrada:

  • Número: 46
  • Denominaciones disponibles: 25, 10, 5, 2, 1

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.

Explicación del algoritmo

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.

Convertir dinero a monedas y billetes con JS

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.

Modo de uso

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:

JavaScript – Convertir cantidad de dinero a monedas y billetes de distinta denominación

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.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.