Novità

Dopo averlo modificato per analizzare le posizioni unite desiderate...

lotto_tom75

Advanced Premium Member
Dopo aver modificato questo code fatto anni fa su mia richiesta dai grandissimi Luigi e I legend per poter verificare situazioni teoricamente ottimali di incmax per tutte le sorti da E a C ma non dal punto di vista delle posizioni... non riesco a capire dove modificarlo ulteriormente al fine di visualizzare nel grafico anche l'ultimo valore di incmax posizionale rilevato... :unsure:

Per adesso il grafico è corretto dal punto di vista dell'analisi posizionale effettuata dalle mie piccole modifiche ma non include appunto l'ultimo valore di incmax posizionale che per maggior chiarezza ho evidenziato in rosso... nel relativo output.

Ho provato di tutto di + 🥴 ma nisba... 🤬

Codice:
Option Explicit
Class clsLunghetta
   Private aNumeri
   Private aposizione(1) ' aggiunto valore di posizione
   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,aposizione)
      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(aposizione)
      Call StatisticaFormazioneTurbo(aNumeri,aRuote,mSorte,mRitardo,mRitardoMax,mIncrRitMax,mFrequenza,mInizio,mFine,,aposizione)
   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'+1
         x = aIdEstrIncrRitMax(k)'+1
         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
   Dim aposizione(5)
   Dim quanteposizioniunite
   quanteposizioniunite = CInt(InputBox("quante posizioni unite",,4))
   Select Case(quanteposizioniunite)
   Case 1
      'Dim aposizione(1)
      aposizione(1) = CInt(InputBox("posizione da analizzare",,1))
   Case 2
      'aposizione(2)
      aposizione(1) = CInt(InputBox("prima posizione da analizzare",,1))
      aposizione(2) = CInt(InputBox("seconda posizione da analizzare",,2))
   Case 3
      'aposizione(3)
      aposizione(1) = CInt(InputBox("prima posizione da analizzare",,1))
      aposizione(2) = CInt(InputBox("seconda posizione da analizzare",,2))
      aposizione(3) = CInt(InputBox("terza posizione da analizzare",,3))
   Case 4
      'aposizione(4)
      aposizione(1) = CInt(InputBox("prima posizione da analizzare",,1))
      aposizione(2) = CInt(InputBox("seconda posizione da analizzare",,3))
      aposizione(3) = CInt(InputBox("terza posizione da analizzare",,4))
      aposizione(4) = CInt(InputBox("quarta posizione da analizzare",,5))
   Case 5
      'aposizione(5)
      aposizione(1) = CInt(InputBox("prima posizione da analizzare",,1))
      aposizione(2) = CInt(InputBox("seconda posizione da analizzare",,2))
      aposizione(3) = CInt(InputBox("terza posizione da analizzare",,3))
      aposizione(4) = CInt(InputBox("quarta posizione da analizzare",,4))
      aposizione(5) = CInt(InputBox("quinta posizione da analizzare",,5))
   End Select
   'aposizione(1) = CInt(InputBox("posizione da analizzare ",,1))
   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,aposizione)
      Call clsL.EseguiStatistica(aposizione)
      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("Posizione n. : " & StringaNumeri(aposizione))
      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 & ".<font color=red>" & clsL.IncrRitMax & "</font>",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,1," Analisi Posizionale 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",,"25.49")
   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

Chiedo a Luigi o a I legend o a chi riesce a metterci mano (tipo claudio8) come poter fare...

Thanks!

👋🧑‍🍳🙂

es. visivo pratico...

GEMI posizioni 1.3.4.5 per la coppia 25.49

Analisi incremento ritardo massimo per la sorte di Estratto

Sulla ruota di : GE.MI
Posizione n. : 1.3.4.5
Da Estrazione : [00001] [ 1 ] 07.01.1871
A Estrazione : [09986] [119] 05.10.2021

Numeri Formazione : 25.49
Ritardo attuale : 77
Ritardo Massimo storico : 77
Frequenza : 1417
Incremento del ritardo massimo attuale : 27
Incremento del ritardo massimo storico più alto : 18
Stringa degli incrementi : 04.06.18.04.08.10.27

es-GEMI-25-49.jpg
Come si vede dal grafico l'ultimo valore di incmax 27 evidenzaito in rosso nel grafico non viene riportato.
Questo infatti si ferma al penultimo valore della serie ovvero al 10.
 
Ultima modifica:

Edoardo_95

Advanced Member
Più che una soluzione ti d'ho una dritta. Lancia lo script e leggi in output i commenti generati leggendo le variabili.

