Hallo,
ich soll in meinen Programmen die ich schreibe ab heute Arrays benutzen. Entsprechend habe ich eine Aufgabe rausgesucht um ein wenig damit dem umgang zu üben. Die Aufgabe sieht vor, das ich einen Automaten habe, der Kleingeld ausgibt je nach Einwurf des Betrags (Fahrkarte kostet 2 Euro, 10 Euro wurden bezahlt --> Restgeld 8 Euro) allerdings soll der Betrag nur in Münzen und mit möglichst wenig Münzen rausgeben. Das Grundgerüst mit den Arrays hat soweit schon gut funktioniert, allrdings wollte ich noch einen draufsetzen und sagen, das der Automat nur eine bestimmte Kapazität an Münzen zur Verfügung hat und wenn diese aufgebraucht sind, an den nächst größten Speicher zu gehen. Ich habe das ganze bisher wiefolgt aufgebaut:
Den Fehler warum das Programm nicht geht kenne ich schon, da er bei der 2 Euromünze immer und immer wieder in die Ifschleife geht und somit bei einer Ausgabe von Fahrkosten 3,10 und Bezahlt 100 sagt, das ich 20x 2 Euro bekomme aber über 50x die 1 Euro Münze.
Ich könnte das vielleicht über eine relativ große Ifabfrage abfangen aber das sieht irgendwie "doof" aus. Besteht nicht die möglichkeit, das ich von einem Case in den nächsten "springen kann? Nach dem Motto:
Führe dies 1 mal aus und gehe dann nicht mehr in diesen Fall? Das man das ganze quasi "sperren" würde oder denke ich hier einfach zu durcheinander?
ich soll in meinen Programmen die ich schreibe ab heute Arrays benutzen. Entsprechend habe ich eine Aufgabe rausgesucht um ein wenig damit dem umgang zu üben. Die Aufgabe sieht vor, das ich einen Automaten habe, der Kleingeld ausgibt je nach Einwurf des Betrags (Fahrkarte kostet 2 Euro, 10 Euro wurden bezahlt --> Restgeld 8 Euro) allerdings soll der Betrag nur in Münzen und mit möglichst wenig Münzen rausgeben. Das Grundgerüst mit den Arrays hat soweit schon gut funktioniert, allrdings wollte ich noch einen draufsetzen und sagen, das der Automat nur eine bestimmte Kapazität an Münzen zur Verfügung hat und wenn diese aufgebraucht sind, an den nächst größten Speicher zu gehen. Ich habe das ganze bisher wiefolgt aufgebaut:
VB.NET-Quellcode
- Dim wechselgeld() As Decimal = {2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01}
- Dim anzahl() As Decimal = {0, 0, 0, 0, 0, 0, 0, 0}
- Dim maximum() As Integer = {20, 20, 20, 20, 20, 20, 20, 20}
- Dim zuzahlen As Decimal
- Dim bezahltmit As Decimal
- Dim rückgeld As Decimal
- 'übergabe
- zuzahlen = Convert.ToDecimal(txtzubezahlen.Text)
- bezahltmit = Convert.ToDecimal(txtbezahltmit.Text)
- rückgeld = bezahltmit - zuzahlen
- txtrückgeld.Text = rückgeld
- Do Until rückgeld = 0
- Select Case rückgeld
- Case Is >= 2
- If maximum(0) = 0 Then
- rückgeld = rückgeld - wechselgeld(1)
- anzahl(1) = anzahl(1) + 1
- maximum(1) = maximum(1) - 1
- Else
- rückgeld = rückgeld - wechselgeld(0)
- anzahl(0) = anzahl(0) + 1
- maximum(0) = maximum(0) - 1
- End If
- Case Is >= 1
- If maximum(1) = 0 Then
- rückgeld = rückgeld - wechselgeld(2)
- anzahl(2) = anzahl(2) + 1
- maximum(2) = maximum(2) - 1
- Else
- rückgeld = rückgeld - wechselgeld(1)
- anzahl(1) = anzahl(1) + 1
- maximum(1) = maximum(1) - 1
- End If
- Case Is >= 0.5
- If maximum(2) = 0 Then
- rückgeld = rückgeld - wechselgeld(3)
- anzahl(3) = anzahl(3) + 1
- maximum(3) = maximum(3) - 1
- Else
- rückgeld = rückgeld - wechselgeld(2)
- anzahl(2) = anzahl(2) + 1
- maximum(2) = maximum(2) - 1
- End If
- Case Is >= 0.2
- If maximum(3) = 0 Then
- rückgeld = rückgeld - wechselgeld(4)
- anzahl(4) = anzahl(4) + 1
- maximum(4) = maximum(4) - 1
- Else
- rückgeld = rückgeld - wechselgeld(3)
- anzahl(3) = anzahl(3) + 1
- maximum(3) = maximum(3) - 1
- End If
- Case Is >= 0.1
- If maximum(4) = 0 Then
- rückgeld = rückgeld - wechselgeld(5)
- anzahl(5) = anzahl(5) + 1
- maximum(5) = maximum(5) - 1
- Else
- rückgeld = rückgeld - wechselgeld(4)
- anzahl(4) = anzahl(4) + 1
- maximum(4) = maximum(4) - 1
- End If
- Case Is >= 0.05
- If maximum(6) = 0 Then
- rückgeld = rückgeld - wechselgeld(6)
- anzahl(6) = anzahl(6) + 1
- maximum(6) = maximum(6) - 1
- Else
- rückgeld = rückgeld - wechselgeld(5)
- anzahl(5) = anzahl(5) + 1
- maximum(5) = maximum(5) - 1
- End If
- Case Is >= 0.02
- If maximum(7) = 0 Then
- rückgeld = rückgeld - wechselgeld(7)
- anzahl(7) = anzahl(7) + 1
- maximum(7) = maximum(7) - 1
- Else
- rückgeld = rückgeld - wechselgeld(6)
- anzahl(6) = anzahl(6) + 1
- maximum(6) = maximum(6) - 1
- End If
- Case Is >= 0.01
- rückgeld = rückgeld - wechselgeld(7)
- anzahl(7) = anzahl(7) + 1
- maximum(7) = maximum(7) - 1
- End Select
- Loop
- For i = 0 To 7
- lstausgabe.Items.Add(wechselgeld(i) & " Euro: " & anzahl(i))
- Next
Den Fehler warum das Programm nicht geht kenne ich schon, da er bei der 2 Euromünze immer und immer wieder in die Ifschleife geht und somit bei einer Ausgabe von Fahrkosten 3,10 und Bezahlt 100 sagt, das ich 20x 2 Euro bekomme aber über 50x die 1 Euro Münze.
Ich könnte das vielleicht über eine relativ große Ifabfrage abfangen aber das sieht irgendwie "doof" aus. Besteht nicht die möglichkeit, das ich von einem Case in den nächsten "springen kann? Nach dem Motto:
Führe dies 1 mal aus und gehe dann nicht mehr in diesen Fall? Das man das ganze quasi "sperren" würde oder denke ich hier einfach zu durcheinander?