- totPref, che parte da zero e viene calcolato con un ciclo for-next
- numTurni, che è il numero totale dei turni a disposizione, il quale parte con un preciso valore
- attribuiti, che è il numero dei turni attribuiti, calcolato nel ciclo for-next che calcola i turni
- resto, che viene calcolato alla fine di ogni ciclo Loop, ottenuto sottraendo attribuiti da numTurni.
mario.nome = "Mario"
giuseppe.nome = "Giuseppe"
luigi.nome = "Luigi"
mario.preferenza = 0
giuseppe.preferenza = 20
luigi.preferenza = 20
matrice = New ArrayList
matrice.Add(mario)
matrice.Add(giuseppe)
matrice.Add(luigi)
Creazione della matrice "di lavoro":
Dim matrice2 As New ArrayList
Rimescolamento e ordinamento della matrice principale:
'Rimescolamento casuale della matrice di partenza
Dim r As New Random
Dim x As Integer
Dim temp As persona
For n = 0 To matrice.Count - 1
x = r.Next(matrice.Count - n) + n
temp = matrice(n)
matrice(n) = matrice(x)
matrice(x) = temp
Next
'ordinamento della matrice
matrice.Sort()
Caricamento degli elementi nella matrice di lavoro (inizia il ciclo):
Do
For n = startnum To matrice.Count - 1
matrice2.Add(matrice(n))
Next
Calcolo del totale delle preferenze totPref:
'si calcola il totale delle preferenze
totPref = 0
For n = 0 To matrice2.Count - 1
totPref += matrice2(n).preferenza
Next
Esecuzione del calcolo con calcolo dei turni attribuiti e del resto, da numTurni e attribuiti:
'quindi si fa il calcolo
For n = 0 To matrice2.Count - 1
matrice2(n).turni += Math.Floor(numTurni / totPref * matrice2(n).preferenza)
attribuiti += Math.Floor(numTurni / totPref * matrice2(n).preferenza)
resto = numTurni - attribuiti
Next
Mostra la matrice di partenza con i turni attribuiti
'mette a video la matrice di partenza
mostra(matrice)
Debug.Print("resto " & resto)
Debug.Print("-----")
Azzera totPref e attribuiti, che vanno ricalcolati al ciclo successivo; cancella la matrice di lavoro; attribuisce a numTurni il valore di resto e avanza startNum per caricare nuovamente nella matrice di lavoro con esclusione dei valori di preferenza più bassi; ricomincia il ciclo:
totPref = 0
attribuiti = 0
matrice2.Clear()
numTurni = resto
startnum += 1
Loop While resto <> 0
Nessun commento:
Posta un commento