Codice:
Option Explicit
Class clsLunghetta
   Private aNumeri
   Private aposizione(1) ' aggiunto valore di posizione
   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,aposizione)
      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(aposizione)
      Call StatisticaFormazioneTurbo(aNumeri,aRuote,mSorte,mRitardo,mRitardoMax,mIncrRitMax,mFrequenza,mInizio,mFine,,aposizione)
   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(nId) = 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)
      Dim z
      Scrivi "Elementi presenti all'interno dell'array aElencoIncrRitMax"
      Scrivi
      For z = 0 To UBound(aElencoIncrRitMax)
         Scrivi aElencoIncrRitMax(z)
      Next
      Scrivi
      Scrivi "Stringa degli incrementi presenti all'interno dell'array e che viene trascritta"
      Scrivi
      Scrivi mStrIncRitSto
      Scrivi
      mIncrRitardoMaxSto = MassimoV(aElencoIncrRitMax,1,nUpper - 1)
   End Sub
   Sub DisegnaGraficoIncrRitMax
      Dim x,y,k,z
      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)) \30
      nStepY = nValoreMaxY \30
      Call PreparaGrafico("Formazione " & StringaNumeri(aNumeri),nValoreMinX,nValoreMaxX,0,nValoreMaxY,nStepX,nStepY)
      nUpperVetIncrRit = UBound(aElencoIncrRitMax)
      Scrivi "Elementi presenti nell'array aElencoIncrRitMax utilizzati come coordinata Y nel punto cartesiano. Da notare che manca l'elemento 0 in quanto associato al primo ritardo standard che non presenza idestrazione"
      Scrivi
      For z = 1 To UBound(aElencoIncrRitMax)
         Scrivi z
      Next
      Scrivi
      Scrivi "Coordinate dei punti nel piano cartesiano e relativo puntatore nell'array"
      Scrivi
      ReDim aV(nUpperVetIncrRit - 1,2)
      For k = 1 To nUpperVetIncrRit'+1
         x = aIdEstrIncrRitMax(k)'+1
         y = aElencoIncrRitMax(k)
         aV(k - 1,1) = x
         aV(k - 1,2) = y
         Scrivi k
         Scrivi "(" & x & " ; " & 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
   Dim aposizione(5)
   Dim quanteposizioniunite
   quanteposizioniunite = CInt(InputBox("quante posizioni unite",,4))
   Select Case(quanteposizioniunite)
   Case 1
      'Dim aposizione(1)
      aposizione(1) = CInt(InputBox("posizione da analizzare",,1))
   Case 2
      'aposizione(2)
      aposizione(1) = CInt(InputBox("prima posizione da analizzare",,1))
      aposizione(2) = CInt(InputBox("seconda posizione da analizzare",,2))
   Case 3
      'aposizione(3)
      aposizione(1) = CInt(InputBox("prima posizione da analizzare",,1))
      aposizione(2) = CInt(InputBox("seconda posizione da analizzare",,2))
      aposizione(3) = CInt(InputBox("terza posizione da analizzare",,3))
   Case 4
      'aposizione(4)
      aposizione(1) = CInt(InputBox("prima posizione da analizzare",,1))
      aposizione(2) = CInt(InputBox("seconda posizione da analizzare",,3))
      aposizione(3) = CInt(InputBox("terza posizione da analizzare",,4))
      aposizione(4) = CInt(InputBox("quarta posizione da analizzare",,5))
   Case 5
      'aposizione(5)
      aposizione(1) = CInt(InputBox("prima posizione da analizzare",,1))
      aposizione(2) = CInt(InputBox("seconda posizione da analizzare",,2))
      aposizione(3) = CInt(InputBox("terza posizione da analizzare",,3))
      aposizione(4) = CInt(InputBox("quarta posizione da analizzare",,4))
      aposizione(5) = CInt(InputBox("quinta posizione da analizzare",,5))
   End Select
   'aposizione(1) = CInt(InputBox("posizione da analizzare ",,1))
   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,aposizione)
      Call clsL.EseguiStatistica(aposizione)
      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("Posizione n. : " & StringaNumeri(aposizione))
      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)
      Scrivi
      Scrivi "Se all'uscita della Sub AlimentaVettoreIncrRitMax la stringa degli incrementi e uguale a 04.06.18.04.08.10, perchè all'interno della Sub Main vi è un ultimo valore pari a 27?"
      Scrivi "Semplicemente perchè hai effettuato una concatenazione del valore di IncrRitMax restituito dalla funzione StatisticaFormazioneTurbo e lo hai aggiunto. Tale elemtno non è presente nell'array e non è gestito dalla Sub DisegnaGrafico"
      Scrivi "La soluzione al tuo problema è: Perchè la Sub AlimentaVettoreIncrRitMax non mi riporta come ultimo valore quello restituito da StatisticaFormazioneTurbo? Come posso farlo calcolare dalla sub?"
      Scrivi
      Call Scrivi("Stringa degli incrementi                        : " & clsL.strIncRitMaxSto & ".<font color=red>" & clsL.IncrRitMax & "</font>",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,1," Analisi Posizionale 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",,"25.49")
   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
 

lotto_tom75

Advanced Premium Member
Più che una soluzione ti d'ho una dritta. Lancia lo script e leggi in output i commenti generati leggendo le variabili.

