L
LuigiB
Guest
anche io ho fatto delle modifiche se possibile fare altre prove..ciao a tutti
..
..
Codice:
Option Explicit
Class clsCombinazione
Private m_UltEstUscita
Private m_Key
Private m_aNum
Private m_Classe
Private m_Index
Private m_aNumComplementari
Private m_QNumComplementari
Sub Class_Initialize
' codice
End Sub
Sub Class_Terminate
' codice
End Sub
Public Property Get QNumComplementari
QNumComplementari = m_QNumComplementari
End Property
Public Property Let QNumComplementari(NewValue)
m_QNumComplementari = NewValue
End Property
Public Property Get Index
Index = m_Index
End Property
Public Property Let Index(NewValue)
m_Index = NewValue
End Property
Public Property Get Classe
Classe = m_Classe
End Property
Public Property Let Classe(NewValue)
m_Classe = NewValue
End Property
Public Property Get Key
Key = m_Key
End Property
Public Property Let Key(NewValue)
m_Key = NewValue
End Property
Public Property Get aNum
aNum = m_aNum
End Property
Public Property Let aNum(NewValue)
m_aNum = NewValue
End Property
Public Property Get aNumComplementari
aNumComplementari = m_aNumComplementari
End Property
Public Property Let aNumComplementari(NewValue)
m_aNumComplementari = NewValue
End Property
Public Property Get UltEstUscita
UltEstUscita = m_UltEstUscita
End Property
Public Property Let UltEstUscita(NewValue)
m_UltEstUscita = NewValue
End Property
Function GetStringaNum
GetStringaNum = StringaNumeri(m_aNum,,True)
End Function
Function AlimentaCollLunghetta(CollLunghette,CollCombBase,nClasseLung)
Dim abNum,nClasseTmp
Dim n
ReDim aCol(0)
Dim sKey,cItem
Dim bFound,bNonAdatta
Dim aNum
Dim nNumIni,nNumAggiunto
Dim sRadice
nClasseTmp = m_Classe
abNum = ArrayNumeriToBool(m_aNum)
nNumIni = 0
sRadice = StringaNumeri(m_aNum,,True)
Do While nNumIni < 90
nNumIni = nNumIni + 1
Do While nClasseTmp < nClasseLung
bFound = False
Call Messaggio("Analisi radice " & sRadice)
bNonAdatta = True
For n = nNumIni To 90
If abNum(n) = False Then
nNumAggiunto = n
abNum(n) = True
nClasseTmp = nClasseTmp + 1
'ReDim aNum(nClasseTmp)
Call ArrayBNumToArrayNum(abNum,aNum)
Call InitSviluppoIntegrale(aNum,m_Classe)
bNonAdatta = False
Do While GetCombSviluppo(aCol)
sKey = "k" & StringaNumeri(aCol,,True)
If GetItemCollection(CollCombBase,sKey,cItem) Then
If cItem.Index > m_Index Then
bNonAdatta = True
abNum(n) = False
nClasseTmp = nClasseTmp - 1
Exit Do
End If
End If
Loop
If bNonAdatta = False Then Exit For
End If
Next
If bNonAdatta Then Exit Do
Loop
If nClasseTmp = nClasseLung Then
Dim clsL
Set clsL = New clsCombinazione
clsL.aNum = aNum
clsL.Classe = nClasseLung
clsL.UltEstUscita = m_UltEstUscita
sKey = "k" & StringaNumeri(aNum,,True)
On Error Resume Next
Call AddItemColl(CollLunghette,clsL,sKey)
nNumIni = nNumAggiunto
abNum(nNumAggiunto) = False
nClasseTmp = nClasseTmp - 1
Else
nNumIni = 90
End If
Loop
End Function
Function AlimentaNumComplementari(CollCombBase)
Dim aNum,abNum,nClasseTmp
Dim n,nNumAggiunto,bNonAdatta
ReDim aCol(0)
Dim sKey,cItem
Dim nQNumAggiunti,aNumAggiunti
Dim sRadice
nQNumAggiunti = 0
'ReDim m_aNumComplementari (0)
ReDim aNumAggiunti(nQNumAggiunti)
nQNumAggiunti = 0
nClasseTmp = m_Classe
abNum = ArrayNumeriToBool(m_aNum)
For n = 1 To 90
If abNum(n) = False Then
nNumAggiunto = n
abNum(n) = True
Call ArrayBNumToArrayNum(abNum,aNum)
Call InitSviluppoIntegrale(aNum,m_Classe)
bNonAdatta = False
Do While GetCombSviluppo(aCol)
sKey = "k" & StringaNumeri(aCol,,True)
If GetItemCollection(CollCombBase,sKey,cItem) Then
If cItem.Index > m_Index Then
bNonAdatta = True
abNum(n) = False
Exit Do
End If
End If
Loop
If bNonAdatta = False Then
nQNumAggiunti = nQNumAggiunti + 1
ReDim Preserve aNumAggiunti(nQNumAggiunti)
aNumAggiunti(nQNumAggiunti) = nNumAggiunto
If VerificaNumAggiunti(CollCombBase,aNumAggiunti,nQNumAggiunti) = False Then
aNumAggiunti(nQNumAggiunti) = 0
nQNumAggiunti = nQNumAggiunti - 1
End If
End If
abNum(nNumAggiunto) = False
End If
Next
ReDim Preserve aNumAggiunti(nQNumAggiunti)
m_QNumComplementari = nQNumAggiunti
m_aNumComplementari = aNumAggiunti
End Function
Function VerificaNumAggiunti(CollCombBase,aNumAggiunti,nQNumAggiunti)
ReDim aCol(0)
Dim cItem
Dim bNonAdatta,sKey
Dim aColonne,k,y,i
Dim aNumDaSvil
ReDim aNumDaSvil(nQNumAggiunti + m_Classe)
i = 0
For k = 1 To m_Classe
i = i + 1
aNumDaSvil(i) = m_aNum(k)
Next
For k = 1 To nQNumAggiunti
i = i + 1
aNumDaSvil(i) = aNumAggiunti(k)
Next
Call OrdinaMatrice(aNumDaSvil, 1)
aColonne = SviluppoIntegrale(aNumDaSvil,m_Classe)
bNonAdatta = False
For k = 1 To UBound(aColonne)
sKey = "k"
For y = 1 To m_Classe
sKey = sKey & Format2(aColonne(k,y)) & "."
Next
sKey = RimuoviLastChr(sKey,".")
If GetItemCollection(CollCombBase,sKey,cItem) Then
If cItem.Index > m_Index Then
bNonAdatta = True
Exit For
End If
End If
Next
VerificaNumAggiunti = Not bNonAdatta
End Function
Function GetNumeriDaSviluppare
Dim k,i
Dim aNum
ReDim aNum(m_QNumComplementari + m_Classe)
i = 0
For k = 1 To m_Classe
i = i + 1
aNum(i) = m_aNum(k)
Next
For k = 1 To m_QNumComplementari
i = i + 1
aNum(i) = m_aNumComplementari(k)
Next
Call OrdinaMatrice(aNum,1)
GetNumeriDaSviluppare = aNum
End Function
End Class
Sub Main
Dim collCombBase,CollLunghette,nSorte,aRuote,Ini,fin,sMsg,nMoltip
Dim nCicloTeo,nRitMax,nClasseLunghetta,nRuoteSel,nCombBaseTrov,nLunghetteDaTrov
Dim clsComb
Dim i , nTrov , nIndexMax
nTrov =0
nSorte = ScegliEsito
nClasseLunghetta = ScegliClassseLunghetta
nRuoteSel = SelRuote(aRuote)
nLunghetteDaTrov = 3
ReDim Preserve aRuote(nRuoteSel)
nCicloTeo = CicloTeorico(nClasseLunghetta,nSorte,UBound(aRuote))
nMoltip = 30
sMsg = "Inserire il ritardo massimo ipotizzato per la sorte voluta nella lunghetta" & vbCrLf
sMsg = sMsg & "Il valore mostrato è il CicloTeorico per la sorte di " & nSorte
sMsg = sMsg & " su " & nClasseLunghetta & " numeri su " & nRuoteSel & " ruote moltiplicato per " & nMoltip
nRitMax = Int(InputBox(sMsg,,nCicloTeo * nMoltip))
fin = EstrazioneFin
Ini = fin - nRitMax
If Ini <= 0 Then Ini = 1
Call AlimentaCollCombUscite(collCombBase,nSorte,aRuote,Ini,fin)
Call OrdinaItemCollection(collCombBase,"UltEstUscita","Key",,1)
Call ImpostaPosizioni(collCombBase , nIndexMax )
nCombBaseTrov = collCombBase.count
sMsg ="Le combinazioni base di classe " & nSorte
sMsg = sMsg & " (uscite nel periodo analizzato di " & nRitMax & " estrazioni) "
sMsg = sMsg & " sono " & nCombBaseTrov
sMsg = sMsg & " sulle ruote " & StringaRuote(aRuote)
Call Scrivi(sMsg)
Call Scrivi
Set CollLunghette = GetNewCollection
i = 0
Dim nTipoMetodo
nTipoMetodo = 2
For Each clsComb In collCombBase
Select Case nTipoMetodo
Case 1
Call clsComb.AlimentaCollLunghetta(CollLunghette,collCombBase,nClasseLunghetta)
'Call Scrivi(clsComb.GetStringaNum & " -- " & clsComb.UltEstUscita)
If CollLunghette.count >= nLunghetteDaTrov Then Exit For
Case 2
Call Messaggio ("Metodo 2 radice " & clsComb.GetStringaNum & " Pos " & CLSCOMB.Index & "/" & nIndexMax )
Call clsComb.AlimentaNumComplementari(collCombBase)
If clsComb.QNumComplementari + nSorte >= nClasseLunghetta Then
Call Scrivi("I migliori numeri da sviluppare in classe " & nClasseLunghetta & " per " & NomeSorte(nSorte) & " sono i seguenti")
Call Scrivi(StringaNumeri(clsComb.GetNumeriDaSviluppare))
sMsg = "Il ritardo per " & NomeSorte(nSorte) & " dell'intera sequenza "
sMsg = sMsg & "(composta da " & clsComb.QNumComplementari + nSorte & " numeri)"
sMsg = sMsg & " è di " & RitardoCombinazioneTurbo(aRuote,clsComb.GetNumeriDaSviluppare,nSorte,fin)
Call Scrivi(sMsg)
Call Scrivi
nTrov = nTrov +1
If nTrov >= nLunghetteDaTrov Then Exit For
End If
End Select
i = i + 1
Call AvanzamentoElab(1,nCombBaseTrov,i)
If ScriptInterrotto Then Exit For
Next
For Each clsComb In CollLunghette
Call Scrivi(clsComb.GetStringaNum & " -- " & clsComb.UltEstUscita & " - Rit " & RitardoCombinazioneTurbo(aRuote,clsComb.aNum,nSorte,fin))
Next
End Sub
Sub ImpostaPosizioni(coll ,nRetIndexMax )
Dim i,nLastEstUscita,clsComb
i = 0
nLastEstUscita = 0
For Each clsComb In coll
If clscomb.UltEstUscita <> nLastEstUscita Then
i = i + 1
End If
nLastEstUscita = clscomb.UltEstUscita
clsComb.Index = i
Next
nRetIndexMax = i
End Sub
Sub AlimentaCollCombUscite(coll,nSorteCerc,aRuote,Ini,Fin)
Dim idEstr,r,k,nCombSvil,sKey
Dim clsComb
ReDim aColonne(0)
ReDim aNum(0)
ReDim aCol(0)
nCombSvil = Combinazioni(5,nSorteCerc)
Set coll = GetNewCollection
For idEstr = Ini To Fin
For r = 1 To UBound(aRuote)
Call GetArrayNumeriRuota(idEstr,aRuote(r),aNum)
Call OrdinaMatrice(aNum,1)
Call InitSviluppoIntegrale(aNum,nSorteCerc)
Do While GetCombSviluppo(aCol)
sKey = "k" & StringaNumeri(aCol,,True)
Call GetClsComb(coll,sKey,clsComb,aCol,nSorteCerc)
clsComb.UltEstUscita = idEstr
Loop
Next
Call AvanzamentoElab(Ini,Fin,idEstr)
If ScriptInterrotto Then Exit For
Next
End Sub
Function GetClsComb(coll,sKey,clsComb,aCol,nClasse)
On Error Resume Next
Set clsComb = coll(sKey)
If Err <> 0 Then
Err.Clear
Set clsComb = New clsCombinazione
clsComb.Key = sKey
clsComb.aNum = aCol
clsComb.Classe = nClasse
Call coll.Add(clsComb,sKey)
GetClsComb = False
Else
GetClsComb = True
End If
End Function
Function ScegliClassseLunghetta
Dim aVoci(30)
Dim k,i
For k = 2 To(2 - 1) + UBound(aVoci)
i = i + 1
aVoci(i) = k
Next
k = ScegliOpzioneMenu(aVoci,5,"Classe lunghetta")
ScegliClassseLunghetta = Int(aVoci(k))
End Function
Function GetItemCollection(Coll,sKey,cItem)
On Error Resume Next
Set cItem = Coll(sKey)
If Err <> 0 Then
Err.Clear
GetItemCollection = False
Else
GetItemCollection = True
End If
End Function
Function SelRuote(aRuote)
Dim t,k,bTutte
bTutte = False
t = ScegliRuote(aRuote)
For k = 1 To t
If aRuote(k) = TT_ Then
bTutte = True
Exit For
End If
Next
If bTutte Then
ReDim aRuote(10)
For k = 1 To 10
aRuote(k) = k
Next
SelRuote = 10
Else
SelRuote = t
End If
End Function