Option Explicit
Class clsUscita
Public Ruota
Public idEstr
Public sData
End Class
Class clsComb
Public sNumeri
Public CollUscite
Sub Class_Terminate
Set CollUscite = Nothing
End Sub
Sub AddUscita(Ruota,idEstr,Data)
Dim cU
Set cU = New clsUscita
cU.Ruota = Ruota
cU.idEstr = idEstr
cU.sData = Data
CollUscite.Add cU
End Sub
End Class
Sub Main
Dim Inizio,Fine,idEstr,r,nClasse
Dim aRuote,nRuoteSel,aNumeri,aComb,sData
Dim CollComb
Dim Arraydicontrollo
Arraydicontrollo = Array(0,1,2,3,4,5,6,7,8,9,10)
nRuoteSel = ScegliRuote(aRuote)
Fine = EstrazioneFin
Inizio = Fine - 60 'EstrazioneIni
'Fine = EstrazioneFin
nClasse = ScegliEsito(3)
Set CollComb = GetNewCollection
For idEstr = Inizio To Fine
sData = DataEstrazione(idEstr)
For r = 1 To nRuoteSel
If aRuote(r) <> 11 Then
Call GetArrayNumeriRuota(idEstr,aRuote(r),aNumeri)
Dim nc
Dim nac
Dim vettorevoluto
Dim vettorevoluto2
If aNumeri(1) > 0 Then
Call RimuoviNumeriNonVoluti(aNumeri,Arraydicontrollo,nc,nac,vettorevoluto)
'Call OrdinaMatrice(aNumeri,1)
Call SplitByChar(StringaNumeri(vettorevoluto),".",vettorevoluto2)
Call OrdinaMatrice(vettorevoluto2,1)
'aComb = SviluppoIntegrale(aNumeri,nClasse)
aComb = SviluppoIntegrale(vettorevoluto2,nClasse)
Call AddCombInCollection(aComb,nClasse,CollComb,idEstr,aRuote(r),sData)
End If
End If
Next
Call AvanzamentoElab(Inizio,Fine,idEstr)
If ScriptInterrotto Then Exit For
Next
Call ScriviOutput(CollComb)
Set CollComb = Nothing
End Sub
Sub AddCombInCollection(aComb,nClasse,CollComb,idEstr,Ruota,sData)
Dim k,j,sNumeri,cComb,sKey
For k = 1 To UBound(aComb)
sNumeri = ""
For j = 1 To nClasse
sNumeri = sNumeri & Format2(aComb(k,j)) & "-"
Next
sNumeri = RimuoviLastChr(sNumeri,"-")
sKey = "k" & sNumeri
If GetItemCollection(CollComb,sKey,cComb) = False Then
Set cComb = New clsComb
Set cComb.CollUscite = GetNewCollection
cComb.sNumeri = sNumeri
Call AddItemColl(CollComb,cComb,sKey)
End If
Call cComb.AddUscita(Ruota,idEstr,sData)
Next
End Sub
Sub ScriviOutput(CollComb)
Dim cComb,cU,i,nColor,j,nRipetizioni,nTrov
Dim aRipetizioni(101)
For Each cComb In CollComb
nRipetizioni = cComb.CollUscite.Count
If nRipetizioni > 1 Then
If nRipetizioni > 100 Then
aRipetizioni(101) = aRipetizioni(101) + 1
Else
aRipetizioni(nRipetizioni) = aRipetizioni(nRipetizioni) + 1
End If
nTrov = nTrov + 1
ReDim aColori(nRipetizioni)
For i = 1 To nRipetizioni - 1
If cComb.colluscite(i).IdEstr = cComb.colluscite(i + 1).IdEstr Then
aColori(i) = vbRed
j = i + 1
Do
aColori(j) = vbRed
j = j + 1
If j > nRipetizioni Then Exit Do
Loop While cComb.colluscite(j).IdEstr = cComb.colluscite(i).IdEstr
i = j - 1
Else
aColori(i) = vbBlack
End If
Next
Scrivi FormatSpace(nTrov,5,True) & ") " & cComb.sNumeri,True
i = 0
For Each cU In cComb.CollUscite
i = i + 1
Scrivi " -> " & FormatSpace(cU.idestr,5) & " " & FormatSpace(cU.sData,5) & " " & NomeRuota(cU.ruota),,,,aColori(i)
Next
End If
Next
Scrivi
Scrivi
Scrivi "Riepilogo",True
For j = 2 To 100
If aRipetizioni(j) > 0 Then
Scrivi "Con " & FormatSpace(j,3) & " ripetizioni : " & FormatSpace(aRipetizioni(j),5,True)
End If
Next
If aRipetizioni(j) > 0 Then
Scrivi ">= " & FormatSpace(j,3) & " ripetizioni : " & FormatSpace(aRipetizioni(j),5,True)
End If
End Sub
'quindi devi scrivere questa funzione RimuoviNumeriNonVoluti che dovra leggere l'array ,
'mettere a 0 i numeri che non combaciano con quelli voluti , comprimenre l'array rimuovendo
'gli elementi azzerati. Inoltre potrebeb darsi che vengano azzerati tutti e In quel caso non
'deve entrare nel If successivo, oppure che ne vengano azzerati abbastanza per impedire che
'si formi una combinazione della classe voluta
Function RimuoviNumeriNonVoluti(anumeri,Arraydicontrollo,nc,nac,vettorevoluto)
For nc = 0 To UBound(anumeri)
For nac = 0 To UBound(Arraydicontrollo)
If anumeri(1) > 0 And anumeri(nc) = Arraydicontrollo(nac) Then
vettorevoluto = array_push(vettorevoluto,StringaNumeri(anumeri(nc)))
End If
Next
Next
End Function
Function array_push(arr,vars)
' Dimensiono le variabili interne alla funzione
Dim k,newelem,newarrsize,elem
' Verifico se arr è una array
If IsArray(arr) Then
' Verifico che vars non sia vuoto
If Len(vars) > 0 Then
' Verifico se vars ospita una o più virgole e quindi
' se è uno solo o un elenco di elementi.
' Se è un solo elemento...
If InStr(vars,",") = False Then
' Incremento di uno il numero di elementi
newarrsize = CInt(UBound(arr) + 1)
ReDim Preserve arr(newarrsize)
' Aggiungo in coda il nuovo elemento
arr(newarrsize) = vars
' Se vars è un elenco di elementi...
Else
' Definisco un contatore interno con valore di partenza
' pari al numero di elementi dell'array originale + 1
k =(UBound(arr) + 1)
' Creo una array con tutti i nuovi elementi da aggiungere
newelem = Split(vars,",")
' Incremento il numero di elementi per contenere quelli nuovi
newarrsize = CInt(UBound(arr) + UBound(newelem) + 1)
ReDim Preserve arr(newarrsize)
' Ciclo i nuovi elementi per aggiungerli all'array originale
For Each elem In newelem
arr(k) = Trim(elem)
k = k + 1
Next
End If
End If
array_push = arr
' Se arr non è una array la nostra funzione restituisce false
Else
array_push = False
End If
End Function
Function SelEsito
Dim ret
Dim aVoci
'aVoci = Array("","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20")
'ret = ScegliOpzioneMenu(aVoci,2," Sviluppo per grado di presenza x punti : ")
For ret = 1 To 1
SelEsito = ret
Next
End Function