Codice:
Option Explicit
Class clsLunghetta
   Private aNumeri
   Private aposizione(1) ' aggiunto valore di posizione
   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,aposizione)
      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(aposizione)
      Call StatisticaFormazioneTurbo(aNumeri,aRuote,mSorte,mRitardo,mRitardoMax,mIncrRitMax,mFrequenza,mInizio,mFine,,aposizione)
   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(nId) = 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)
      Dim z
      Scrivi "Elementi presenti all'interno dell'array aElencoIncrRitMax"
      Scrivi
      For z = 0 To UBound(aElencoIncrRitMax)
         Scrivi aElencoIncrRitMax(z)
      Next
      Scrivi
      Scrivi "Stringa degli incrementi presenti all'interno dell'array e che viene trascritta"
      Scrivi
      Scrivi mStrIncRitSto
      Scrivi
      mIncrRitardoMaxSto = MassimoV(aElencoIncrRitMax,1,nUpper - 1)
   End Sub
   Sub DisegnaGraficoIncrRitMax
      Dim x,y,k,z
      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)) \30
      nStepY = nValoreMaxY \30
      Call PreparaGrafico("Formazione " & StringaNumeri(aNumeri),nValoreMinX,nValoreMaxX,0,nValoreMaxY,nStepX,nStepY)
      nUpperVetIncrRit = UBound(aElencoIncrRitMax)
      Scrivi "Elementi presenti nell'array aElencoIncrRitMax utilizzati come coordinata Y nel punto cartesiano. Da notare che manca l'elemento 0 in quanto associato al primo ritardo standard che non presenza idestrazione"
      Scrivi
      For z = 1 To UBound(aElencoIncrRitMax)
         Scrivi z
      Next
      Scrivi
      Scrivi "Coordinate dei punti nel piano cartesiano e relativo puntatore nell'array"
      Scrivi
      ReDim aV(nUpperVetIncrRit - 1,2)
      For k = 1 To nUpperVetIncrRit'+1
         x = aIdEstrIncrRitMax(k)'+1
         y = aElencoIncrRitMax(k)
         aV(k - 1,1) = x
         aV(k - 1,2) = y
         Scrivi k
         Scrivi "(" & x & " ; " & 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
   Dim aposizione(5)
   Dim quanteposizioniunite
   quanteposizioniunite = CInt(InputBox("quante posizioni unite",,4))
   Select Case(quanteposizioniunite)
   Case 1
      'Dim aposizione(1)
      aposizione(1) = CInt(InputBox("posizione da analizzare",,1))
   Case 2
      'aposizione(2)
      aposizione(1) = CInt(InputBox("prima posizione da analizzare",,1))
      aposizione(2) = CInt(InputBox("seconda posizione da analizzare",,2))
   Case 3
      'aposizione(3)
      aposizione(1) = CInt(InputBox("prima posizione da analizzare",,1))
      aposizione(2) = CInt(InputBox("seconda posizione da analizzare",,2))
      aposizione(3) = CInt(InputBox("terza posizione da analizzare",,3))
   Case 4
      'aposizione(4)
      aposizione(1) = CInt(InputBox("prima posizione da analizzare",,1))
      aposizione(2) = CInt(InputBox("seconda posizione da analizzare",,3))
      aposizione(3) = CInt(InputBox("terza posizione da analizzare",,4))
      aposizione(4) = CInt(InputBox("quarta posizione da analizzare",,5))
   Case 5
      'aposizione(5)
      aposizione(1) = CInt(InputBox("prima posizione da analizzare",,1))
      aposizione(2) = CInt(InputBox("seconda posizione da analizzare",,2))
      aposizione(3) = CInt(InputBox("terza posizione da analizzare",,3))
      aposizione(4) = CInt(InputBox("quarta posizione da analizzare",,4))
      aposizione(5) = CInt(InputBox("quinta posizione da analizzare",,5))
   End Select
   'aposizione(1) = CInt(InputBox("posizione da analizzare ",,1))
   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,aposizione)
      Call clsL.EseguiStatistica(aposizione)
      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("Posizione n. : " & StringaNumeri(aposizione))
      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)
      Scrivi
      Scrivi "Se all'uscita della Sub AlimentaVettoreIncrRitMax la stringa degli incrementi e uguale a 04.06.18.04.08.10, perchè all'interno della Sub Main vi è un ultimo valore pari a 27?"
      Scrivi "Semplicemente perchè hai effettuato una concatenazione del valore di IncrRitMax restituito dalla funzione StatisticaFormazioneTurbo e lo hai aggiunto. Tale elemtno non è presente nell'array e non è gestito dalla Sub DisegnaGrafico"
      Scrivi "La soluzione al tuo problema è: Perchè la Sub AlimentaVettoreIncrRitMax non mi riporta come ultimo valore quello restituito da StatisticaFormazioneTurbo? Come posso farlo calcolare dalla sub?"
      Scrivi
      Call Scrivi("Stringa degli incrementi                        : " & clsL.strIncRitMaxSto & ".<font color=red>" & clsL.IncrRitMax & "</font>",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,1," Analisi Posizionale 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",,"25.49")
   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

