Option Explicit Class clsLunghetta Private aNumeri Private mInizio,mFine,aRuote,mSorte Private mClasse Private aElencoRit Private aIdEstrElencoRit Private aElencoIncrRitMax Private aIdEstrIncrRitMax Private aRitardiAllIncremento Private mRitardo,mRitardoMax,mIncrRitMax,mFrequenza 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 Sub Init(sLunghetta,sChrSep,RangeInizio,RangeFine,vetRuote,SorteInGioco) mInizio = RangeInizio mFine = RangeFine aRuote = vetRuote mSorte = SorteInGioco Call AlimentaVettoreLunghetta(sLunghetta,sChrSep) Call ElencoRitardi(aNumeri,aRuote,mSorte,mInizio,mFine,aElencoRit,aIdEstrElencoRit) Call AlimentaVettoreIncrRitMax End Sub 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 ReDim aNumeri(UBound(sLunghetta)) For k = 1 To UBound(sLunghetta) aNumeri(k) = sLunghetta(k) Next Else Call SplitByChar((sChrSep & sLunghetta),sChrSep,aNumeri) End If mClasse = UBound(aNumeri) End Sub Private Sub AlimentaVettoreIncrRitMax Dim nRitMax,nIncr,nId,k Dim nUpper nId = 0 ReDim aElencoIncrRitMax(0) ReDim aIdEstrIncrRitMax(0) ReDim aRitardiAllIncremento(0) aElencoIncrRitMax(0) = aElencoRit(1) For k = 1 To UBound(aElencoRit) If aElencoRit(k) > nRitMax Then If nRitMax > 0 Then nIncr = aElencoRit(k) - nRitMax nId = nId + 1 ReDim Preserve aElencoIncrRitMax(nId) aElencoIncrRitMax(nId) = nIncr ReDim Preserve aIdEstrIncrRitMax(nId) aIdEstrIncrRitMax(nId) = aIdEstrElencoRit(k) ReDim Preserve aRitardiAllIncremento(nId) aRitardiAllIncremento(nId) = aElencoRit(k) End If nRitMax = aElencoRit(k) End If Next mStrIncRitSto = StringaNumeri(aElencoIncrRitMax,,True) nUpper = UBound(aElencoIncrRitMax) mIncrRitardoMaxSto = MassimoV(aElencoIncrRitMax,1,nUpper - 1) End Sub 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("Formazione " & StringaNumeri(aNumeri),nValoreMinX,nValoreMaxX,0,nValoreMaxY,nStepX,nStepY) nUpperVetIncrRit = UBound(aElencoIncrRitMax) 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") 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") Call InserisciGrafico End Sub End Class Sub Main Dim Inizio,Fine,Sorte,aRuote,clsL,aN,sChrSep,k,sFrz sChrSep = " " Inizio = EstrazioneIni Fine = EstrazioneFin Set clsL = New clsLunghetta ReDim aN(90) If ScegliFormazione(aN) Then For k = 1 To 90 If aN(k) Then sFrz = sFrz & Format2(k) & "," End If Next sFrz = RimuoviLastChr(sFrz,",") aN = Array(0) aN = array_push(aN,sFrz) Sorte = SelEsito Call ScegliRuote(aRuote,Nothing) Call clsL.Init(aN,sChrSep,Inizio,Fine,aRuote,Sorte) Call clsL.EseguiStatistica Call AvanzamentoElab(0,1,1) Call Scrivi("Analisi incremento ritardo massimo per la sorte di " & NomeSorte(Sorte),True,,vbRed,vbWhite,4) Call Scrivi Call Scrivi("Sulla ruota di : " & StringaRuote(aRuote) & " ",True,,vbBlue,vbWhite,3) Call Scrivi("Da Estrazione : " & GetInfoEstrazione(Inizio),True,,vbBlue,vbWhite,3) Call Scrivi("A Estrazione : " & GetInfoEstrazione(Fine),True,,vbBlue,vbWhite,3) Call Scrivi Call Scrivi("Numeri Formazione : " & clsL.LunghettaString,True,,,,2) Call Scrivi("Ritardo attuale : " & clsL.Ritardo,True,,,,2) Call Scrivi("Ritardo Massimo storico : " & clsL.RitardoMax,True,,,,2) Call Scrivi("Frequenza : " & clsL.Frequenza,True,,,,2) Call Scrivi("Incremento del ritardo massimo attuale : " & clsL.IncrRitMax,True,,,,2) Call Scrivi("Incremento del ritardo massimo storico piĆ¹ alto : " & clsL.IncrRitMaxSto,True,,,,2) Call Scrivi("Stringa degli incrementi : " & clsL.strIncRitMaxSto,True,,,,2) Call Scrivi If clsL.RitardoMax > 0 Then Call clsL.DisegnaGraficoIncrRitMax End If End If End Sub Function SelEsito Dim ret Dim aVoci ' gli array partono sempre da 0 aVoci = Array("","Estratto","Ambo","Terno","Quaterna","Cinquina") ret = ScegliOpzioneMenu(aVoci,2," Analesi per Sorte di : ") SelEsito = ret End Function Function ScegliFormazione(aN) Dim sFormazione Dim k,i sFormazione = InputBox("Inserire la formazione da analizzare separando i numeri che la compongono con il punto",,"1.10.20") ReDim aV(0) Call SplitByChar(sFormazione,".",aV) For k = 0 To UBound(aV) If Int(aV(k)) > 0 And Int(aV(k)) <= 90 Then aN(Int(aV(k))) = True i = i + 1 End If Next If i > 0 Then ScegliFormazione = True End Function Function array_push(arr,vars) Dim k,newelem,newarrsize,elem If IsArray(arr) Then If Len(vars) > 0 Then If InStr(vars,",") = False Then newarrsize = CInt(UBound(arr) + 1) ReDim Preserve arr(newarrsize) arr(newarrsize) = vars Else k =(UBound(arr) + 1) newelem = Split(vars,",") newarrsize = CInt(UBound(arr) + UBound(newelem) + 1) ReDim Preserve arr(newarrsize) For Each elem In newelem arr(k) = Trim(elem) k = k + 1 Next End If End If array_push = arr Else array_push = False End If End Function