Ne ho capito e imparato il concetto.
L'idea è di usare un array su cui lavorare, in cui immettere gli elementi.
Ho un array chiamato matrice.
mario.nome = "Mario" giuseppe.nome = "Giuseppe" luigi.nome = "Luigi" mario.preferenza = 80 giuseppe.preferenza = 80 luigi.preferenza = 20 matrice = New ArrayList matrice.Add(mario) matrice.Add(giuseppe) matrice.Add(luigi)Ora mi immetto gli elementi su un array che chiamo matrice2, e verifico:
matrice2 = New ArrayList For n = 0 To matrice.Count - 1 matrice2.Add(matrice(n)) Next For n = 0 To matrice2.Count - 1 Debug.Print(matrice2(n).nome) Next
Mario Giuseppe Luigi
Bene.
Adesso faccio le operazioni su questa matrice:
Conto il totale delle singole preferenze, memorizzandolo nella variabile totale
For n = 0 To matrice2.Count - 1 totale += matrice2(n).preferenza NextEseguo il calcolo che attribuisce i turni a seconda della preferenza:
For n = 0 To matrice2.Count - 1 matrice2(n).turni = Math.Floor(numTurni / totale * matrice2(n).preferenza) Nexte verifico, nella matrice iniziale matrice l'attribuzione dei turni, contando il totale dei turni attribuiti;
Quindi stampo i turni attribuiti e il resto da attribuire:
For n = 0 To matrice.Count - 1 Debug.Print(matrice(n).nome & " " & matrice(n).turni) attribuiti += matrice(n).turni Next resto = numTurni - attribuiti Debug.Print("attribuiti " & attribuiti) Debug.Print("resto " & resto)Ecco:
Mario 44 Giuseppe 44 Luigi 11 attribuiti 99 resto 1
Fin qua nessuna novità: ora, però, provo a cancellare matrice2. Ecco tutto il codice con il codice che cancella la matrice2 in rosso. Quella matrice mi serve solo per lavorarci.
mario.nome = "Mario"
giuseppe.nome = "Giuseppe"
luigi.nome = "Luigi"
mario.preferenza = 80
giuseppe.preferenza = 80
luigi.preferenza = 20
matrice = New ArrayList
matrice.Add(mario)
matrice.Add(giuseppe)
matrice.Add(luigi)
matrice2 = New ArrayList
For n = 0 To matrice.Count - 1
matrice2.Add(matrice(n))
Next
For n = 0 To matrice2.Count - 1
totale += matrice2(n).preferenza
Next
For n = 0 To matrice2.Count - 1
matrice2(n).turni = Math.Floor(numTurni / totale * matrice2(n).preferenza)
Next
matrice2.Clear()
For n = 0 To matrice.Count - 1
Debug.Print(matrice(n).nome & " " & matrice(n).turni)
attribuiti += matrice(n).turni
Next
resto = numTurni - attribuiti
Debug.Print("attribuiti " & attribuiti)
Debug.Print("resto " & resto)
Ora posso scegliere se distribuire i turni restanti solo a quelli che hanno il massimo delle preferenze o se escludere quelli che vogliono il minimo.
Questa soluzione mi sembra la più giusta.
Dunque devo costruire una funzione che elimini quelli che vogliono il minimo, progressivamente.
Nessun commento:
Posta un commento