Ben riletto grandissimo e grazie mille per la "dritta commentata" ;)
Spero che mi basti... ma ne dubito... :LOL:

Scrivi e posta + spesso però! (y)🙃😜

👋:)
 

Edoardo_95

Advanced Member
Allora ti aiuto di più :D

Se tu avessi la pazienza con carta e penna di segnarti ogni singolo ritardo registrato nella storia del lotto della tua formazione in questo preciso caso ti troveresti davanti a questa situazione (alcuni sono in grassetto ma il perché lo capirai tra poco):

4.10.28.6.4.3.5.2.7.11.5.11.12.2.1.7.2.1.3.2.6.1.15.10.1.5.5.12.6.21.14.28.8.4.6.9.6.25.6.5.26.5.6.1.1.9.32.6.8.19.15.1.2.10.19.16.4.5.11.4.1.1.5.24.23.3.19.12.6.17.10.7.4.2.7.18.3.11.19.3.5.8.22.16.16.17.4.28.14.7.6.6.1.3.8.1.4.10.8.6.8.9.3.5.6.10.10.3.2.2.3.18.4.4.10.5.1.8.7.18.1.13.1.6.10.4.2.16.9.7.1.12.1.2.1.5.17.3.7.7.12.11.13.5.4.5.3.16.26.7.10.8.3.11.6.15.12.7.5.16.1.16.7.1.1.3.15.3.3.2.3.30.1.14.20.11.10.27.26.10.1.2.4.5.12.1.20.19.10.16.12.1.4.7.7.12.2.18.26.7.18.22.1.5.3.4.4.7.4.21.5.21.10.4.40.4.16.17.18.5.12.2.18.9.6.14.5.2.3.7.9.8.2.4.13.21.2.3.6.7.16.10.27.18.10.2.1.8.16.1.8.3.11.5.2.4.8.23.14.10.8.6.2.2.2.3.4.13.1.2.4.6.28.1.9.6.12.32.3.10.12.9.1.3.28.6.1.11.6.2.11.3.1.28.12.4.9.13.7.2.5.2.6.10.11.1.2.15.2.3.8.20.9.4.3.16.16.4.7.16.26.3.4.25.11.7.2.4.2.11.15.2.6.18.1.3.6.7.11.9.7.4.5.17.4.11.19.50.8.31.30.7.11.2.1.6.4.1.2.2.12.1.3.5.8.3.1.2.3.1.3.1.6.15.3.2.12.1.2.4.2.1.11.5.9.14.5.9.9.11.3.2.4.1.6.19.3.1.1.3.13.1.4.1.8.3.23.2.17.4.1.1.6.10.2.10.1.2.1.4.8.1.17.1.1.2.19.5.1.3.16.1.4.1.1.6.3.7.3.9.1.1.6.6.4.3.5.16.10.1.4.5.9.2.7.2.1.8.10.4.4.7.5.3.2.8.1.1.5.1.8.3.10.9.4.1.2.2.11.4.13.1.6.2.5.8.2.6.3.5.2.5.8.9.3.11.2.6.3.5.11.5.4.9.1.4.5.5.1.8.2.2.3.5.7.7.10.7.6.9.1.1.7.2.2.4.1.1.3.1.3.1.7.1.3.2.2.4.14.6.15.6.2.4.5.2.13.1.3.2.4.1.2.1.3.3.5.1.1.3.2.3.9.1.7.8.6.2.1.4.4.2.2.1.10.13.8.7.3.9.1.3.8.1.4.1.1.3.3.6.5.14.1.1.1.2.1.1.5.1.1.2.1.4.1.2.4.3.1.4.4.2.5.6.11.5.1.3.2.16.2.6.1.3.1.18.1.10.5.6.1.2.1.2.4.3.8.5.5.1.3.3.2.9.8.4.4.1.5.4.1.1.8.1.6.4.5.1.3.1.1.2.1.3.1.12.3.15.5.1.3.6.2.1.4.1.2.8.8.4.4.1.1.15.6.8.8.5.6.3.9.12.4.10.3.1.3.1.5.5.7.6.10.6.8.2.1.5.3.6.9.4.2.1.2.9.2.3.2.1.1.1.2.1.6.2.6.1.6.2.5.2.16.4.2.16.2.4.2.11.6.1.2.4.5.22.3.11.1.2.10.3.10.5.3.6.1.1.1.16.4.11.2.1.8.2.1.1.16.1.12.6.3.8.15.3.5.5.9.1.5.6.12.4.10.10.12.2.3.1.2.8.2.2.12.1.4.1.1.5.1.1.3.16.4.11.5.4.6.2.3.7.3.3.2.3.2.11.3.3.5.2.2.14.1.5.3.1.3.18.3.4.3.3.3.7.6.1.4.1.3.14.9.7.6.2.2.1.5.1.7.3.7.3.1.2.9.1.5.7.10.1.2.4.1.1.3.2.3.17.1.9.5.11.11.1.6.3.1.1.6.11.23.3.1.2.5.7.2.1.1.3.17.7.4.7.5.9.1.5.4.9.4.5.3.5.5.4.20.3.15.2.11.2.4.4.5.3.5.9.3.3.1.1.5.14.1.4.2.3.6.5.6.1.5.2.2.6.1.3.1.5.5.2.1.1.7.8.3.3.2.1.11.1.5.13.4.1.3.7.19.15.5.2.1.4.2.2.6.20.5.1.5.7.3.13.1.1.2.3.1.2.1.3.10.17.4.5.18.2.2.6.6.5.3.1.3.3.3.6.17.3.1.20.4.2.15.3.4.2.4.17.4.7.1.6.3.6.3.10.1.1.1.1.6.4.4.1.3.2.1.4.3.14.11.1.3.1.9.2.2.2.4.13.5.6.1.3.5.2.3.4.1.8.4.6.10.4.8.1.1.1.2.33.10.11.10.2.5.9.8.4.1.12.1.4.7.9.2.12.2.3.5.3.3.25.9.2.7.6.1.15.1.6.1.13.2.11.1.1.3.3.11.5.6.10.5.1.10.7.3.5.3.3.3.1.5.6.1.5.6.2.4.8.7.9.3.2.1.4.6.1.2.1.3.1.6.1.6.9.19.7.6.4.8.1.4.1.2.3.1.22.4.25.6.4.9.3.4.5.3.3.13.1.1.2.1.2.3.2.5.7.3.2.1.3.3.1.2.1.5.1.5.2.2.5.6.4.8.2.8.3.4.2.3.3.5.2.5.5.2.3.3.9.8.2.2.1.11.12.1.6.4.1.17.5.4.12.4.2.4.3.11.1.1.2.7.10.5.11.3.6.2.17.8.2.2.6.3.2.9.2.2.1.2.18.2.1.7.9.2.2.4.2.2.7.1.5.2.7.2.1.5.6.3.2.21.4.1.1.7.1.12.1.12.4.6.1.1.6.9.4.7.1.4.1.2.1.4.12.2.5.16.4.9.4.10.1.12.7.2.8.3.1.3.10.1.1.1.5.6.15.5.2.3.4.5.1.4.1.7.7.2.2.6.5.8.4.7.7.1.14.17.16.2.1.13.5.8.9.5.2.7.19.2.4.1.5.14.5.4.22.1.4.3.1.6.6.6.14.2.3.5.3.1.2.2.1.1.6.1.5.2.1.1.1.2.4.2.18.5.1.21.11.6.34

