- 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