Public Sub MyScriptRoutine()
Dim aRet ()As Long
Dim Tinizio As Single
Dim tFine As Single
Dim nQ As Long = 5000
Dim nLimite As Long, nClasse As Long
Dim k As Long
'
Messaggio ("Attendere non si puo interrompere")
nLimite = 90
nClasse = 15
Tinizio = Timer
For k = 1 To nQ
aRet = GetColonnaCasuale(nClasse, nLimite)
' Call Scrivi(StringaNumeri(aRet, "."))
Next
tFine = Timer
Scrivi "Classe : " & nClasse & " Limite : " & nLimite
Scrivi "Primo metodo colonna ordinata " & tFine - Tinizio
Tinizio = Timer
For k = 1 To nQ
aRet = GetColonnaCasuale2 (nClasse, , nLimite)
' Call Scrivi(StringaNumeri(aRet, "."))
Next
tFine = Timer
Scrivi "Classe : " & nClasse & " Limite : " & nLimite
Scrivi "secondo metodo colonna non ordinata " & tFine - Tinizio
Tinizio = Timer
For k = 1 To nQ
aRet = GetColonnaCasuale2 (nClasse, True, nLimite)
' Call Scrivi(StringaNumeri(aRet, "."))
Next
tFine = Timer
Scrivi "Classe : " & nClasse & " Limite : " & nLimite
Scrivi "secondo metodo colonna ordinata " & tFine - Tinizio
Tinizio = Timer
For k = 1 To nQ
aRet = GetColonnaCasualeLegend (nClasse, nLimite)
' Call Scrivi(StringaNumeri(aRet, "."))
Next
tFine = Timer
Scrivi "Classe : " & nClasse & " Limite : " & nLimite
Scrivi "terzo metodo colonna ordinata " & tFine - Tinizio
Scrivi
Scrivi "==========================================="
Scrivi
nLimite = 90
nClasse = 85
Tinizio = Timer
For k = 1 To nQ
aRet = GetColonnaCasuale(nClasse, nLimite)
Next
tFine = Timer
Scrivi "Classe : " & nClasse & " Limite : " & nLimite
Scrivi "Primo metodo colonna ordinata " & tFine - Tinizio
Tinizio = Timer
For k = 1 To nQ
aRet = GetColonnaCasuale2 (nClasse, , nLimite)
Next
tFine = Timer
Scrivi "Classe : " & nClasse & " Limite : " & nLimite
Scrivi "secondo metodo colonna non ordinata " & tFine - Tinizio
Tinizio = Timer
For k = 1 To nQ
aRet = GetColonnaCasuale2 (nClasse, True, nLimite)
Next
tFine = Timer
Scrivi "Classe : " & nClasse & " Limite : " & nLimite
Scrivi "secondo metodo colonna ordinata " & tFine - Tinizio
Tinizio = Timer
For k = 1 To nQ
aRet = GetColonnaCasualeLegend (nClasse, nLimite)
Next
tFine = Timer
Scrivi "Classe : " & nClasse & " Limite : " & nLimite
Scrivi "terzo metodo colonna ordinata " & tFine - Tinizio
Scrivi
Scrivi "==========================================="
Scrivi
nLimite = 30
nClasse = 25
Tinizio = Timer
For k = 1 To nQ
aRet = GetColonnaCasuale(nClasse, nLimite)
Next
tFine = Timer
Scrivi "Classe : " & nClasse & " Limite : " & nLimite
Scrivi "Primo metodo colonna ordinata " & tFine - Tinizio
Tinizio = Timer
For k = 1 To nQ
aRet = GetColonnaCasuale2 (nClasse, , nLimite)
Next
tFine = Timer
Scrivi "Classe : " & nClasse & " Limite : " & nLimite
Scrivi "secondo metodo colonna non ordinata " & tFine - Tinizio
Tinizio = Timer
For k = 1 To nQ
aRet = GetColonnaCasuale2 (nClasse, True, nLimite)
Next
tFine = Timer
Scrivi "Classe : " & nClasse & " Limite : " & nLimite
Scrivi "secondo metodo colonna ordinata " & tFine - Tinizio
Tinizio = Timer
For k = 1 To nQ
aRet = GetColonnaCasualeLegend (nClasse, nLimite)
Next
tFine = Timer
Scrivi "Classe : " & nClasse & " Limite : " & nLimite
Scrivi "terzo metodo colonna ordinata " & tFine - Tinizio
End Sub
Function GetColonnaCasuale(nClasse As Long, Optional nLimite As Long = 90) As Long()
ReDim aB(nLimite) As Long
ReDim aRet(nClasse) As Long
Dim k As Long
Dim nTrovati As Long
Dim n As Long
Do
n = NumeroCasuale (1, nLimite)
Do While aB(n)
n = NumeroCasuale (1, nLimite)
Loop
aB(n) = True
nTrovati += 1
Loop While nTrovati < nClasse
nTrovati = 0
For k = 1 To nLimite
If aB(k) Then
nTrovati + = 1
aRet(nTrovati) = k
End If
Next
Return aRet
End Function
Function GetColonnaCasuale2(nClasse As Long, Optional bOrdinata As Boolean = False, Optional nLimite As Long = 90) As Long()
ReDim aN(nLimite) As Long
ReDim aB(nLimite) As Long
ReDim aRet(nClasse) As Long
Dim k As Long
Dim nTrovati As Long
Dim n As Long
Dim nLower As Long, nUpper As Long
nLower = 1
nUpper = nLimite
For k = nLower To nUpper
aN(k) = k
Next
If bOrdinata Then
Do While nTrovati < nClasse
n = NumeroCasuale (nLower, nUpper)
nTrovati + = 1
aB(aN(n)) = True
For k = n To nUpper - 1
aN(k) = aN(k + 1)
Next
nUpper -= 1
Loop
nTrovati = 0
For k = 1 To nLimite
If aB(k) Then
nTrovati + = 1
aRet(nTrovati) = k
End If
Next
Else
Do While nTrovati < nClasse
n = NumeroCasuale (nLower, nUpper)
nTrovati += 1
aRet(nTrovati) = aN(n)
For k = n To nUpper - 1
aN(k) = aN(k + 1)
Next
nUpper -= 1
Loop
End If
Return aRet
End Function
Function GetColonnaCasualeLegend(nClasse As Long, Optional MaxNum As Long = 90, Optional sCharSep As String = ".") As Long()
Dim i As Long, nTro As Long, n As Long
ReDim aN(MaxNum) As Long
ReDim aTro(nClasse) As Long
' aZzero il vettore
For i = 1 To MaxNum
aN(i) = 0
Next
nTro = 0
Do While nTro < nClasse
n = NumeroCasuale(1, MaxNum)
If aN(n) = 0 Then
nTro + = 1
aTro(nTro) = n
aN(n) = 1
End If
Loop
Call OrdinaVettoreL(aTro, 1, 1)
Return aTro
End Function