Ora cosa fa la sub AlimentaVettoreIncrRitMax? Analizziamola passo passo

Inizialmente crea un indice e poi tre array che dovranno contenere alcuni dati già presenti ed altri calcolati (senza andare troppo nel dettaglio):

Codice:
      nId = 0
      ReDim aElencoIncrRitMax(0)
      ReDim aIdEstrIncrRitMax(0)
      ReDim aRitardiAllIncremento(0)

Successivamente viene assegnato all'indice zero dell'array aElencoIncrRitMax il valore presente nella stringa immensa di prima in questo modo:

Codice:
aElencoIncrRitMax(nId) = aElencoRit(1)

Quindi il primo elemento della stringa incrementi sara: 04.

Successivamente viene ciclato tutta quella sfilza di ritardi dal primo all'ultimo

Codice:
For k = 1 To UBound(aElencoRit)

Dove 1 sarà uguale all'elemento 4 e UBound(aElencoRit) sarà uguale a 34 (ultimo elemento)

In questo ciclo viene messa una condizione:

Codice:
If aElencoRit(k) > nRitMax Then

Se l'elemento di quella enorme lista è maggiore del ritardo massimo fino a quel punto registrato ...e naturalmente in ritardo massimo è maggiore di zero.

Codice:
If nRitMax > 0 Then

allora ...calcoliamo di quanto il ritardo si è incrementato

Codice:
nIncr = aElencoRit(k) - nRitMax

Andiamo di carta e penna così è tutto più chiaro.

Nella stringa di sopra prendiamo il primo elemento, ovvero 04

il ritardo successivo è di 10

quindi il ritardo massimo conosciuto fino a quel momento era 4 ...allora c'è stato un incremento

nIncr = 10 - 4 = 6

secondo elemento della "stringa" incrementi : 04.06 (aElencoIncrRitMax)

il ritardo successivo è di 28

quindi il ritardo massimo conosciuto fino a quel momento era 10 ...allora c'è stato un incremento

nIncr = 28 - 10 = 18

terzo elemento della "stringa" incrementi : 04.06.18 (aElencoIncrRitMax)

il ritardo successivo è 6

mmm allora nessun incremento anche perchè quello conosciuto è 28 ....

andiamo avanti......

e così via ....

Tali elementi vengono immagazzinati e salvati in aElencoIncrRitMax ...al termine del ciclo (gli altri incrementi puoi calcolarli tu dai numeri in grassetto)
otterrai quanto segue


04.06.18.04.08.10

