Originariamente inviato da savana1983
...sarebbe ottimo se per ogni dipendente si dovrebbe eseguire questa istruzione e poi fare la somma di tutti...si potrebbe fare 'sta cosa...???
Si, si può fare
.
Ho deciso di farlo modificando l'array BanconoteRichieste() in uno bidimensionale. In questo modo il primo indice corrisponde al numero del dipendente mentre il seconodo al taglio della banconota.
Se ad esempio volessi sapere quante banconote da 10 euro sono necessarie al pagamento del terzo dipendente, mi basterrà leggere il valore relativo a BanconoteRichieste(2,4)
:
codice:
Private Sub Command1_Click()
Const NumeroDipendenti = 3
Dim BanconoteRichieste() As Integer
Dim BanconoteTotali(0, 7) As Integer
Dim SommeDipendenti(NumeroDipendenti - 1) As Single
Dim Cont1 As Integer
Dim Cont2 As Integer
Dim Annullato As Boolean
Dim NumTemp As Single
Dim StrTemp As String
'Inserimento
For Cont1 = 0 To (NumeroDipendenti - 1)
StrTemp = InputBox("Inserire somma per dipendente " & CStr(Cont1 + 1), "Inserimento")
If Len(StrTemp) > 0 Then
SommeDipendenti(Cont1) = CSng(StrTemp)
Else
Annullato = True
Exit For
End If
Next Cont1
If Annullato = False Then
'Calcolo
For Cont1 = 0 To (NumeroDipendenti - 1)
NumTemp = SommeDipendenti(Cont1)
Call CalcoloBanconoteNecessarie(NumTemp, NumeroDipendenti, Cont2, BanconoteRichieste())
Cont2 = Cont2 + 1
Next Cont1
'Messaggio dipendenti
For Cont1 = 0 To (NumeroDipendenti - 1)
MsgBox BanconoteNecessarie(Cont1, BanconoteRichieste()), vbInformation, "Risultato per dipendente " & CStr(Cont1 + 1)
Next Cont1
'Messaggio totale
For Cont1 = 0 To (NumeroDipendenti - 1)
For Cont2 = 0 To 7
BanconoteTotali(0, Cont2) = BanconoteTotali(0, Cont2) + BanconoteRichieste(Cont1, Cont2)
Next Cont2
Next Cont1
MsgBox BanconoteNecessarie(0, BanconoteTotali()), vbInformation, "Risultato totale"
End If
End Sub
'Calcolo
Private Sub CalcoloBanconoteNecessarie(ByVal Somma As Single, ByVal NumeroDipendenti As Integer, _
ByVal Dipendente As Integer, ByRef BanconoteRichieste() As Integer)
Dim BanconoteDisponibili(7) As Integer
Dim NumTemp As Single
Dim Cont As Integer
ReDim Preserve BanconoteRichieste((NumeroDipendenti - 1&), UBound(BanconoteDisponibili))
'Array Banconote
BanconoteDisponibili(0) = 500
BanconoteDisponibili(1) = 100
BanconoteDisponibili(2) = 50
BanconoteDisponibili(3) = 20
BanconoteDisponibili(4) = 10
BanconoteDisponibili(5) = 5
BanconoteDisponibili(6) = 2
BanconoteDisponibili(7) = 1
'Calcolo banconote
Do Until Somma = 0!
NumTemp = Somma / BanconoteDisponibili(Cont)
If NumTemp >= 1! Then
Somma = Somma - (Int(NumTemp) * BanconoteDisponibili(Cont))
BanconoteRichieste(Dipendente, Cont) = CInt(Int(NumTemp))
End If
Cont = Cont + 1
Loop
End Sub
'Messaggio
Private Function BanconoteNecessarie(ByVal Dipendente As Integer, ByRef BanconoteRichieste() As Integer) As String
Dim Cont As Integer
BanconoteNecessarie = "Sono necessarie :" & vbCrLf & vbCrLf
For Cont = 0 To UBound(BanconoteRichieste, 2)
If BanconoteRichieste(Dipendente, Cont) > 0 Then
BanconoteNecessarie = BanconoteNecessarie & CStr(BanconoteRichieste(Dipendente, Cont))
If BanconoteRichieste(Dipendente, Cont) = 1 Then
BanconoteNecessarie = BanconoteNecessarie & " banconota da "
Else
BanconoteNecessarie = BanconoteNecessarie & " banconote da "
End If
Select Case Cont
Case Is = 0
BanconoteNecessarie = BanconoteNecessarie & "500 Euro"
Case Is = 1
BanconoteNecessarie = BanconoteNecessarie & "100 Euro"
Case Is = 2
BanconoteNecessarie = BanconoteNecessarie & "50 Euro"
Case Is = 3
BanconoteNecessarie = BanconoteNecessarie & "20 Euro"
Case Is = 4
BanconoteNecessarie = BanconoteNecessarie & "10 Euro"
Case Is = 5
BanconoteNecessarie = BanconoteNecessarie & "5 Euro"
Case Is = 6
BanconoteNecessarie = BanconoteNecessarie & "2 Euro"
Case Is = 7
BanconoteNecessarie = BanconoteNecessarie & "1 Euro"
End Select
BanconoteNecessarie = BanconoteNecessarie & vbCrLf
End If
Next Cont
End Function