2
« en: 21 de Noviembre 2016, 02:28 »
Te hize una solución a lo que pides, eso sí no controlé que cuando pides coste o lo que entregas metas un entero. Es decir, si donde pone "introduce el coste" pones algo que no sea de tipo int te dará una excepción no controlada, Ej meter 'a'.
Tampoco te controlé los casos pues es hacer un while (caso > 0) que englobe el codigo disminuyendo uno "caso--;" al final de cada vuelta al bucle.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MinimoMonedas
{
class ConversionMonedas
{
static void Main(string[] args)
{
int[] totalMonedas = new int[8]; //Aqui guardamos el total de monedas. Abajo se pone que posición ocupa cada moneda.
string[] nombreMonedas = { "2 Euros", "1 Euro", "50 Céntimos", "20 Céntimos", "10 Céntimos", "5 Céntimos", "2 Céntimos", "1 Céntimo" }; //Guardamos el nombre de cada moneda en este array.
//Las monedas no cambiarán, por lo tanto guardamos el valor como constante. (Se podría utilizar otro array para esto pero creo que así se ve más claro).
const int MONEDA2E = 200; //totalMonedas [0]
const int MONEDA1E = 100; //totalMonedas [1]
const int MONEDA50C = 50; //totalMonedas [2]
const int MONEDA20C = 20; //totalMonedas [3]
const int MONEDA10C = 10; //totalMonedas [4]
const int MONEDA5C = 5; //totalMonedas [5]
const int MONEDA2C = 2; //totalMonedas [6]
const int MONEDA1C = 1; //totalMonedas [7]
int coste;
int entrega;
int vuelta = 0;
int auxVuelta = 0; //Para aplicar las cuentas y dejar el valor de vuelta almacenado.
Console.Write("Introduce el precio del artículo: ");
coste = int.Parse(Console.ReadLine());
Console.Write("\nIntroduce cuanto entrega el cliente: ");
entrega = int.Parse(Console.ReadLine());
{
if (entrega > coste)
{
vuelta = entrega - coste;
auxVuelta = vuelta;
do
{
if (auxVuelta >= MONEDA2E)
{
auxVuelta -= MONEDA2E; //Restamos a la vuelta la moneda que vamos a dar.
totalMonedas[0]++; //Sumamos 1 a la posicion de la moneda de 2€ en el array de int.
continue; //Con cada continue volvemos a la condición booleana del DO WHILE, y volvemos a iniciar el bucle desde el principio.
}
if (auxVuelta >= MONEDA1E)
{
auxVuelta -= MONEDA1E;
totalMonedas[1]++;
continue;
}
if (auxVuelta >= MONEDA50C)
{
auxVuelta -= MONEDA50C;
totalMonedas[2]++;
continue;
}
if (auxVuelta >= MONEDA20C)
{
auxVuelta -= MONEDA20C;
totalMonedas[3]++;
continue;
}
if (auxVuelta >= MONEDA10C)
{
auxVuelta -= MONEDA10C;
totalMonedas[4]++;
continue;
}
if (auxVuelta >= MONEDA5C)
{
auxVuelta -= MONEDA5C;
totalMonedas[5]++;
continue;
}
if (auxVuelta >= MONEDA2C)
{
auxVuelta -= MONEDA2C;
totalMonedas[6]++;
continue;
}
if (auxVuelta >= MONEDA1C)
{
auxVuelta -= MONEDA1C;
totalMonedas[7]++;
continue;
}
} while (auxVuelta != 0);
Console.WriteLine("\nEntrega {0} centimos y el coste es {1} centimos por lo tanto la vuelta es {2} centimos.", entrega, coste, vuelta);
Console.WriteLine("\nPara devolver {0} Céntimos con el mínimo de monedas hay que dar:", vuelta);
}
else
Console.WriteLine("\nEntrega {0} centimos y el coste es {1} centimos por lo tanto DEBE {2} centimos", entrega, coste, coste - entrega);
for (int i = 0; i < totalMonedas.Length; i++) //Recorremos el array de monedas para ver cuantas hay.
{
if (totalMonedas[i] != 0) //Si hay mas de 0 monedas de esa clase, las escribimos, sino, pasamos al siguiente tipo de moneda.
if (totalMonedas[i] == 1) //Controlamos el plural y singular en las monedas con este if.
Console.WriteLine("[{0}] moneda de {1}\n", totalMonedas[i], nombreMonedas[i]);
else
Console.WriteLine("[{0}] monedas de {1}\n", totalMonedas[i], nombreMonedas[i]);
}
Console.WriteLine("\nPulsa Enter para salir."); //Para poder leer las monedas al final sin que acabe la ejecución. Con el caso saltaría al otro caso.
Console.ReadLine();
}
}
}
}
Espero que te sea de ayuda.