Questi incrementi verranno poi trascritti nel grafico e disegnati.


L'ultimo elemento della stringa è 10 perché il penultimo ritardo massimo mai registrato è 40 .... L'ultimo 50 ... quindi

nIncr = 50 - 40 = 10

come puoi ben vedere il ritardo 50 non è mai stato superato fino ad oggi e quindi non vi è alcun altro incremento del ritardo massimo STORICO.


Come calcola l'incremento del ritardo StatisticaFormazioneTurbo?

Questo è molto più semplice ....

Prende il ritardo attuale e lo sottrae al ritardo precedente.

Punto


Il ritardo attuale corrisponde all'ultimo elemento della stringa iniziale ed è pari a 34 (escludendo l'estrazione in corso 33)

Il ritardo precedente è pari 6

Incremento del ritardo = 33 - 6 = 27


Quindi non va ad effettuare un controllo STORICO ma "ATTUALE"....

Non essendo gestito dalla Sub AlimentaVettoreIncrRitMax che ha una concezione diversa di calcolo non viene trascritto e disegnato il valore
(in realtà il discorso si estenderebbe alla spiegazione della sub DisegnaGraficoIncrRitMax ma qui ci vorrebbe una giornata)

Spero che questa spiegazione che al mio paese si direbbe terra-terra ahahah possa aiutarti a comprendere il perché non visualizzi nel grafico quel valore ed anche perché sarebbe controproducente farlo (andrebbe ad intaccare la concezione della sub).
 

lotto_tom75

Advanced Premium Member
Codice:
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)
   'Call Scrivi ("nUpper is... " & "<font color=red size=7>"&nUpper&"</font>")
   Call Scrivi("l'ultimo valore di aElencoIncrRitMax è... " & "<font color=red size=7>" & aElencoIncrRitMax(UBound(aElencoIncrRitMax)) & "</font>")
   mIncrRitardoMaxSto = MassimoV(aElencoIncrRitMax,1,nUpper - 1)
End Sub

Come questa riga aggiunge il primo valore di incmax

Codice:
   aElencoIncrRitMax(0) = aElencoRit(1)

non è possibile in qualche modo aggiungere anche l'ultimo qui non contemplato per le ragioni spiegate da Edo? :unsure:

E poi non capisco perchè valutando ritardi standard il problema della mancata verifica dell'ultimo valore non sussiste mentre se valuto quelli posizionali appare... :unsure:

I miei due neuroni stanno per abbandonare... ed esalare l'ultimo respiro... 🥴

👋🧑‍🍳🙂
 

lotto_tom75

Advanced Premium Member
Allora ti aiuto di più :D

Se tu avessi la pazienza con carta e penna di segnarti ogni singolo ritardo registrato nella storia del lotto della tua formazione in questo preciso caso ti troveresti davanti a questa situazione (alcuni sono in grassetto ma il perché lo capirai tra poco):

