lunes, 5 de marzo de 2012

Ejercicio "Cambio"

Realizar una aplicación que recoja por teclado la cantidad total a pagar y la cantidad que se ha entregado. La aplicación debe calcular el cambio correspondiente con el menor número de monedas y/o billetes posibles.

Module Module1

    Sub Main()
        Dim total, entregado, vuelta As Double
        Dim billetes() As Single = {500, 200, 100, 50, 20, 10, 5}
        Dim monedas() As Single = {200, 100, 50, 20, 10, 5, 2, 1}
        Dim resultado(14) As Integer

        Console.Write("Introduzca la cantidad total: ")
        total = Console.ReadLine
        Console.Write("Introduzca la cantidad entregada: ")
        entregado = Console.ReadLine

        Console.WriteLine()

        'Comprobamos las cantidades
        If (total > entregado) Then
            Console.WriteLine("Las cantidades no son correctas.")
            Console.WriteLine("La cantidad entregada debe ser mayor o igual al total.")
        ElseIf (total = entregado) Then
            Console.WriteLine("Ha entregado la cantidad exacta. No tiene cambio.")
        Else
            'Calculamos la vuelta
            vuelta = entregado - total

            Console.WriteLine("Su vuelta es: " & vuelta & " Euros.")

            ' 1º con los billetes
            Dim i As Integer = 0
            For Each cantidad As Single In billetes
                ' \ división entera
                resultado(i) = vuelta \ cantidad
                ' Lo que queda es el resto
                vuelta = vuelta Mod cantidad
                i += 1
            Next

            ' Me daba error si cogía el valor de las monedas con decimales
            ' Así que multipliqué tanto el valor de estas como lo que queda de vuelta por 100
            vuelta = vuelta * 100

            ' 2º con las monedas
            For Each cantidad As Single In monedas
                resultado(i) = vuelta \ cantidad
                vuelta = vuelta Mod cantidad
                i += 1
            Next

            Dim j As Integer = 0
            For i = 0 To 6
                If (resultado(j) <> 0) Then
                    Console.WriteLine(resultado(j) & " billetes de " & billetes(i) & " Euros.")
                End If
                j += 1
            Next

            For i = 0 To 7
                If (resultado(j) <> 0) Then
                    Console.WriteLine(resultado(j) & " monedas de " & (monedas(i) / 100) & " Euros.")
                End If
                j += 1
            Next

        End If

        Console.ReadKey()
    End Sub

End Module

No hay comentarios:

Publicar un comentario