Originariamente inviato da gotta
usando il secondo metodo nn è che potresti farmi un esempio scritto?perchè non ho capito bene
A pensarci bene, dovendo tener conto che finita la sequenza si deve ricominciare da capo, non era proprio semplicissimo, dovendo utilizzare variabili Static, ecc..
Ti posto la mia versione:
codice:
Function Random() As Integer
Const N As Integer = 4 'ultimo numero generabile, intervallo (0...N)
Static X(0 To N) As Integer 'il vettore con i numeri casuali
Static pr As Integer 'l'indice progressivo del numero da restituire
Dim i As Integer, j As Integer, s As Integer, v As Integer
If pr = 0 Then
'e' la prima chiamata o abbiamo esaurito i numeri: inizializziamo!
For i = 0 To N
X(i) = i 'memorizziamo in X() i numeri, per ora in ordine...
Next
Randomize Timer
For v = 1 To 3 'numero di "smazzate" per mischiare per bene
For i = 0 To N 'il numero d'ordine i lo scambiamo...
j = Int(Rnd * (N + 1)) ' con quello j, scelto a caso
s = X(i)
X(i) = X(j)
X(j) = s
Next 'per tutti i numeri nel "mazzo"
Next 'ripetiamo per il numero di "smazzate"
'OK, ora i numeri sono in ordine "casuale"
Random = X(0) 'restituiamo il primo della lista
pr = 1 'l'indice del prossimo da restituire
Else
'ci sono ancora numeri disponibili, semplicemente restituiamo quello d'indice pr
Random = X(pr)
pr = pr + 1 'aggiorniamo l'indice
If pr > N Then
'se abbiamo restituito l'ultimo, resettiamo pr per la successiva re-inizializzazione
pr = 0
End If
End If
End Function
Spero che possa servirti, ciao !!!