Betrag von 0-99 ct auf so wenige Münzen wie möglich verteilen

  • Excel

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von peterfido.

    Betrag von 0-99 ct auf so wenige Münzen wie möglich verteilen

    Hallo liebe Forengemeinde,

    ich versuche einen beliebigen Geldbetrag zwischen 0-99 ct (durch Inputbox eingegeben) auf so wenige Münzen (50 ct, 20 ct, 10 ct, 5 ct, 2 ct, 1 ct) wie möglich zu verteilen und weiß leider nicht wie.
    Meine Überlegungen waren, den eingegebenen Betrag immer durch 2 zu teilen und den Rest aufzufangen (Mod-Funktion). Allerdings weiß ich nicht, wie ich den resultierenden Quotienten bzw den Rest auf die Münzen verteilen soll, sodass dies für einen beliebigen Betrag funktioniert. Ich hoffe ihr könnt mir helfen, bin leider absoluter VB Anfänger und versuche mir das ein wenig autodidaktisch beizubringen.

    Vielen Dank im Voraus und liebe Grüße,

    omaka
    Hier mal was kurzes:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Property Worth As Integer
    2. Public Sub New(ByVal coinworth As Integer)
    3. Worth = coinworth
    4. End Sub
    5. End Class
    6. Public Function GetCoinList(ByVal money As Integer) As List(Of Coin)
    7. Dim returnlist As New List(Of Coin)
    8. While money / 50 > 1 OrElse money = 50
    9. returnlist.Add(New Coin(50))
    10. money = money - 50
    11. End While
    12. While money / 20 > 1 OrElse money = 20
    13. returnlist.Add(New Coin(20))
    14. money = money - 20
    15. End While
    16. While money / 10 > 1 OrElse money = 10
    17. returnlist.Add(New Coin(10))
    18. money = money - 10
    19. End While
    20. While money / 5 > 1 OrElse money = 5
    21. returnlist.Add(New Coin(5))
    22. money = money - 5
    23. End While
    24. While money / 2 > 1 OrElse money = 2
    25. returnlist.Add(New Coin(2))
    26. money = money - 2
    27. End While
    28. While money / 1 > 1 OrElse money = 1
    29. returnlist.Add(New Coin(1))
    30. money = money - 1
    31. End While
    32. Return returnlist
    33. End Function

    @nafets3646 hast zwar Recht aber müssen den Neuzugang doch nicht verschrecken ;D

    8-) faxe1008 8-)

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „faxe1008“ ()

    @faxe1008 Das lässt sich sehr leicht abkürzen. Schau dir das mal an.

    VB.NET-Quellcode

    1. Public Function GetValues(ByVal v As Double) As List(Of Integer)
    2. Dim lValues As New List(Of Integer) From {50, 20, 10, 5, 1}
    3. Dim lResult As New List(Of Integer)
    4. lValues.ForEach(Sub(d As Integer)
    5. While (v >= d)
    6. lResult.Add(d)
    7. v = v - d
    8. End While
    9. End Sub)
    10. Return lResult
    11. End Function
    12. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    13. Dim d = GetValues(85)
    14. End Sub
    Tatsächlich geht es sogar noch schöner. ;)

    Quellcode: vb.net

    1. Public Shared Function MoneyToCash(value As Integer) As Integer()
    2. Dim cashValues = {50000, 20000, 10000, 5000, 2000, 1000, 500, 200, 100, 50, 20, 10, 5, 2, 1}
    3. Dim result = New Integer(cashValues.Length) {}
    4. For i = 0 To cashValues.Length - 1
    5. result(i) = Math.DivRem(value, cashValues(i), value)
    6. Next
    7. Return result
    8. End Function
    Die DivRem-Funktion kannst du dir einfach so nachbauen:

    Visual Basic-Quellcode

    1. Function DivRem(ByVal a As Integer, ByVal b As Integer, ByRef result As Integer) As Integer
    2. result = a Mod b
    3. Return a \ b
    4. End Function
    Ansonsten kommt eigentlich nichts im Code vor, was in VBA nicht auch gehen würde.
    Hallo für die schnelle Hilfe,

    und entschuldigt, dass ich augenscheinlich nicht schon nach dem Problem gesucht habe. Ich habe gesucht, aber die Threads passen nicht so recht auf meinen Kenntnisstand. Ich darf nur bekannte Funktionen verwenden, also die input/msgbox, mod, var, if, for/loop Schleife und natürlich die Variablendeklaration mit integer, double, string. Aus diesen Grundkörpern sollte es gehen das Problem zu lösen, also dass ich über eine Inputbox zB 77 ct eingebe, und das Makro mir automatisch anzeigt, 1x50 ct, 1x20 ct, 1x5 ct und 1 x2 ct, also die Verteilung mit den wenigsten Münzen.
    Sorry, wenn ich eure Lösungen leider großteils nicht wirklich nachvollziehen kann. :?:

    Gruß omaka
    Ja wenn das so ist, dann ist es hilfreich, wenn Du Deinen jetzigen Code postest.

    Spoiler anzeigen

    Visual Basic-Quellcode

    1. Private Sub Muenzenzaehler()
    2. Dim Muenze(5) As Integer
    3. Dim Wert(5) As Integer
    4. Dim i As Integer
    5. Dim Summe As Integer
    6. Dim s As String
    7. Wert(0) = 50
    8. Wert(1) = 20
    9. Wert(2) = 10
    10. Wert(3) = 5
    11. Wert(4) = 2
    12. Wert(5) = 1
    13. s = InputBox("Bitte Betrag in Cent eingeben", "Münzenzähler", "99")
    14. If IsNumeric(s) Then
    15. Summe = CInt(s)
    16. s = ""
    17. For i = 0 To 5
    18. Muenze(i) = Int(Summe / Wert(i))
    19. Summe = Summe Mod Wert(i)
    20. s = s & "Anzahl " & Wert(i) & "er: " & Muenze(i) & vbLf
    21. Next i
    22. MsgBox s, vbOKOnly + vbInformation, "Münzenzähler"
    23. End If
    24. End Sub

    Gruß
    Peterfido

    Keine Unterstützung per PN!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „peterfido“ ()