L
LuigiB
Guest
non mi fare pensare alla pensione ..mancano almeno 25 anni... e chissa se la prenderemo ...
Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature may not be available in some browsers.
Option Explicit
Class clsLunghetta
Private aNumeri ' contiene i numeri della lunghetta
Private mInizio,mFine,aRuote,mSorte ' parametri per il range analisi
Private mClasse ' contine la classe della lunghetta
Private aElencoRit ' conterra l'elenco dei ritardi per la lunghetta
Private aIdEstrElencoRit ' conterra l'elenco dei ritardi per la lunghetta
Private aElencoIncrRitMax ' contiene l'elnco degli incrementi del ritardo max
Private aIdEstrIncrRitMax ' conterra l'elenco degli id estrazione in
' cui si è registrato l'incremento del ritmax conosciuto
Private aRitardiAllIncremento ' contiene il valore del ritardo all'idestrazione in cui
' si è verificato l'incremento
Private mRitardo,mRitardoMax,mIncrRitMax,mFrequenza ' valori statistici
Private mIncrRitardoMaxSto,mStrIncRitSto
Public Property Get sArrayNumeri
sArrayNumeri = StringaNumeri(aNumeri)
End Property
Public Property Get iNumIncrementi
iNumIncrementi = UBound(aElencoIncrRitMax)
End Property
Public Property Get IncrRitMaxSto
IncrRitMaxSto = mIncrRitardoMaxSto
End Property
Public Property Get strIncRitMaxSto
strIncRitMaxSto = mStrIncRitSto
End Property
Public Property Get Ritardo
Ritardo = mRitardo
End Property
Public Property Get RitardoMax
RitardoMax = mRitardoMax
End Property
Public Property Get IncrRitMax
IncrRitMax = mIncrRitMax
End Property
Public Property Get Frequenza
Frequenza = mFrequenza
End Property
Public Property Get LunghettaString
LunghettaString = StringaNumeri(aNumeri)
End Property
' inizializza le proprietà dell'oggetto
Sub Init(sLunghetta,sChrSep,RangeInizio,RangeFine,vetRuote,SorteInGioco)
' acquisisco i parametri per l'analisi
mInizio = RangeInizio
mFine = RangeFine
aRuote = vetRuote
mSorte = SorteInGioco
' alimento il vettore con i numeri della lunghetta
Call AlimentaVettoreLunghetta(sLunghetta,sChrSep)
' calcolo l'elenco dei ritardi
Call ElencoRitardiTurbo(aNumeri,aRuote,mSorte,mInizio,mFine,aElencoRit,aIdEstrElencoRit)
' alimento il vettore che contien l'elenco degli incrementi rit max
Call AlimentaVettoreIncrRitMax
End Sub
' esegue il calcolo dei valori statistici della lunghetta
Sub EseguiStatistica
Call StatisticaFormazioneTurbo(aNumeri,aRuote,mSorte,mRitardo,mRitardoMax,mIncrRitMax,mFrequenza,mInizio,mFine)
End Sub
Private Sub AlimentaVettoreLunghetta(sLunghetta,sChrSep)
Dim k
If IsArray(sLunghetta) Then
' se la lunghetta è gia un array lo copio nel vettore locale dei numeri
ReDim aNumeri(UBound(sLunghetta))
For k = 1 To UBound(sLunghetta)
aNumeri(k) = sLunghetta(k)
Next
Else
' antepongo un carattere separatore per fare in modo che
' aNumeri si valorizzi dall'indice 1 (senno si sarebeb valorizzato dall'indice 0)
Call SplitByChar((sChrSep & sLunghetta),sChrSep,aNumeri)
End If
' valorizzo la classe della lunghetta
mClasse = UBound(aNumeri)
End Sub
Private Sub AlimentaVettoreIncrRitMax
Dim nRitMax,nIncr,nId,k
nId = 0
' inizializzo il vettore a 0 elementi
ReDim aElencoIncrRitMax(0)
ReDim aIdEstrIncrRitMax(0)
ReDim aRitardiAllIncremento(0)
' ciclo sul vettore dei ritardi
For k = 1 To UBound(aElencoRit)
' se il ritardo corrente supera il ritmax attuale..
If aElencoRit(k) > nRitMax Then
If nRitMax > 0 Then
' se il ritmax attuale è >0 (ivvero ne esiste uno)
' calcolo di quanto si è incrementato
nIncr = aElencoRit(k) - nRitMax
' incremento il contatore dei valori trovati
nId = nId + 1
' ridimensiono il vettore mantenendo i valori precedenti ma
' aggiungendone uno
ReDim Preserve aElencoIncrRitMax(nId)
' memorizzo il valore
aElencoIncrRitMax(nId) = nIncr
' ridimensiono il vettore mantnendo i valori precedenti ma
' aggiungendone uno
ReDim Preserve aIdEstrIncrRitMax(nId)
' memorizzo l'id dell'estrazione dove si è avuto l'incremento
aIdEstrIncrRitMax(nId) = aIdEstrElencoRit(k)
' ridimensiono il vettore mantnendo i valori precedenti ma
' aggiungendone uno
ReDim Preserve aRitardiAllIncremento(nId)
' memorizzo il valore del ritardo all'id dell'estrazione dove si è avuto l'incremento
aRitardiAllIncremento(nId) = aElencoRit(k)
End If
nRitMax = aElencoRit(k)
End If
Next
mStrIncRitSto = StringaNumeri(aElencoIncrRitMax,,True)
End Sub
Function IsCondizioneRispettata(nIdFiltro,nQIncr)
' verifica che l'incremento dell'ultimo ritmax sia uguale al massimo incr rit max conosciuto.
Dim nUpper
nUpper = UBound(aElencoIncrRitMax)
mIncrRitardoMaxSto = MassimoV(aElencoIncrRitMax,1,nUpper - 1)
If aElencoRit(UBound(aElencoRit)) > 0 And aIdEstrIncrRitMax(nUpper) = mFine And nUpper >= nQIncr Then
Select Case nIdFiltro
Case 0
IsCondizioneRispettata =(aElencoIncrRitMax(nUpper) = mIncrRitardoMaxSto)
Case 1
IsCondizioneRispettata =(aElencoIncrRitMax(nUpper) >= mIncrRitardoMaxSto)
Case 2
IsCondizioneRispettata =(aElencoIncrRitMax(nUpper) <= mIncrRitardoMaxSto)
End Select
Else
IsCondizioneRispettata = False
End If
End Function
Sub DisegnaGraficoIncrRitMax
Dim x,y,k
Dim nValoreMaxX,nValoreMaxY,nValoreMinX
Dim nStepX,nStepY
Dim nUpperVetIncrRit
nValoreMinX = MinimoV(aIdEstrIncrRitMax,1)
nValoreMaxX = aIdEstrIncrRitMax(UBound(aIdEstrIncrRitMax))
nValoreMaxY = MassimoV(aElencoRit,1)
nStepX =(nValoreMaxX -(mInizio - 1)) \10
nStepY = nValoreMaxY \10
Call PreparaGrafico("Formaziione " & StringaNumeri(aNumeri),nValoreMinX,nValoreMaxX,0,nValoreMaxY,nStepX,nStepY)
nUpperVetIncrRit = UBound(aElencoIncrRitMax)
' linea dell'incremento rit max
ReDim aV(nUpperVetIncrRit - 1,2)
For k = 1 To nUpperVetIncrRit
x = aIdEstrIncrRitMax(k)
y = aElencoIncrRitMax(k)
aV(k - 1,1) = x
aV(k - 1,2) = y
Next
Call DisegnaLineaGrafico(aV,vbRed,"IncrRitMax")
' linea dell' rit max
ReDim aV(nUpperVetIncrRit - 1,2)
For k = 1 To nUpperVetIncrRit
x = aIdEstrIncrRitMax(k)
y = aRitardiAllIncremento(k)
aV(k - 1,1) = x
aV(k - 1,2) = y
Next
Call DisegnaLineaGrafico(aV,vbBlue,"RitMax")
' scrive grafico nell'output
Call InserisciGrafico
End Sub
End Class
Sub Main
Dim sDir,Inizio,Fine,sFile,sFileCompleto,aRuote,Sorte
Dim bOk,idFiltro,qIncr
sDir = GetDirectoryAppData & "ArchiviVirtuali\"
sFile = ScegliFileArchivioVirt(sDir)
If sFile <> "" Then
sFileCompleto = sDir & sFile & ".dat"
bOk = ApriFileBaseDati(sFileCompleto)
Else
bOk = True ' archivio normale
End If
If bOk Then
If ScegliRange(Inizio,Fine) Then
Sorte = ScegliEsito
Call ScegliRuote(aRuote,Nothing)
' decido il filtro in base al valore degli incrementi
idFiltro = GetIdFiltro
' decido di filtrare in base al numero degli incrementi
qIncr = GetQuantiIncrementi
If(Fine > Inizio) And UBound(aRuote) > 0 And Sorte > 0 And idFiltro > - 1 Then
Call Scrivi("Archivio : " & Iif(sFile <> "",sFile,"Archivio lotto"))
Select Case ScegliTipoSviluppo
Case 1
Call AnalisiLunghetteFromFileTxt(Inizio,Fine,aRuote,Sorte,idFiltro,qIncr)
Case 2
Call AnalisiLunghetteFromNumeriCasuali(Inizio,Fine,aRuote,Sorte,idFiltro,qIncr)
Case 3
Call AnalisiLunghetteFromSceglinumeri(Inizio,Fine,aRuote,Sorte,idFiltro,qIncr)
End Select
End If
End If
End If
End Sub
Function ScegliFileArchivioVirt(sDir)
Dim i
ReDim aFile(0)
Call ElencoFileInDirectory(sDir,aFile,".dat")
aFile(0) = "Archivio reale"
i = ScegliOpzioneMenu(aFile,0,"Scegli archivio virtuale")
If i > 0 Then
ScegliFileArchivioVirt = aFile(i)
Else
ScegliFileArchivioVirt = ""
End If
End Function
Function ScegliTipoSviluppo
ReDim aVoci(3)
aVoci(1) = "Da file txt con lunghette"
aVoci(2) = "Da sviluppo casuale"
aVoci(3) = "Da sviluppo tabellare"
ScegliTipoSviluppo = ScegliOpzioneMenu(aVoci,1)
End Function
Function GetChrSepFromRiga(sRiga)
Dim k,schr
schr = ""
For k = 1 To Len(sRiga)
schr = Mid(sRiga,k,1)
If IsNumeric(schr) = False Then
Exit For
End If
Next
GetChrSepFromRiga = schr
End Function
Function GetIdFiltro
Dim aFiltro
aFiltro = Array("IncrRitMaxSto=UltimoIncrRitMax","IncrRitMaxSto<=UltimoIncrRitMax","IncrRitMaxSto>=UltimoIncrRitMax")
GetIdFiltro = ScegliOpzioneMenu(aFiltro,0,"Select Filtro Condizione")
End Function
Function GetQuantiIncrementi
GetQuantiIncrementi = CInt(InputBox("qIncr>=(NumeroIncrementiRitMaxFormazione)","Filtro Quantitaà Incrementi",5))
End Function
Sub AnalisiLunghetteFromFileTxt(Inizio,Fine,aRuote,Sorte,idFiltro,qIncr)
Dim sFile,aLunghette,nTotLunghette
Dim k,sChrSep
Dim clsL,collLunghette
Set collLunghette = GetNewCollection
sFile = ScegliFile(GetDirectoryAppData,".txt")
If FileEsistente(sFile) Then
Call LeggiRigheFileDiTesto(sFile,aLunghette)
nTotLunghette = UBound(aLunghette)
If nTotLunghette > 0 Then
sChrSep = GetChrSepFromRiga(aLunghette(1))
For k = 0 To nTotLunghette
Set clsL = New clsLunghetta
Call clsL.Init(aLunghette(k),sChrSep,Inizio,Fine,aRuote,Sorte)
If clsL.IsCondizioneRispettata(idFiltro,qIncr) Then
Call clsL.EseguiStatistica
collLunghette.Add clsL
End If
If k Mod 50 = 0 Then
Call Messaggio("Righe esaminate : " & k)
Call AvanzamentoElab(1,nTotLunghette,k)
If ScriptInterrotto Then Exit For
End If
Next
Scrivi "Range analisi : " & GetInfoEstrazione(Inizio) & " - " & GetInfoEstrazione(Fine)
Scrivi "Lunghette esaminate : " & nTotLunghette & " Valide : " & collLunghette.count
Scrivi "Sorte : " & NomeSorte(Sorte)
Scrivi "Ruote : " & StringaRuote(aRuote)
Scrivi "Numero Minimo IncrRit : " & Format2(qIncr)
Scrivi
Scrivi "Lunghette ordinate per incremento ritardo max",True,,vbYellow
Call Scrivi
If collLunghette.count > 0 Then
Call OrdinaItemCollection(collLunghette,"IncrRitMax",,,- 1)
For Each clsL In collLunghette
Call Scrivi("Numeri Formazione : " & clsL.sArrayNumeri)
Call Scrivi("Ritardo : " & clsL.Ritardo)
Call Scrivi("RitMax : " & clsL.RitardoMax)
Call Scrivi("Freq : " & clsL.Frequenza)
Call Scrivi("IncrRitMx : " & clsL.IncrRitMax)
Call Scrivi("IncrRitMaxSto : " & clsL.IncrRitMaxSto)
Call Scrivi("strIncrementi : " & clsL.strIncRitMaxSto)
Call Scrivi("Numero Incrementi : " & clsL.iNumIncrementi)
Call clsL.DisegnaGraficoIncrRitMax
Next
Else
Scrivi "Nessuna lunghetta rispetta le condizioni"
Scrivi "Lunghette esaminate " & nTotLunghette + 1
End If
End If
End If
End Sub
Sub AnalisiLunghetteFromNumeriCasuali(Inizio,Fine,aRuote,Sorte,idFiltro,qIncr)
Dim sFile,aLunghette,nTotLunghette,nClasse
Dim nTrov,nProdotte
Dim clsL,collLunghette
ReDim aSelNum(0)
Set collLunghette = GetNewCollection
nTotLunghette = Int(InputBox("Quante lunghette devono essere trovate ?",,10))
ScegliNumeri(aSelNum)
nClasse = Int(InputBox("Quanti numeri nella lunghetta",,Sorte))
If nTotLunghette > 0 And nClasse >= Sorte And nClasse <= 10 Then
nTrov = 0
nProdotte = 0
Do While nTrov < nTotLunghette
Set clsL = New clsLunghetta
ReDim aNum(nClasse)
Call GetColonnaCasuale(nClasse,aNum,aSelNum)
nProdotte = nProdotte + 1
Call clsL.Init(aNum,"",Inizio,Fine,aRuote,Sorte)
If clsL.IsCondizioneRispettata(idFiltro,qIncr) Then
Call clsL.EseguiStatistica
collLunghette.Add clsL
nTrov = nTrov + 1
End If
If nProdotte Mod 50 = 0 Then
Call Messaggio("combinazioni esaminate " & nProdotte & " valide " & nTrov)
Call DoEventsEx
If ScriptInterrotto Then Exit Do
End If
Loop
Scrivi "Range analisi : " & GetInfoEstrazione(Inizio) & " - " & GetInfoEstrazione(Fine)
Scrivi "Lunghette esaminate : " & nTotLunghette & " Valide : " & collLunghette.count
Scrivi "Sorte : " & NomeSorte(Sorte)
Scrivi "Ruote : " & StringaRuote(aRuote)
Scrivi "Numero Minimo IncrRit : " & Format2(qIncr)
Scrivi
Scrivi "Lunghette ordinate per incremento ritardo max",True,,vbYellow
Call Scrivi
If collLunghette.count > 0 Then
Call OrdinaItemCollection(collLunghette,"IncrRitMax",,,- 1)
For Each clsL In collLunghette
Call Scrivi("Numeri Formazione : " & clsL.sArrayNumeri)
Call Scrivi("Ritardo : " & clsL.Ritardo)
Call Scrivi("RitMax : " & clsL.RitardoMax)
Call Scrivi("Freq : " & clsL.Frequenza)
Call Scrivi("IncrRitMx : " & clsL.IncrRitMax)
Call Scrivi("IncrRitMaxSto : " & clsL.IncrRitMaxSto)
Call Scrivi("strIncrementi : " & clsL.strIncRitMaxSto)
Call Scrivi("Numero Incrementi : " & clsL.iNumIncrementi)
Call clsL.DisegnaGraficoIncrRitMax
Next
Else
Scrivi "Nessuna lunghetta rispetta le condizioni"
Scrivi "Lunghette esaminate " & nTotLunghette
End If
End If
End Sub
Sub AnalisiLunghetteFromSceglinumeri(Inizio,Fine,aRuote,Sorte,idFiltro,qIncr)
Dim nTotLunghette
Dim k,sChrSep,nClasse
ReDim aLunghette(0)
Dim clsL,collLunghette
Set collLunghette = GetNewCollection
sChrSep = " "
ScegliNumeri(aLunghette)
nClasse = CInt(InputBox(" classe sviluppo ",,2))
nTotLunghette = InitSviluppoIntegrale(aLunghette,nClasse)
k = 0
Do While GetCombSviluppo(aLunghette)
k = k + 1
Set clsL = New clsLunghetta
Call clsL.Init(aLunghette,sChrSep,Inizio,Fine,aRuote,Sorte)
If clsL.IsCondizioneRispettata(idFiltro,qIncr) Then
Call clsL.EseguiStatistica
collLunghette.Add clsL
End If
If k Mod 50 = 0 Then
Call Messaggio("Righe esaminate " & k & " valide " & collLunghette. count)
DoEventsEx
Call AvanzamentoElab(1,nTotLunghette,k)
If ScriptInterrotto Then Exit Do
End If
Loop
Scrivi "Range analisi : " & GetInfoEstrazione(Inizio) & " - " & GetInfoEstrazione(Fine)
Scrivi "Lunghette esaminate : " & nTotLunghette & " Valide : " & collLunghette.count
Scrivi "Sorte : " & NomeSorte(Sorte)
Scrivi "Ruote : " & StringaRuote(aRuote)
Scrivi "Numero Minimo IncrRit : " & Format2(qIncr)
Scrivi
Scrivi "Lunghette ordinate per incremento ritardo max",True,,vbYellow
Call Scrivi
If collLunghette.count > 0 Then
Call OrdinaItemCollection(collLunghette,"IncrRitMax",,,- 1)
For Each clsL In collLunghette
Call Scrivi("Numeri Formazione : " & clsL.sArrayNumeri)
Call Scrivi("Ritardo : " & clsL.Ritardo)
Call Scrivi("RitMax : " & clsL.RitardoMax)
Call Scrivi("Freq : " & clsL.Frequenza)
Call Scrivi("IncrRitMx : " & clsL.IncrRitMax)
Call Scrivi("IncrRitMaxSto : " & clsL.IncrRitMaxSto)
Call Scrivi("strIncrementi : " & clsL.strIncRitMaxSto)
Call Scrivi("Numero Incrementi : " & clsL.iNumIncrementi)
Call clsL.DisegnaGraficoIncrRitMax
Next
Else
Scrivi "Nessuna lunghetta rispetta le condizioni"
Scrivi "Lunghette esaminate " & nTotLunghette
End If
End Sub
i legend;n1941483 ha scritto:Ciao a tutti
Ecco il Codice
Non ho file txt quindi non so se funzionano correttamente
Archivi virtuali(magari 10-15 minuti) sembra funzionare ma per i dati mi farebbe piacere avere conferma da Silop
per tutto il resto credo che tom mi possa dire se è tutto implementato
Per Luigi ora ti occa tornare afare il prof
Pensa a scriverlo con il cellulareCodice:Option Explicit Class clsLunghetta Private aNumeri ' contiene i numeri della lunghetta Private mInizio,mFine,aRuote,mSorte ' parametri per il range analisi Private mClasse ' contine la classe della lunghetta Private aElencoRit ' conterra l'elenco dei ritardi per la lunghetta Private aIdEstrElencoRit ' conterra l'elenco dei ritardi per la lunghetta Private aElencoIncrRitMax ' contiene l'elnco degli incrementi del ritardo max Private aIdEstrIncrRitMax ' conterra l'elenco degli id estrazione in ' cui si è registrato l'incremento del ritmax conosciuto Private aRitardiAllIncremento ' contiene il valore del ritardo all'idestrazione in cui ' si è verificato l'incremento Private mRitardo,mRitardoMax,mIncrRitMax,mFrequenza ' valori statistici Private mIncrRitardoMaxSto,mStrIncRitSto Public Property Get sArrayNumeri sArrayNumeri = StringaNumeri(aNumeri) End Property Public Property Get iNumIncrementi iNumIncrementi = UBound(aElencoIncrRitMax) End Property Public Property Get IncrRitMaxSto IncrRitMaxSto = mIncrRitardoMaxSto End Property Public Property Get strIncRitMaxSto strIncRitMaxSto = mStrIncRitSto End Property Public Property Get Ritardo Ritardo = mRitardo End Property Public Property Get RitardoMax RitardoMax = mRitardoMax End Property Public Property Get IncrRitMax IncrRitMax = mIncrRitMax End Property Public Property Get Frequenza Frequenza = mFrequenza End Property Public Property Get LunghettaString LunghettaString = StringaNumeri(aNumeri) End Property ' inizializza le proprietà dell'oggetto Sub Init(sLunghetta,sChrSep,RangeInizio,RangeFine,vetRuote,SorteInGioco) ' acquisisco i parametri per l'analisi mInizio = RangeInizio mFine = RangeFine aRuote = vetRuote mSorte = SorteInGioco ' alimento il vettore con i numeri della lunghetta Call AlimentaVettoreLunghetta(sLunghetta,sChrSep) ' calcolo l'elenco dei ritardi Call ElencoRitardiTurbo(aNumeri,aRuote,mSorte,mInizio,mFine,aElencoRit,aIdEstrElencoRit) ' alimento il vettore che contien l'elenco degli incrementi rit max Call AlimentaVettoreIncrRitMax End Sub ' esegue il calcolo dei valori statistici della lunghetta Sub EseguiStatistica Call StatisticaFormazioneTurbo(aNumeri,aRuote,mSorte,mRitardo,mRitardoMax,mIncrRitMax,mFrequenza,mInizio,mFine) End Sub Private Sub AlimentaVettoreLunghetta(sLunghetta,sChrSep) Dim k If IsArray(sLunghetta) Then ' se la lunghetta è gia un array lo copio nel vettore locale dei numeri ReDim aNumeri(UBound(sLunghetta)) For k = 1 To UBound(sLunghetta) aNumeri(k) = sLunghetta(k) Next Else ' antepongo un carattere separatore per fare in modo che ' aNumeri si valorizzi dall'indice 1 (senno si sarebeb valorizzato dall'indice 0) Call SplitByChar((sChrSep & sLunghetta),sChrSep,aNumeri) End If ' valorizzo la classe della lunghetta mClasse = UBound(aNumeri) End Sub Private Sub AlimentaVettoreIncrRitMax Dim nRitMax,nIncr,nId,k nId = 0 ' inizializzo il vettore a 0 elementi ReDim aElencoIncrRitMax(0) ReDim aIdEstrIncrRitMax(0) ReDim aRitardiAllIncremento(0) ' ciclo sul vettore dei ritardi For k = 1 To UBound(aElencoRit) ' se il ritardo corrente supera il ritmax attuale.. If aElencoRit(k) > nRitMax Then If nRitMax > 0 Then ' se il ritmax attuale è >0 (ivvero ne esiste uno) ' calcolo di quanto si è incrementato nIncr = aElencoRit(k) - nRitMax ' incremento il contatore dei valori trovati nId = nId + 1 ' ridimensiono il vettore mantenendo i valori precedenti ma ' aggiungendone uno ReDim Preserve aElencoIncrRitMax(nId) ' memorizzo il valore aElencoIncrRitMax(nId) = nIncr ' ridimensiono il vettore mantnendo i valori precedenti ma ' aggiungendone uno ReDim Preserve aIdEstrIncrRitMax(nId) ' memorizzo l'id dell'estrazione dove si è avuto l'incremento aIdEstrIncrRitMax(nId) = aIdEstrElencoRit(k) ' ridimensiono il vettore mantnendo i valori precedenti ma ' aggiungendone uno ReDim Preserve aRitardiAllIncremento(nId) ' memorizzo il valore del ritardo all'id dell'estrazione dove si è avuto l'incremento aRitardiAllIncremento(nId) = aElencoRit(k) End If nRitMax = aElencoRit(k) End If Next mStrIncRitSto = StringaNumeri(aElencoIncrRitMax,,True) End Sub Function IsCondizioneRispettata(nIdFiltro,nQIncr) ' verifica che l'incremento dell'ultimo ritmax sia uguale al massimo incr rit max conosciuto. Dim nUpper nUpper = UBound(aElencoIncrRitMax) mIncrRitardoMaxSto = MassimoV(aElencoIncrRitMax,1,nUpper - 1) If aElencoRit(UBound(aElencoRit)) > 0 And aIdEstrIncrRitMax(nUpper) = mFine And nUpper >= nQIncr Then Select Case nIdFiltro Case 0 IsCondizioneRispettata =(aElencoIncrRitMax(nUpper) = mIncrRitardoMaxSto) Case 1 IsCondizioneRispettata =(aElencoIncrRitMax(nUpper) >= mIncrRitardoMaxSto) Case 2 IsCondizioneRispettata =(aElencoIncrRitMax(nUpper) <= mIncrRitardoMaxSto) End Select Else IsCondizioneRispettata = False End If End Function Sub DisegnaGraficoIncrRitMax Dim x,y,k Dim nValoreMaxX,nValoreMaxY,nValoreMinX Dim nStepX,nStepY Dim nUpperVetIncrRit nValoreMinX = MinimoV(aIdEstrIncrRitMax,1) nValoreMaxX = aIdEstrIncrRitMax(UBound(aIdEstrIncrRitMax)) nValoreMaxY = MassimoV(aElencoRit,1) nStepX =(nValoreMaxX -(mInizio - 1)) \10 nStepY = nValoreMaxY \10 Call PreparaGrafico("Formaziione " & StringaNumeri(aNumeri),nValoreMinX,nValoreMaxX,0,nValoreMaxY,nStepX,nStepY) nUpperVetIncrRit = UBound(aElencoIncrRitMax) ' linea dell'incremento rit max ReDim aV(nUpperVetIncrRit - 1,2) For k = 1 To nUpperVetIncrRit x = aIdEstrIncrRitMax(k) y = aElencoIncrRitMax(k) aV(k - 1,1) = x aV(k - 1,2) = y Next Call DisegnaLineaGrafico(aV,vbRed,"IncrRitMax") ' linea dell' rit max ReDim aV(nUpperVetIncrRit - 1,2) For k = 1 To nUpperVetIncrRit x = aIdEstrIncrRitMax(k) y = aRitardiAllIncremento(k) aV(k - 1,1) = x aV(k - 1,2) = y Next Call DisegnaLineaGrafico(aV,vbBlue,"RitMax") ' scrive grafico nell'output Call InserisciGrafico End Sub End Class Sub Main Dim sDir,Inizio,Fine,sFile,sFileCompleto,aRuote,Sorte Dim bOk,idFiltro,qIncr sDir = GetDirectoryAppData & "ArchiviVirtuali\" sFile = ScegliFileArchivioVirt(sDir) If sFile <> "" Then sFileCompleto = sDir & sFile & ".dat" bOk = ApriFileBaseDati(sFileCompleto) Else bOk = True ' archivio normale End If If bOk Then If ScegliRange(Inizio,Fine) Then Sorte = ScegliEsito Call ScegliRuote(aRuote,Nothing) ' decido il filtro in base al valore degli incrementi idFiltro = GetIdFiltro ' decido di filtrare in base al numero degli incrementi qIncr = GetQuantiIncrementi If(Fine > Inizio) And UBound(aRuote) > 0 And Sorte > 0 And idFiltro > - 1 Then Call Scrivi("Archivio : " & Iif(sFile <> "",sFile,"Archivio lotto")) Select Case ScegliTipoSviluppo Case 1 Call AnalisiLunghetteFromFileTxt(Inizio,Fine,aRuote,Sorte,idFiltro,qIncr) Case 2 Call AnalisiLunghetteFromNumeriCasuali(Inizio,Fine,aRuote,Sorte,idFiltro,qIncr) Case 3 Call AnalisiLunghetteFromSceglinumeri(Inizio,Fine,aRuote,Sorte,idFiltro,qIncr) End Select End If End If End If End Sub Function ScegliFileArchivioVirt(sDir) Dim i ReDim aFile(0) Call ElencoFileInDirectory(sDir,aFile,".dat") aFile(0) = "Archivio reale" i = ScegliOpzioneMenu(aFile,0,"Scegli archivio virtuale") If i > 0 Then ScegliFileArchivioVirt = aFile(i) Else ScegliFileArchivioVirt = "" End If End Function Function ScegliTipoSviluppo ReDim aVoci(3) aVoci(1) = "Da file txt con lunghette" aVoci(2) = "Da sviluppo casuale" aVoci(3) = "Da sviluppo tabellare" ScegliTipoSviluppo = ScegliOpzioneMenu(aVoci,1) End Function Function GetChrSepFromRiga(sRiga) Dim k,schr schr = "" For k = 1 To Len(sRiga) schr = Mid(sRiga,k,1) If IsNumeric(schr) = False Then Exit For End If Next GetChrSepFromRiga = schr End Function Function GetIdFiltro Dim aFiltro aFiltro = Array("IncrRitMaxSto=UltimoIncrRitMax","IncrRitMaxSto<=UltimoIncrRitMax","IncrRitMaxSto>=UltimoIncrRitMax") GetIdFiltro = ScegliOpzioneMenu(aFiltro,0,"Select Filtro Condizione") End Function Function GetQuantiIncrementi GetQuantiIncrementi = CInt(InputBox("qIncr>=(NumeroIncrementiRitMaxFormazione)","Filtro Quantitaà Incrementi",5)) End Function Sub AnalisiLunghetteFromFileTxt(Inizio,Fine,aRuote,Sorte,idFiltro,qIncr) Dim sFile,aLunghette,nTotLunghette Dim k,sChrSep Dim clsL,collLunghette Set collLunghette = GetNewCollection sFile = ScegliFile(GetDirectoryAppData,".txt") If FileEsistente(sFile) Then Call LeggiRigheFileDiTesto(sFile,aLunghette) nTotLunghette = UBound(aLunghette) If nTotLunghette > 0 Then sChrSep = GetChrSepFromRiga(aLunghette(1)) For k = 0 To nTotLunghette Set clsL = New clsLunghetta Call clsL.Init(aLunghette(k),sChrSep,Inizio,Fine,aRuote,Sorte) If clsL.IsCondizioneRispettata(idFiltro,qIncr) Then Call clsL.EseguiStatistica collLunghette.Add clsL End If If k Mod 50 = 0 Then Call Messaggio("Righe esaminate : " & k) Call AvanzamentoElab(1,nTotLunghette,k) If ScriptInterrotto Then Exit For End If Next Scrivi "Range analisi : " & GetInfoEstrazione(Inizio) & " - " & GetInfoEstrazione(Fine) Scrivi "Lunghette esaminate : " & nTotLunghette & " Valide : " & collLunghette.count Scrivi "Sorte : " & NomeSorte(Sorte) Scrivi "Ruote : " & StringaRuote(aRuote) Scrivi "Numero Minimo IncrRit : " & Format2(qIncr) Scrivi Scrivi "Lunghette ordinate per incremento ritardo max",True,,vbYellow Call Scrivi If collLunghette.count > 0 Then Call OrdinaItemCollection(collLunghette,"IncrRitMax",,,- 1) For Each clsL In collLunghette Call Scrivi("Numeri Formazione : " & clsL.sArrayNumeri) Call Scrivi("Ritardo : " & clsL.Ritardo) Call Scrivi("RitMax : " & clsL.RitardoMax) Call Scrivi("Freq : " & clsL.Frequenza) Call Scrivi("IncrRitMx : " & clsL.IncrRitMax) Call Scrivi("IncrRitMaxSto : " & clsL.IncrRitMaxSto) Call Scrivi("strIncrementi : " & clsL.strIncRitMaxSto) Call Scrivi("Numero Incrementi : " & clsL.iNumIncrementi) Call clsL.DisegnaGraficoIncrRitMax Next Else Scrivi "Nessuna lunghetta rispetta le condizioni" Scrivi "Lunghette esaminate " & nTotLunghette + 1 End If End If End If End Sub Sub AnalisiLunghetteFromNumeriCasuali(Inizio,Fine,aRuote,Sorte,idFiltro,qIncr) Dim sFile,aLunghette,nTotLunghette,nClasse Dim nTrov,nProdotte Dim clsL,collLunghette ReDim aSelNum(0) Set collLunghette = GetNewCollection nTotLunghette = Int(InputBox("Quante lunghette devono essere trovate ?",,10)) ScegliNumeri(aSelNum) nClasse = Int(InputBox("Quanti numeri nella lunghetta",,Sorte)) If nTotLunghette > 0 And nClasse >= Sorte And nClasse <= 10 Then nTrov = 0 nProdotte = 0 Do While nTrov < nTotLunghette Set clsL = New clsLunghetta ReDim aNum(nClasse) Call GetColonnaCasuale(nClasse,aNum,aSelNum) nProdotte = nProdotte + 1 Call clsL.Init(aNum,"",Inizio,Fine,aRuote,Sorte) If clsL.IsCondizioneRispettata(idFiltro,qIncr) Then Call clsL.EseguiStatistica collLunghette.Add clsL nTrov = nTrov + 1 End If If nProdotte Mod 50 = 0 Then Call Messaggio("combinazioni esaminate " & nProdotte & " valide " & nTrov) Call DoEventsEx If ScriptInterrotto Then Exit Do End If Loop Scrivi "Range analisi : " & GetInfoEstrazione(Inizio) & " - " & GetInfoEstrazione(Fine) Scrivi "Lunghette esaminate : " & nTotLunghette & " Valide : " & collLunghette.count Scrivi "Sorte : " & NomeSorte(Sorte) Scrivi "Ruote : " & StringaRuote(aRuote) Scrivi "Numero Minimo IncrRit : " & Format2(qIncr) Scrivi Scrivi "Lunghette ordinate per incremento ritardo max",True,,vbYellow Call Scrivi If collLunghette.count > 0 Then Call OrdinaItemCollection(collLunghette,"IncrRitMax",,,- 1) For Each clsL In collLunghette Call Scrivi("Numeri Formazione : " & clsL.sArrayNumeri) Call Scrivi("Ritardo : " & clsL.Ritardo) Call Scrivi("RitMax : " & clsL.RitardoMax) Call Scrivi("Freq : " & clsL.Frequenza) Call Scrivi("IncrRitMx : " & clsL.IncrRitMax) Call Scrivi("IncrRitMaxSto : " & clsL.IncrRitMaxSto) Call Scrivi("strIncrementi : " & clsL.strIncRitMaxSto) Call Scrivi("Numero Incrementi : " & clsL.iNumIncrementi) Call clsL.DisegnaGraficoIncrRitMax Next Else Scrivi "Nessuna lunghetta rispetta le condizioni" Scrivi "Lunghette esaminate " & nTotLunghette End If End If End Sub Sub AnalisiLunghetteFromSceglinumeri(Inizio,Fine,aRuote,Sorte,idFiltro,qIncr) Dim nTotLunghette Dim k,sChrSep,nClasse ReDim aLunghette(0) Dim clsL,collLunghette Set collLunghette = GetNewCollection sChrSep = " " ScegliNumeri(aLunghette) nClasse = CInt(InputBox(" classe sviluppo ",,2)) nTotLunghette = InitSviluppoIntegrale(aLunghette,nClasse) k = 0 Do While GetCombSviluppo(aLunghette) k = k + 1 Set clsL = New clsLunghetta Call clsL.Init(aLunghette,sChrSep,Inizio,Fine,aRuote,Sorte) If clsL.IsCondizioneRispettata(idFiltro,qIncr) Then Call clsL.EseguiStatistica collLunghette.Add clsL End If If k Mod 50 = 0 Then Call Messaggio("Righe esaminate " & k & " valide " & collLunghette. count) DoEventsEx Call AvanzamentoElab(1,nTotLunghette,k) If ScriptInterrotto Then Exit Do End If Loop Scrivi "Range analisi : " & GetInfoEstrazione(Inizio) & " - " & GetInfoEstrazione(Fine) Scrivi "Lunghette esaminate : " & nTotLunghette & " Valide : " & collLunghette.count Scrivi "Sorte : " & NomeSorte(Sorte) Scrivi "Ruote : " & StringaRuote(aRuote) Scrivi "Numero Minimo IncrRit : " & Format2(qIncr) Scrivi Scrivi "Lunghette ordinate per incremento ritardo max",True,,vbYellow Call Scrivi If collLunghette.count > 0 Then Call OrdinaItemCollection(collLunghette,"IncrRitMax",,,- 1) For Each clsL In collLunghette Call Scrivi("Numeri Formazione : " & clsL.sArrayNumeri) Call Scrivi("Ritardo : " & clsL.Ritardo) Call Scrivi("RitMax : " & clsL.RitardoMax) Call Scrivi("Freq : " & clsL.Frequenza) Call Scrivi("IncrRitMx : " & clsL.IncrRitMax) Call Scrivi("IncrRitMaxSto : " & clsL.IncrRitMaxSto) Call Scrivi("strIncrementi : " & clsL.strIncRitMaxSto) Call Scrivi("Numero Incrementi : " & clsL.iNumIncrementi) Call clsL.DisegnaGraficoIncrRitMax Next Else Scrivi "Nessuna lunghetta rispetta le condizioni" Scrivi "Lunghette esaminate " & nTotLunghette End If End Sub
collLunghette.Add clsL , sKey
collLunghette.Add clsL , "k" & clsL.LunghettaString
on error resume next
collLunghette.add clsLunghetta , sKey
call AddLunghetta (collLunghette , clsL)
Option Explicit
Class clsLunghetta
Private aNumeri ' contiene i numeri della lunghetta
Private mInizio,mFine,aRuote,mSorte ' parametri per il range analisi
Private mClasse ' contine la classe della lunghetta
Private aElencoRit ' conterra l'elenco dei ritardi per la lunghetta
Private aIdEstrElencoRit ' conterra l'elenco dei ritardi per la lunghetta
Private aElencoIncrRitMax ' contiene l'elnco degli incrementi del ritardo max
Private aIdEstrIncrRitMax ' conterra l'elenco degli id estrazione in
' cui si è registrato l'incremento del ritmax conosciuto
Private aRitardiAllIncremento ' contiene il valore del ritardo all'idestrazione in cui
' si è verificato l'incremento
Private mRitardo,mRitardoMax,mIncrRitMax,mFrequenza ' valori statistici
Private mIncrRitardoMaxSto,mStrIncRitSto
Public Property Get iNumIncrementi
iNumIncrementi = UBound(aElencoIncrRitMax)
End Property
Public Property Get IncrRitMaxSto
IncrRitMaxSto = mIncrRitardoMaxSto
End Property
Public Property Get strIncRitMaxSto
strIncRitMaxSto = mStrIncRitSto
End Property
Public Property Get Ritardo
Ritardo = mRitardo
End Property
Public Property Get RitardoMax
RitardoMax = mRitardoMax
End Property
Public Property Get IncrRitMax
IncrRitMax = mIncrRitMax
End Property
Public Property Get Frequenza
Frequenza = mFrequenza
End Property
Public Property Get LunghettaString
LunghettaString = StringaNumeri(aNumeri)
End Property
' inizializza le proprietà dell'oggetto
Sub Init(sLunghetta,sChrSep,RangeInizio,RangeFine,vetRuote,SorteInGioco)
' acquisisco i parametri per l'analisi
mInizio = RangeInizio
mFine = RangeFine
aRuote = vetRuote
mSorte = SorteInGioco
' alimento il vettore con i numeri della lunghetta
Call AlimentaVettoreLunghetta(sLunghetta,sChrSep)
' calcolo l'elenco dei ritardi
Call ElencoRitardiTurbo(aNumeri,aRuote,mSorte,mInizio,mFine,aElencoRit,aIdEstrElencoRit)
' alimento il vettore che contien l'elenco degli incrementi rit max
Call AlimentaVettoreIncrRitMax
End Sub
' esegue il calcolo dei valori statistici della lunghetta
Sub EseguiStatistica
Call StatisticaFormazioneTurbo(aNumeri,aRuote,mSorte,mRitardo,mRitardoMax,mIncrRitMax,mFrequenza,mInizio,mFine)
End Sub
Private Sub AlimentaVettoreLunghetta(sLunghetta,sChrSep)
Dim k
If IsArray(sLunghetta) Then
' se la lunghetta è gia un array lo copio nel vettore locale dei numeri
ReDim aNumeri(UBound(sLunghetta))
For k = 1 To UBound(sLunghetta)
aNumeri(k) = sLunghetta(k)
Next
Else
' antepongo un carattere separatore per fare in modo che
' aNumeri si valorizzi dall'indice 1 (senno si sarebeb valorizzato dall'indice 0)
Call SplitByChar((sChrSep & sLunghetta),sChrSep,aNumeri)
End If
' valorizzo la classe della lunghetta
mClasse = UBound(aNumeri)
End Sub
Private Sub AlimentaVettoreIncrRitMax
Dim nRitMax,nIncr,nId,k
nId = 0
' inizializzo il vettore a 0 elementi
ReDim aElencoIncrRitMax(0)
ReDim aIdEstrIncrRitMax(0)
ReDim aRitardiAllIncremento(0)
' ciclo sul vettore dei ritardi
For k = 1 To UBound(aElencoRit)
' se il ritardo corrente supera il ritmax attuale..
If aElencoRit(k) > nRitMax Then
If nRitMax > 0 Then
' se il ritmax attuale è >0 (ivvero ne esiste uno)
' calcolo di quanto si è incrementato
nIncr = aElencoRit(k) - nRitMax
' incremento il contatore dei valori trovati
nId = nId + 1
' ridimensiono il vettore mantenendo i valori precedenti ma
' aggiungendone uno
ReDim Preserve aElencoIncrRitMax(nId)
' memorizzo il valore
aElencoIncrRitMax(nId) = nIncr
' ridimensiono il vettore mantnendo i valori precedenti ma
' aggiungendone uno
ReDim Preserve aIdEstrIncrRitMax(nId)
' memorizzo l'id dell'estrazione dove si è avuto l'incremento
aIdEstrIncrRitMax(nId) = aIdEstrElencoRit(k)
' ridimensiono il vettore mantnendo i valori precedenti ma
' aggiungendone uno
ReDim Preserve aRitardiAllIncremento(nId)
' memorizzo il valore del ritardo all'id dell'estrazione dove si è avuto l'incremento
aRitardiAllIncremento(nId) = aElencoRit(k)
End If
nRitMax = aElencoRit(k)
End If
Next
mStrIncRitSto = StringaNumeri(aElencoIncrRitMax,,True)
End Sub
Function IsCondizioneRispettata(nIdFiltro,nQIncr)
' verifica che l'incremento dell'ultimo ritmax sia uguale al massimo incr rit max conosciuto.
Dim nUpper
nUpper = UBound(aElencoIncrRitMax)
mIncrRitardoMaxSto = MassimoV(aElencoIncrRitMax,1,nUpper - 1)
If aElencoRit(UBound(aElencoRit)) > 0 And aIdEstrIncrRitMax(nUpper) = mFine And nUpper >= nQIncr Then
Select Case nIdFiltro
Case 0
IsCondizioneRispettata =(aElencoIncrRitMax(nUpper) = mIncrRitardoMaxSto)
Case 1
IsCondizioneRispettata =(aElencoIncrRitMax(nUpper) >= mIncrRitardoMaxSto)
Case 2
IsCondizioneRispettata =(aElencoIncrRitMax(nUpper) <= mIncrRitardoMaxSto)
End Select
Else
IsCondizioneRispettata = False
End If
End Function
Sub DisegnaGraficoIncrRitMax
Dim x,y,k
Dim nValoreMaxX,nValoreMaxY,nValoreMinX
Dim nStepX,nStepY
Dim nUpperVetIncrRit
nValoreMinX = MinimoV(aIdEstrIncrRitMax,1)
nValoreMaxX = aIdEstrIncrRitMax(UBound(aIdEstrIncrRitMax))
nValoreMaxY = MassimoV(aElencoRit,1)
nStepX =(nValoreMaxX -(mInizio - 1)) \10
nStepY = nValoreMaxY \10
Call PreparaGrafico("Formaziione " & StringaNumeri(aNumeri),nValoreMinX,nValoreMaxX,0,nValoreMaxY,nStepX,nStepY)
nUpperVetIncrRit = UBound(aElencoIncrRitMax)
' linea dell'incremento rit max
ReDim aV(nUpperVetIncrRit - 1,2)
For k = 1 To nUpperVetIncrRit
x = aIdEstrIncrRitMax(k)
y = aElencoIncrRitMax(k)
aV(k - 1,1) = x
aV(k - 1,2) = y
Next
Call DisegnaLineaGrafico(aV,vbRed,"IncrRitMax")
' linea dell' rit max
ReDim aV(nUpperVetIncrRit - 1,2)
For k = 1 To nUpperVetIncrRit
x = aIdEstrIncrRitMax(k)
y = aRitardiAllIncremento(k)
aV(k - 1,1) = x
aV(k - 1,2) = y
Next
Call DisegnaLineaGrafico(aV,vbBlue,"RitMax")
' scrive grafico nell'output
Call InserisciGrafico
End Sub
End Class
Sub Main
Dim sDir,Inizio,Fine,sFile,sFileCompleto,aRuote,Sorte
Dim bOk,idFiltro,qIncr
sDir = GetDirectoryAppData & "ArchiviVirtuali\"
sFile = ScegliFileArchivioVirt(sDir)
If sFile <> "" Then
sFileCompleto = sDir & sFile & ".dat"
bOk = ApriFileBaseDati(sFileCompleto)
Else
bOk = True ' archivio normale
End If
If bOk Then
If ScegliRange(Inizio,Fine) Then
Sorte = ScegliEsito
Call ScegliRuote(aRuote,Nothing)
' decido il filtro in base al valore degli incrementi
idFiltro = GetIdFiltro
' decido di filtrare in base al numero degli incrementi
qIncr = GetQuantiIncrementi
If(Fine > Inizio) And UBound(aRuote) > 0 And Sorte > 0 And idFiltro > - 1 Then
Call Scrivi("Archivio : " & Iif(sFile <> "",sFile,"Archivio lotto"))
Select Case ScegliTipoSviluppo
Case 1
Call AnalisiLunghetteFromFileTxt(Inizio,Fine,aRuote,Sorte,idFiltro,qIncr)
Case 2
Call AnalisiLunghetteFromNumeriCasuali(Inizio,Fine,aRuote,Sorte,idFiltro,qIncr)
Case 3
Call AnalisiLunghetteFromSceglinumeri(Inizio,Fine,aRuote,Sorte,idFiltro,qIncr)
End Select
End If
End If
End If
End Sub
Function ScegliFileArchivioVirt(sDir)
Dim i
ReDim aFile(0)
Call ElencoFileInDirectory(sDir,aFile,".dat")
aFile(0) = "Archivio reale"
i = ScegliOpzioneMenu(aFile,0,"Scegli archivio virtuale")
If i > 0 Then
ScegliFileArchivioVirt = aFile(i)
Else
ScegliFileArchivioVirt = ""
End If
End Function
Function ScegliTipoSviluppo
ReDim aVoci(3)
aVoci(1) = "Da file txt con lunghette"
aVoci(2) = "Da sviluppo casuale"
aVoci(3) = "Da sviluppo tabellare"
ScegliTipoSviluppo = ScegliOpzioneMenu(aVoci,1)
End Function
Function GetChrSepFromRiga(sRiga)
Dim k,schr
schr = ""
For k = 1 To Len(sRiga)
schr = Mid(sRiga,k,1)
If IsNumeric(schr) = False Then
Exit For
End If
Next
GetChrSepFromRiga = schr
End Function
Function GetIdFiltro
Dim aFiltro
aFiltro = Array("IncrRitMaxSto=UltimoIncrRitMax","IncrRitMaxSto<=UltimoIncrRitMax","IncrRitMaxSto>=UltimoIncrRitMax")
GetIdFiltro = ScegliOpzioneMenu(aFiltro,0,"Select Filtro Condizione")
End Function
Function GetQuantiIncrementi
GetQuantiIncrementi = CInt(InputBox("qIncr>=(NumeroIncrementiRitMaxFormazione)","Filtro Quantitaà Incrementi",5))
End Function
' Questa è la nuova routine che impedisce di scrivere i doppi
' ma non mpedisce di incrementare nTrov
Sub AddLunghetta(collLunghette,clsL)
On Error Resume Next
collLunghette.Add clsL ,"k"&clsL.LunghettaString
End Sub
Sub AnalisiLunghetteFromFileTxt(Inizio,Fine,aRuote,Sorte,idFiltro,qIncr)
Dim sFile,aLunghette,nTotLunghette
Dim k,sChrSep
Dim clsL,collLunghette
Set collLunghette = GetNewCollection
sFile = ScegliFile(GetDirectoryAppData,".txt")
If FileEsistente(sFile) Then
Call LeggiRigheFileDiTesto(sFile,aLunghette)
nTotLunghette = UBound(aLunghette)
If nTotLunghette > 0 Then
sChrSep = GetChrSepFromRiga(aLunghette(1))
For k = 0 To nTotLunghette
Set clsL = New clsLunghetta
Call clsL.Init(aLunghette(k),sChrSep,Inizio,Fine,aRuote,Sorte)
If clsL.IsCondizioneRispettata(idFiltro,qIncr) Then
Call clsL.EseguiStatistica
collLunghette.Add clsL
End If
If k Mod 50 = 0 Then
Call Messaggio("Righe esaminate : " & k)
Call AvanzamentoElab(1,nTotLunghette,k)
If ScriptInterrotto Then Exit For
End If
Next
Scrivi "Range analisi : " & GetInfoEstrazione(Inizio) & " - " & GetInfoEstrazione(Fine)
Scrivi "Lunghette esaminate : " & nTotLunghette & " Valide : " & collLunghette.count
Scrivi "Sorte : " & NomeSorte(Sorte)
Scrivi "Ruote : " & StringaRuote(aRuote)
Scrivi "Numero Minimo IncrRit : " & Format2(qIncr)
Scrivi
Scrivi "Lunghette ordinate per incremento ritardo max",True,,vbYellow
Call Scrivi
If collLunghette.count > 0 Then
Call OrdinaItemCollection(collLunghette,"IncrRitMax",,,- 1)
For Each clsL In collLunghette
Call Scrivi("Numeri Formazione : " & clsL.LunghettaString)
Call Scrivi("Ritardo : " & clsL.Ritardo)
Call Scrivi("RitMax : " & clsL.RitardoMax)
Call Scrivi("Freq : " & clsL.Frequenza)
Call Scrivi("IncrRitMx : " & clsL.IncrRitMax)
Call Scrivi("IncrRitMaxSto : " & clsL.IncrRitMaxSto)
Call Scrivi("strIncrementi : " & clsL.strIncRitMaxSto)
Call Scrivi("Numero Incrementi : " & clsL.iNumIncrementi)
Call clsL.DisegnaGraficoIncrRitMax
Next
Else
Scrivi "Nessuna lunghetta rispetta le condizioni"
Scrivi "Lunghette esaminate " & nTotLunghette + 1
End If
End If
End If
End Sub
Sub AnalisiLunghetteFromNumeriCasuali(Inizio,Fine,aRuote,Sorte,idFiltro,qIncr)
Dim sFile,aLunghette,nTotLunghette,nClasse
Dim nTrov,nProdotte
Dim clsL,collLunghette
ReDim aSelNum(0)
Set collLunghette = GetNewCollection
nTotLunghette = Int(InputBox("Quante lunghette devono essere trovate ?",,10))
ScegliNumeri(aSelNum)
nClasse = Int(InputBox("Quanti numeri nella lunghetta",,Sorte))
If nTotLunghette > 0 And nClasse >= Sorte And nClasse <= 10 Then
nTrov = 0
nProdotte = 0
Do While nTrov <= nTotLunghette
Set clsL = New clsLunghetta
ReDim aNum(nClasse)
Call GetColonnaCasuale(nClasse,aNum,aSelNum)
nProdotte = nProdotte + 1
Call clsL.Init(aNum,"",Inizio,Fine,aRuote,Sorte)
If clsL.IsCondizioneRispettata(idFiltro,qIncr) Then
Call clsL.EseguiStatistica
Call AddLunghetta(collLunghette,clsL)
nTrov = nTrov + 1
End If
If nProdotte Mod 50 = 0 Then
Call Messaggio("combinazioni esaminate " & nProdotte & " valide " & nTrov)
Call DoEventsEx
If ScriptInterrotto Then Exit Do
End If
Loop
Scrivi "Range analisi : " & GetInfoEstrazione(Inizio) & " - " & GetInfoEstrazione(Fine)
Scrivi "Lunghette esaminate : " & nProdotte & " Valide : " & collLunghette.count
Scrivi "Sorte : " & NomeSorte(Sorte)
Scrivi "Ruote : " & StringaRuote(aRuote)
Scrivi "Numero Minimo IncrRit : " & Format2(qIncr)
Scrivi
Scrivi "Lunghette ordinate per incremento ritardo max",True,,vbYellow
Call Scrivi
If collLunghette.count > 0 Then
Call OrdinaItemCollection(collLunghette,"IncrRitMax",,,- 1)
For Each clsL In collLunghette
Call Scrivi("Numeri Formazione : " & clsL.LunghettaString)
Call Scrivi("Ritardo : " & clsL.Ritardo)
Call Scrivi("RitMax : " & clsL.RitardoMax)
Call Scrivi("Freq : " & clsL.Frequenza)
Call Scrivi("IncrRitMx : " & clsL.IncrRitMax)
Call Scrivi("IncrRitMaxSto : " & clsL.IncrRitMaxSto)
Call Scrivi("strIncrementi : " & clsL.strIncRitMaxSto)
Call Scrivi("Numero Incrementi : " & clsL.iNumIncrementi)
Call clsL.DisegnaGraficoIncrRitMax
Next
Else
Scrivi "Nessuna lunghetta rispetta le condizioni"
Scrivi "Lunghette esaminate " & nTotLunghette
End If
End If
End Sub
Sub AnalisiLunghetteFromSceglinumeri(Inizio,Fine,aRuote,Sorte,idFiltro,qIncr)
Dim nTotLunghette
Dim k,sChrSep,nClasse
ReDim aLunghette(0)
Dim clsL,collLunghette
Set collLunghette = GetNewCollection
sChrSep = " "
ScegliNumeri(aLunghette)
nClasse = CInt(InputBox(" classe sviluppo ",,2))
nTotLunghette = InitSviluppoIntegrale(aLunghette,nClasse)
k = 0
Do While GetCombSviluppo(aLunghette)
k = k + 1
Set clsL = New clsLunghetta
Call clsL.Init(aLunghette,sChrSep,Inizio,Fine,aRuote,Sorte)
If clsL.IsCondizioneRispettata(idFiltro,qIncr) Then
Call clsL.EseguiStatistica
collLunghette.Add clsL
End If
If k Mod 50 = 0 Then
Call Messaggio("Righe esaminate " & k & " valide " & collLunghette. count)
DoEventsEx
Call AvanzamentoElab(1,nTotLunghette,k)
If ScriptInterrotto Then Exit Do
End If
Loop
Scrivi "Range analisi : " & GetInfoEstrazione(Inizio) & " - " & GetInfoEstrazione(Fine)
Scrivi "Lunghette esaminate : " & nTotLunghette & " Valide : " & collLunghette.count
Scrivi "Sorte : " & NomeSorte(Sorte)
Scrivi "Ruote : " & StringaRuote(aRuote)
Scrivi "Numero Minimo IncrRit : " & Format2(qIncr)
Scrivi
Scrivi "Lunghette ordinate per incremento ritardo max",True,,vbYellow
Call Scrivi
If collLunghette.count > 0 Then
Call OrdinaItemCollection(collLunghette,"IncrRitMax",,,- 1)
For Each clsL In collLunghette
Call Scrivi("Numeri Formazione : " & clsL.LunghettaString)
Call Scrivi("Ritardo : " & clsL.Ritardo)
Call Scrivi("RitMax : " & clsL.RitardoMax)
Call Scrivi("Freq : " & clsL.Frequenza)
Call Scrivi("IncrRitMx : " & clsL.IncrRitMax)
Call Scrivi("IncrRitMaxSto : " & clsL.IncrRitMaxSto)
Call Scrivi("strIncrementi : " & clsL.strIncRitMaxSto)
Call Scrivi("Numero Incrementi : " & clsL.iNumIncrementi)
Call clsL.DisegnaGraficoIncrRitMax
Next
Else
Scrivi "Nessuna lunghetta rispetta le condizioni"
Scrivi "Lunghette esaminate " & nTotLunghette
End If
End Sub
Function AddLunghetta (collLunghette, clsL )
On Error resume Next
CollLunghette. Add clsL, "k" & clsL. LunghettaString
If Err =0 then
AddLunghetta = true
Else
AddLunghetta =False
End If
Err.Clear
End function
If AddLunghetta ( collLunghette, clsL ) Then nTrov = nTrov + 1
NumVirtToNumReale ( NumVirt ,bPrimaEstrFissa ,idEstr , Dist)
If sFile <> "" Then
sFileCompleto = sDir & sFile & ".dat"
bOk = ApriFileBaseDati(sFileCompleto)
Else
bOk = True ' archivio normale
End If
Option Explicit
Sub Main
Dim sTesto,sValue
sTesto = "SVP D(17) ConFissi [9000].dat"
sValue = GetValoreFraSeparatori(sTesto,"(",")")
Call Scrivi(sValue)
End Sub