4.10.28.6.4.3.5.2.7.11.5.11.12.2.1.7.2.1.3.2.6.1.15.10.1.5.5.12.6.21.14.28.8.4.6.9.6.25.6.5.26.5.6.1.1.9.32.6.8.19.15.1.2.10.19.16.4.5.11.4.1.1.5.24.23.3.19.12.6.17.10.7.4.2.7.18.3.11.19.3.5.8.22.16.16.17.4.28.14.7.6.6.1.3.8.1.4.10.8.6.8.9.3.5.6.10.10.3.2.2.3.18.4.4.10.5.1.8.7.18.1.13.1.6.10.4.2.16.9.7.1.12.1.2.1.5.17.3.7.7.12.11.13.5.4.5.3.16.26.7.10.8.3.11.6.15.12.7.5.16.1.16.7.1.1.3.15.3.3.2.3.30.1.14.20.11.10.27.26.10.1.2.4.5.12.1.20.19.10.16.12.1.4.7.7.12.2.18.26.7.18.22.1.5.3.4.4.7.4.21.5.21.10.4.40.4.16.17.18.5.12.2.18.9.6.14.5.2.3.7.9.8.2.4.13.21.2.3.6.7.16.10.27.18.10.2.1.8.16.1.8.3.11.5.2.4.8.23.14.10.8.6.2.2.2.3.4.13.1.2.4.6.28.1.9.6.12.32.3.10.12.9.1.3.28.6.1.11.6.2.11.3.1.28.12.4.9.13.7.2.5.2.6.10.11.1.2.15.2.3.8.20.9.4.3.16.16.4.7.16.26.3.4.25.11.7.2.4.2.11.15.2.6.18.1.3.6.7.11.9.7.4.5.17.4.11.19.50.8.31.30.7.11.2.1.6.4.1.2.2.12.1.3.5.8.3.1.2.3.1.3.1.6.15.3.2.12.1.2.4.2.1.11.5.9.14.5.9.9.11.3.2.4.1.6.19.3.1.1.3.13.1.4.1.8.3.23.2.17.4.1.1.6.10.2.10.1.2.1.4.8.1.17.1.1.2.19.5.1.3.16.1.4.1.1.6.3.7.3.9.1.1.6.6.4.3.5.16.10.1.4.5.9.2.7.2.1.8.10.4.4.7.5.3.2.8.1.1.5.1.8.3.10.9.4.1.2.2.11.4.13.1.6.2.5.8.2.6.3.5.2.5.8.9.3.11.2.6.3.5.11.5.4.9.1.4.5.5.1.8.2.2.3.5.7.7.10.7.6.9.1.1.7.2.2.4.1.1.3.1.3.1.7.1.3.2.2.4.14.6.15.6.2.4.5.2.13.1.3.2.4.1.2.1.3.3.5.1.1.3.2.3.9.1.7.8.6.2.1.4.4.2.2.1.10.13.8.7.3.9.1.3.8.1.4.1.1.3.3.6.5.14.1.1.1.2.1.1.5.1.1.2.1.4.1.2.4.3.1.4.4.2.5.6.11.5.1.3.2.16.2.6.1.3.1.18.1.10.5.6.1.2.1.2.4.3.8.5.5.1.3.3.2.9.8.4.4.1.5.4.1.1.8.1.6.4.5.1.3.1.1.2.1.3.1.12.3.15.5.1.3.6.2.1.4.1.2.8.8.4.4.1.1.15.6.8.8.5.6.3.9.12.4.10.3.1.3.1.5.5.7.6.10.6.8.2.1.5.3.6.9.4.2.1.2.9.2.3.2.1.1.1.2.1.6.2.6.1.6.2.5.2.16.4.2.16.2.4.2.11.6.1.2.4.5.22.3.11.1.2.10.3.10.5.3.6.1.1.1.16.4.11.2.1.8.2.1.1.16.1.12.6.3.8.15.3.5.5.9.1.5.6.12.4.10.10.12.2.3.1.2.8.2.2.12.1.4.1.1.5.1.1.3.16.4.11.5.4.6.2.3.7.3.3.2.3.2.11.3.3.5.2.2.14.1.5.3.1.3.18.3.4.3.3.3.7.6.1.4.1.3.14.9.7.6.2.2.1.5.1.7.3.7.3.1.2.9.1.5.7.10.1.2.4.1.1.3.2.3.17.1.9.5.11.11.1.6.3.1.1.6.11.23.3.1.2.5.7.2.1.1.3.17.7.4.7.5.9.1.5.4.9.4.5.3.5.5.4.20.3.15.2.11.2.4.4.5.3.5.9.3.3.1.1.5.14.1.4.2.3.6.5.6.1.5.2.2.6.1.3.1.5.5.2.1.1.7.8.3.3.2.1.11.1.5.13.4.1.3.7.19.15.5.2.1.4.2.2.6.20.5.1.5.7.3.13.1.1.2.3.1.2.1.3.10.17.4.5.18.2.2.6.6.5.3.1.3.3.3.6.17.3.1.20.4.2.15.3.4.2.4.17.4.7.1.6.3.6.3.10.1.1.1.1.6.4.4.1.3.2.1.4.3.14.11.1.3.1.9.2.2.2.4.13.5.6.1.3.5.2.3.4.1.8.4.6.10.4.8.1.1.1.2.33.10.11.10.2.5.9.8.4.1.12.1.4.7.9.2.12.2.3.5.3.3.25.9.2.7.6.1.15.1.6.1.13.2.11.1.1.3.3.11.5.6.10.5.1.10.7.3.5.3.3.3.1.5.6.1.5.6.2.4.8.7.9.3.2.1.4.6.1.2.1.3.1.6.1.6.9.19.7.6.4.8.1.4.1.2.3.1.22.4.25.6.4.9.3.4.5.3.3.13.1.1.2.1.2.3.2.5.7.3.2.1.3.3.1.2.1.5.1.5.2.2.5.6.4.8.2.8.3.4.2.3.3.5.2.5.5.2.3.3.9.8.2.2.1.11.12.1.6.4.1.17.5.4.12.4.2.4.3.11.1.1.2.7.10.5.11.3.6.2.17.8.2.2.6.3.2.9.2.2.1.2.18.2.1.7.9.2.2.4.2.2.7.1.5.2.7.2.1.5.6.3.2.21.4.1.1.7.1.12.1.12.4.6.1.1.6.9.4.7.1.4.1.2.1.4.12.2.5.16.4.9.4.10.1.12.7.2.8.3.1.3.10.1.1.1.5.6.15.5.2.3.4.5.1.4.1.7.7.2.2.6.5.8.4.7.7.1.14.17.16.2.1.13.5.8.9.5.2.7.19.2.4.1.5.14.5.4.22.1.4.3.1.6.6.6.14.2.3.5.3.1.2.2.1.1.6.1.5.2.1.1.1.2.4.2.18.5.1.21.11.6.34

Ora cosa fa la sub AlimentaVettoreIncrRitMax? Analizziamola passo passo

Inizialmente crea un indice e poi tre array che dovranno contenere alcuni dati già presenti ed altri calcolati (senza andare troppo nel dettaglio):

Codice:
      nId = 0
      ReDim aElencoIncrRitMax(0)
      ReDim aIdEstrIncrRitMax(0)
      ReDim aRitardiAllIncremento(0)

Successivamente viene assegnato all'indice zero dell'array aElencoIncrRitMax il valore presente nella stringa immensa di prima in questo modo:

Codice:
aElencoIncrRitMax(nId) = aElencoRit(1)

Quindi il primo elemento della stringa incrementi sara: 04.

Successivamente viene ciclato tutta quella sfilza di ritardi dal primo all'ultimo

Codice:
For k = 1 To UBound(aElencoRit)

Dove 1 sarà uguale all'elemento 4 e UBound(aElencoRit) sarà uguale a 34 (ultimo elemento)

In questo ciclo viene messa una condizione:

Codice:
If aElencoRit(k) > nRitMax Then

Se l'elemento di quella enorme lista è maggiore del ritardo massimo fino a quel punto registrato ...e naturalmente in ritardo massimo è maggiore di zero.

Codice:
If nRitMax > 0 Then

allora ...calcoliamo di quanto il ritardo si è incrementato

Codice:
nIncr = aElencoRit(k) - nRitMax

Andiamo di carta e penna così è tutto più chiaro.

Nella stringa di sopra prendiamo il primo elemento, ovvero 04

il ritardo successivo è di 10

quindi il ritardo massimo conosciuto fino a quel momento era 4 ...allora c'è stato un incremento

nIncr = 10 - 4 = 6

secondo elemento della "stringa" incrementi : 04.06 (aElencoIncrRitMax)

il ritardo successivo è di 28

quindi il ritardo massimo conosciuto fino a quel momento era 10 ...allora c'è stato un incremento

nIncr = 28 - 10 = 18

terzo elemento della "stringa" incrementi : 04.06.18 (aElencoIncrRitMax)

il ritardo successivo è 6

mmm allora nessun incremento anche perchè quello conosciuto è 28 ....

andiamo avanti......

e così via ....

Tali elementi vengono immagazzinati e salvati in aElencoIncrRitMax ...al termine del ciclo (gli altri incrementi puoi calcolarli tu dai numeri in grassetto)
otterrai quanto segue


04.06.18.04.08.10

Questi incrementi verranno poi trascritti nel grafico e disegnati.


L'ultimo elemento della stringa è 10 perché il penultimo ritardo massimo mai registrato è 40 .... L'ultimo 50 ... quindi

nIncr = 50 - 40 = 10

come puoi ben vedere il ritardo 50 non è mai stato superato fino ad oggi e quindi non vi è alcun altro incremento del ritardo massimo STORICO.


Come calcola l'incremento del ritardo StatisticaFormazioneTurbo?

Questo è molto più semplice ....

Prende il ritardo attuale e lo sottrae al ritardo precedente.

Punto


Il ritardo attuale corrisponde all'ultimo elemento della stringa iniziale ed è pari a 34 (escludendo l'estrazione in corso 33)

Il ritardo precedente è pari 6

Incremento del ritardo = 33 - 6 = 27


Quindi non va ad effettuare un controllo STORICO ma "ATTUALE"....

Non essendo gestito dalla Sub AlimentaVettoreIncrRitMax che ha una concezione diversa di calcolo non viene trascritto e disegnato il valore
(in realtà il discorso si estenderebbe alla spiegazione della sub DisegnaGraficoIncrRitMax ma qui ci vorrebbe una giornata)

Spero che questa spiegazione che al mio paese si direbbe terra-terra ahahah possa aiutarti a comprendere il perché non visualizzi nel grafico quel valore ed anche perché sarebbe controproducente farlo (andrebbe ad intaccare la concezione della sub).

Purtroppo caro Edoardo_95 anche con la tua dettagliata spiegazione 🌍🌏 ho capito solo come mai non me lo mostra... ma non come risolvere il problema... 😞😔😕😣😖😫😭😤

Ti salutano (e salutano anche luigib, claudio8, ilegend e tutti gli intervenuti) i miei due unici due neuroni ormai alla 🍒🍑🥭🍍🥝🍏🍎🍐🍊🍉 👋🤡:)
 

Ultima estrazione Lotto

  • Estrazione del lotto
    venerdì 19 aprile 2024
    Bari
    39
    05
    81
    89
    73
    Cagliari
    56
    21
    01
    90
    03
    Firenze
    05
    56
    68
    27
    09
    Genova
    42
    50
    90
    27
    83
    Milano
    16
    71
    29
    85
    04
    Napoli
    29
    19
    23
    63
    50
    Palermo
    35
    54
    33
    57
    61
    Roma
    17
    29
    43
    55
    74
    Torino
    69
    60
    03
    01
    26
    Venezia
    05
    57
    59
    43
    34
    Nazionale
    30
    43
    64
    65
    21
    Estrazione Simbolotto
    Genova
    02
    20
    25
    12
    19
Alto