Novità

tentativo di cambiare lo step riduzionale in automatico in script 32 della toms bakery non riuscito...

lotto_tom75

Advanced Premium Member
Sicuramente sto annegando in un bicchier d'acqua... 🥴😬🫤😑
ma prima di diventare pazzo totalmente chiedo ad ilegend o chi per lui una ✋ nel capire come mai la nclassedinamica non cambia nonostante il valore di riduzione automatico lo faccia in modo apparentemente corretto...
😵‍💫😵🤬

Per vedere un esempio pratico basta mettere come gruppo base iniziale i 90 come classe iniziale 90 e come classe finale 2 e come step riduzionale iniziale 1; alla classe base dinamica 86 passa correttamente a step 2 ma poi... anzichè avere la relativa classe dinamica 86-2=84 passa erroneamente a classe dinamica 85 rimuovendo solo un punto di riduzione anzichè due... e cosi' fino alla fine.. anche per gli altri passaggi...

Ho provato a salvare il valore dinamico delllo step riduzionale in mille modi diversi (da ultimo anche su file txt) ma la classedinamica non ne vuole sapere di aggiornarsi in modo automatico correttamente rispetto ad esso. Se invece l'elaborazione avviene in modo manuale invece mantiene lo step riduzionale deciso aggiornandosi e riducendosi correttamente fino alla fine...

Codice:
Option Explicit
Class clsSviluppo
   Private aBNumDaSvil
   Private nQNumeri
   Private nCombInt
   Private nClasse
   Private aRighe
   Private nQNumPerRiga
   Private aPuntatore
   Private nSviluppate
   Function InitSviluppo(aNumeri,Classe)
      nQNumeri = AlimentArrayNumDaSvil(aNumeri)
      nCombInt = Combinazioni(nQNumeri,Classe)
      nClasse = Classe
      nSviluppate = 0
      If nCombInt > 0 Then
         Call AlimentaArrayRighe
         Call InitArrayPuntatore
      End If
      InitSviluppo = nCombInt
   End Function
   Function GetQuantitaNumeriDaSvil
      GetQuantitaNumeriDaSvil = nQNumeri
   End Function
   Function GetStringaNumDaSvil
      Dim s,k
      s = ""
      For k = 1 To UBound(aBNumDaSvil)
         If aBNumDaSvil(k) Then
            s = s & Format2(k) & "."
         End If
      Next
      GetStringaNumDaSvil = RimuoviLastChr(s,".")
   End Function
   Private Sub InitArrayPuntatore
      Dim k
      ReDim aPuntatore(nClasse)
      For k = 1 To nClasse - 1
         aPuntatore(k) = 1
      Next
      aPuntatore(k) = 0
   End Sub
   Function GetComb(aComb)
      Dim nTmp,K,nPuntatore
      nPuntatore = nClasse
      nTmp = aPuntatore(nPuntatore) + 1
      Do While nTmp > nQNumPerRiga
         nPuntatore = nPuntatore - 1
         If nPuntatore <= 0 Then Exit Do
         nTmp = aPuntatore(nPuntatore) + 1
      Loop
      If nPuntatore > 0 Then
         For K = nPuntatore To nClasse
            aPuntatore(K) = nTmp
         Next
         ReDim aComb(nClasse)
         For K = 1 To nClasse
            aComb(K) = aRighe(K,aPuntatore(K))
         Next
         nSviluppate = nSviluppate + 1
         GetComb = True
      Else
         GetComb = False
      End If
   End Function
   Function GetQuantitaSviluppate
      GetQuantitaSviluppate = nSviluppate
   End Function
   Private Function AlimentArrayNumDaSvil(aNumeri)
      Dim k,q
      aBNumDaSvil = ArrayNumeriToBool(aNumeri)
      For k = 1 To 90
         If aBNumDaSvil(k) Then
            q = q + 1
         End If
      Next
      AlimentArrayNumDaSvil = q
   End Function
   Private Sub AlimentaArrayRighe
      Dim nRiga,k,aNumeri
      Call ArrayBNumToArrayNum(aBNumDaSvil,aNumeri)
      nQNumPerRiga =(nQNumeri - nClasse) + 1
      ReDim aRighe(nClasse,nQNumPerRiga)
      For nRiga = 1 To nClasse
         For k = nRiga To(nRiga + nQNumPerRiga) - 1 '(nQNumeri - nClasse) + nRiga
            aRighe(nRiga,(k - nRiga) + 1) = aNumeri(k)
         Next
      Next
   End Sub
   Sub OutputARighe
      Dim k,j,s
      For k = 1 To nClasse
         s = ""
         For j = 1 To nQNumPerRiga
            s = s & Format2(aRighe(k,j)) & "."
         Next
      Next
   End Sub
End Class
Sub Main
   Dim filediraccolta
   filediraccolta = ".\filediraccolta.txt"
   If FileEsistente(filediraccolta) Then
      Call EliminaFile(filediraccolta)
   End If
   Dim filestepriduzionaledinamico
   filestepriduzionaledinamico = ".\filestepriduzionaledinamico.txt"
   If FileEsistente(filestepriduzionaledinamico) Then
      Call EliminaFile(filestepriduzionaledinamico)
   End If
   Dim cSvil
   Dim aNumDaSvil,nClasse,nCombInt,nQNumeri
   Dim aColonna
   Dim Inizio
   Dim fine
   Dim aRetcol,nSorte,RetRit1,RetRitMax,RetIncrRitMax,RetFreq,Iniziorange,idestrazione
   fine = EstrazioneFin
   Inizio = 1
   Dim freqmassima
   freqmassima = 0
   Dim numfqmaxuguali
   numfqmaxuguali = 0
   Dim Formazioneconfqmassima
   Dim Formazionesceltasolonumeri
   Dim Stringaoutput
   Dim contacomb
   contacomb = 0
   ReDim aruote(0)
   'aruote(1) = 1
   'aruote(2) = 2
   'aruote(3) = 6
   'aruote(4) = 10
   'aruote(5) = 12
   ScegliRuote(aruote)
   nSorte = CInt(InputBox("sorte",,2))
   Set cSvil = New clsSviluppo
   Call ScegliNumeri(aNumDaSvil)
   ScriviFile filediraccolta,StringaNumeri(aNumDaSvil)
   CloseFileHandle(filediraccolta)
   nClasse = CInt(InputBox("classe iniziale max 90 e min 1",,UBound(aNumDaSvil))) 'ScegliEsito(UBound(aNumDaSvil) - 2,2,90)
   Dim nClassefinale
   nClassefinale = CInt(InputBox("classe finale max 90 e min 1",,UBound(aNumDaSvil) - 1))
   Dim Stepriduzionalevoluto 'meglio x i tempi di elaborazione non troppo lunghi se  >= -3 e <= -1
   Stepriduzionalevoluto = CInt(InputBox("step riduzionale voluto max -3 min -1",,3))
   ScriviFile filestepriduzionaledinamico,Stepriduzionalevoluto
   CloseFileHandle(filestepriduzionaledinamico)
   ReDim ariga(0)
   Call LeggiRigheFileDiTesto(filestepriduzionaledinamico,ariga)
   Dim nClassedinamica
   For nClassedinamica = nClasse To nClassefinale Step - Int(Trim(ariga(0)))
      Call LeggiRigheFileDiTesto(filestepriduzionaledinamico,ariga)
      'nClassedinamica = nClassedinamica -Int(ariga(0))
      Scrivi
      Scrivi "<font size=3 color=blue>classe dinamica adesso è " & nClassedinamica
      Scrivi "<font size=5 color=blue>ariga(0) adesso è |" & Trim(ariga(0)) & "|"
      Scrivi
      'leggo il file filediraccolta
      Dim anum
      Dim y
      Dim c
      Call Messaggio("Lettura file di testo")
      ReDim aRighe(0)
      Call LeggiRigheFileDiTesto(filediraccolta,aRighe)
      For y = 0 To UBound(aRighe)
         If aRighe(y) <> "" Then
            Call SplitByChar("." & aRighe(y) & ".",".",anum)
         End If
         Dim anumint
         ReDim anumint(UBound(anum) - 1)
         For c = 1 To UBound(anum) - 1
            'Scrivi "|" & anum(c) & "|"
            anumint(c) = Int(anum(c))
            '
            If ScriptInterrotto Then Exit For
         Next
         '
         If ScriptInterrotto Then Exit For
      Next
      Dim varStop
      Scrivi
      Scrivi "<font color=green size=2> anumint |" & StringaNumeri(anumint) & "| classe anumint " & UBound(anumint)
      Scrivi "<font color=green size=3> nClassedinamica " & nClassedinamica
      Scrivi "<font color=green size=3> step riduzionale dinamico : " & - Int(ariga(0))
      Scrivi
      nCombInt = cSvil.InitSviluppo(anumint,nClassedinamica)
      If nCombInt Then
         nQNumeri = cSvil.GetQuantitaNumeriDaSvil
         Scrivi cSvil.GetStringaNumDaSvil
         Scrivi
         Scrivi "Quantita numeri        : " & nQNumeri
         Scrivi "Classe dinamica        : " & nClassedinamica
         Scrivi "Combinazioni integrali : " & nCombInt
         Scrivi "Step riduzionale dinamico : " & - Int(ariga(0)) 'Stepriduzionalevoluto
         Scrivi
         cSvil.OutputARighe
         Scrivi
         Do While cSvil.GetComb(aColonna)
            Call StatisticaFormazioneTurbo(aColonna,aruote,nSorte,RetRit1,RetRitMax,RetIncrRitMax,RetFreq,Inizio,fine)
            contacomb = contacomb + 1
            Stringaoutput = StringaNumeri(aColonna) & " - " & StringaRuote(aruote) & " -s " & nSorte & " -ra " & RetRit1 & " -rs " & RetRitMax & " -incmax " & RetIncrRitMax & " -freq " & RetFreq & " -inizio " & Inizio & " -fine " & fine
            If RetFreq > freqmassima Then
               freqmassima = RetFreq
               Formazioneconfqmassima = "<font color=red>" & Stringaoutput
               Formazionesceltasolonumeri = StringaNumeri(aColonna)
               numfqmaxuguali = 0
            End If
            If RetFreq = freqmassima Then
               numfqmaxuguali = numfqmaxuguali + 1
            End If
            Messaggio cSvil.GetQuantitaSviluppate & " r " & StringaRuote(aruote) & " ncd " & nClassedinamica & " step rid " & Stepriduzionalevoluto
            If ScriptInterrotto Then Exit Do
            Call AvanzamentoElab(1,nCombInt,contacomb)
         Loop
         Scrivi
         Scrivi "Sviluppate : " & cSvil.GetQuantitaSviluppate
      Else
         MsgBox "Impossibile sviluppare",vbCritical
         Exit For
      End If
      Scrivi
      Scrivi "report finale"
      Scrivi
      Scrivi "formazione con fq massima " & Formazioneconfqmassima
      Scrivi
      Dim giustovalorenumfqmaxuguali
      giustovalorenumfqmaxuguali = numfqmaxuguali - 1
      Scrivi "num. fq max uguali " & numfqmaxuguali - 1
      Scrivi
      Scrivi
      Scrivi "formazione scelta (solo numeri) " & Formazionesceltasolonumeri
      Scrivi
      Scrivi
      Scrivi "Tt " & TempoTrascorso
      Scrivi
      If Formazioneconfqmassima <> "" And numfqmaxuguali - 1 = 0 Then
         If FileEsistente(filediraccolta) Then
            Call EliminaFile(filediraccolta)
         End If
         ScriviFile filediraccolta,Formazionesceltasolonumeri
         CloseFileHandle(filediraccolta)
      Else
         Scrivi "<font color=red>Alt! NUMERO FQ MAX UGUALI purtroppo maggiore di zero e pari a " & giustovalorenumfqmaxuguali
         Scrivi "<font color=red>Interrompo qui l'elaborazione. Ricordo però che è possibile ripeterla da questo punto provando a cambiare valore di step riduzionale"
         Scrivi "<font color=red>e sperando che così facendo la risultanza relativa alla fq max ricercata sia unica :)"
         Stop
      End If
      If giustovalorenumfqmaxuguali > 0 Then ' Exit For
         Select Case(Stepriduzionalevoluto)
         Case 1
            Stepriduzionalevoluto = Int(2)
            Scrivi "<font color=red size=3>CAMBIO STEP RID in -2"
            Scrivi "adesso step riduzionale è : " & Stepriduzionalevoluto
            If FileEsistente(filestepriduzionaledinamico) Then
               Call EliminaFile(filestepriduzionaledinamico)
            End If
            ScriviFile filestepriduzionaledinamico,Stepriduzionalevoluto
            CloseFileHandle(filestepriduzionaledinamico)
            Call LeggiRigheFileDiTesto(filestepriduzionaledinamico,ariga)
         Case 2
            Stepriduzionalevoluto = Int(3)
            Scrivi "<font color=red size=3>CAMBIO STEP RID in -3"
            Scrivi "adesso step riduzionale è : " & Stepriduzionalevoluto
            If FileEsistente(filestepriduzionaledinamico) Then
               Call EliminaFile(filestepriduzionaledinamico)
            End If
            ScriviFile filestepriduzionaledinamico,Stepriduzionalevoluto
            CloseFileHandle(filestepriduzionaledinamico)
            Call LeggiRigheFileDiTesto(filestepriduzionaledinamico,ariga)
         Case 3
            Scrivi "Al termine step riduzionale è : " & Stepriduzionalevoluto
            Exit For
         End Select
      End If
      '--------------- fine controllo x interrompere elaborazione o meno...
      'prima di analizzare la nuova classe riazzeriamo tutto...
      Dim xnuovaclassebase
      Call SplitByChar(Formazionesceltasolonumeri,".",xnuovaclassebase)
      nClasse = UBound(xnuovaclassebase)
      freqmassima = 0
      giustovalorenumfqmaxuguali = 0
      Formazioneconfqmassima = ""
      Formazionesceltasolonumeri = ""
      Call LeggiRigheFileDiTesto(filestepriduzionaledinamico,ariga)
   Next ' x nclassedinamica
   ' End If ' varstop
End Sub

Grazie infinite a chi mi aiuta ad automatizzare questo script n.32 👌👍👋🙃😜🧑‍🍳
 
Mi viene in mente di fare un do while nclasse > nclasse volut
Redim anum(nclasse)
Init sviluppo integrale(anum, nclasse)
Do while getcombsviluppo (anumredim atemp( nclasse)
Atemp?= stringanumeri
Statistica atemp
Loop
In Base al filtro Carico temp In anum
Nclasse=nclasse-1 oppure 2



Loop
Io proveri a fare così
Ma a me sto script non funzionava.
Ricordi che me l avevi già postato?
Hai provato se gira sul nuovo software?
Oggi provo ad installarlo, e se va tutto bene "provo" a farne un altro.
Questo per me è troppo complesso.

Ma non è facile.
Tempo fa avevo provato a farlo per me che mi serviva , ma non avevo cavato un ragno dal buco.:(
 
Sicuramente sto annegando in un bicchier d'acqua... 🥴😬🫤😑
ma prima di diventare pazzo totalmente chiedo ad ilegend o chi per lui una ✋ nel capire come mai la nclassedinamica non cambia nonostante il valore di riduzione automatico lo faccia in modo apparentemente corretto...
😵‍💫😵🤬

Per vedere un esempio pratico basta mettere come gruppo base iniziale i 90 come classe iniziale 90 e come classe finale 2 e come step riduzionale iniziale 1; alla classe base dinamica 86 passa correttamente a step 2 ma poi... anzichè avere la relativa classe dinamica 86-2=84 passa erroneamente a classe dinamica 85 rimuovendo solo un punto di riduzione anzichè due... e cosi' fino alla fine.. anche per gli altri passaggi...

Ho provato a salvare il valore dinamico delllo step riduzionale in mille modi diversi (da ultimo anche su file txt) ma la classedinamica non ne vuole sapere di aggiornarsi in modo automatico correttamente rispetto ad esso. Se invece l'elaborazione avviene in modo manuale invece mantiene lo step riduzionale deciso aggiornandosi e riducendosi correttamente fino alla fine...

Codice:
Option Explicit
Class clsSviluppo
   Private aBNumDaSvil
   Private nQNumeri
   Private nCombInt
   Private nClasse
   Private aRighe
   Private nQNumPerRiga
   Private aPuntatore
   Private nSviluppate
   Function InitSviluppo(aNumeri,Classe)
      nQNumeri = AlimentArrayNumDaSvil(aNumeri)
      nCombInt = Combinazioni(nQNumeri,Classe)
      nClasse = Classe
      nSviluppate = 0
      If nCombInt > 0 Then
         Call AlimentaArrayRighe
         Call InitArrayPuntatore
      End If
      InitSviluppo = nCombInt
   End Function
   Function GetQuantitaNumeriDaSvil
      GetQuantitaNumeriDaSvil = nQNumeri
   End Function
   Function GetStringaNumDaSvil
      Dim s,k
      s = ""
      For k = 1 To UBound(aBNumDaSvil)
         If aBNumDaSvil(k) Then
            s = s & Format2(k) & "."
         End If
      Next
      GetStringaNumDaSvil = RimuoviLastChr(s,".")
   End Function
   Private Sub InitArrayPuntatore
      Dim k
      ReDim aPuntatore(nClasse)
      For k = 1 To nClasse - 1
         aPuntatore(k) = 1
      Next
      aPuntatore(k) = 0
   End Sub
   Function GetComb(aComb)
      Dim nTmp,K,nPuntatore
      nPuntatore = nClasse
      nTmp = aPuntatore(nPuntatore) + 1
      Do While nTmp > nQNumPerRiga
         nPuntatore = nPuntatore - 1
         If nPuntatore <= 0 Then Exit Do
         nTmp = aPuntatore(nPuntatore) + 1
      Loop
      If nPuntatore > 0 Then
         For K = nPuntatore To nClasse
            aPuntatore(K) = nTmp
         Next
         ReDim aComb(nClasse)
         For K = 1 To nClasse
            aComb(K) = aRighe(K,aPuntatore(K))
         Next
         nSviluppate = nSviluppate + 1
         GetComb = True
      Else
         GetComb = False
      End If
   End Function
   Function GetQuantitaSviluppate
      GetQuantitaSviluppate = nSviluppate
   End Function
   Private Function AlimentArrayNumDaSvil(aNumeri)
      Dim k,q
      aBNumDaSvil = ArrayNumeriToBool(aNumeri)
      For k = 1 To 90
         If aBNumDaSvil(k) Then
            q = q + 1
         End If
      Next
      AlimentArrayNumDaSvil = q
   End Function
   Private Sub AlimentaArrayRighe
      Dim nRiga,k,aNumeri
      Call ArrayBNumToArrayNum(aBNumDaSvil,aNumeri)
      nQNumPerRiga =(nQNumeri - nClasse) + 1
      ReDim aRighe(nClasse,nQNumPerRiga)
      For nRiga = 1 To nClasse
         For k = nRiga To(nRiga + nQNumPerRiga) - 1 '(nQNumeri - nClasse) + nRiga
            aRighe(nRiga,(k - nRiga) + 1) = aNumeri(k)
         Next
      Next
   End Sub
   Sub OutputARighe
      Dim k,j,s
      For k = 1 To nClasse
         s = ""
         For j = 1 To nQNumPerRiga
            s = s & Format2(aRighe(k,j)) & "."
         Next
      Next
   End Sub
End Class
Sub Main
   Dim filediraccolta
   filediraccolta = ".\filediraccolta.txt"
   If FileEsistente(filediraccolta) Then
      Call EliminaFile(filediraccolta)
   End If
   Dim filestepriduzionaledinamico
   filestepriduzionaledinamico = ".\filestepriduzionaledinamico.txt"
   If FileEsistente(filestepriduzionaledinamico) Then
      Call EliminaFile(filestepriduzionaledinamico)
   End If
   Dim cSvil
   Dim aNumDaSvil,nClasse,nCombInt,nQNumeri
   Dim aColonna
   Dim Inizio
   Dim fine
   Dim aRetcol,nSorte,RetRit1,RetRitMax,RetIncrRitMax,RetFreq,Iniziorange,idestrazione
   fine = EstrazioneFin
   Inizio = 1
   Dim freqmassima
   freqmassima = 0
   Dim numfqmaxuguali
   numfqmaxuguali = 0
   Dim Formazioneconfqmassima
   Dim Formazionesceltasolonumeri
   Dim Stringaoutput
   Dim contacomb
   contacomb = 0
   ReDim aruote(0)
   'aruote(1) = 1
   'aruote(2) = 2
   'aruote(3) = 6
   'aruote(4) = 10
   'aruote(5) = 12
   ScegliRuote(aruote)
   nSorte = CInt(InputBox("sorte",,2))
   Set cSvil = New clsSviluppo
   Call ScegliNumeri(aNumDaSvil)
   ScriviFile filediraccolta,StringaNumeri(aNumDaSvil)
   CloseFileHandle(filediraccolta)
   nClasse = CInt(InputBox("classe iniziale max 90 e min 1",,UBound(aNumDaSvil))) 'ScegliEsito(UBound(aNumDaSvil) - 2,2,90)
   Dim nClassefinale
   nClassefinale = CInt(InputBox("classe finale max 90 e min 1",,UBound(aNumDaSvil) - 1))
   Dim Stepriduzionalevoluto 'meglio x i tempi di elaborazione non troppo lunghi se  >= -3 e <= -1
   Stepriduzionalevoluto = CInt(InputBox("step riduzionale voluto max -3 min -1",,3))
   ScriviFile filestepriduzionaledinamico,Stepriduzionalevoluto
   CloseFileHandle(filestepriduzionaledinamico)
   ReDim ariga(0)
   Call LeggiRigheFileDiTesto(filestepriduzionaledinamico,ariga)
   Dim nClassedinamica
   For nClassedinamica = nClasse To nClassefinale Step - Int(Trim(ariga(0)))
      Call LeggiRigheFileDiTesto(filestepriduzionaledinamico,ariga)
      'nClassedinamica = nClassedinamica -Int(ariga(0))
      Scrivi
      Scrivi "<font size=3 color=blue>classe dinamica adesso è " & nClassedinamica
      Scrivi "<font size=5 color=blue>ariga(0) adesso è |" & Trim(ariga(0)) & "|"
      Scrivi
      'leggo il file filediraccolta
      Dim anum
      Dim y
      Dim c
      Call Messaggio("Lettura file di testo")
      ReDim aRighe(0)
      Call LeggiRigheFileDiTesto(filediraccolta,aRighe)
      For y = 0 To UBound(aRighe)
         If aRighe(y) <> "" Then
            Call SplitByChar("." & aRighe(y) & ".",".",anum)
         End If
         Dim anumint
         ReDim anumint(UBound(anum) - 1)
         For c = 1 To UBound(anum) - 1
            'Scrivi "|" & anum(c) & "|"
            anumint(c) = Int(anum(c))
            '
            If ScriptInterrotto Then Exit For
         Next
         '
         If ScriptInterrotto Then Exit For
      Next
      Dim varStop
      Scrivi
      Scrivi "<font color=green size=2> anumint |" & StringaNumeri(anumint) & "| classe anumint " & UBound(anumint)
      Scrivi "<font color=green size=3> nClassedinamica " & nClassedinamica
      Scrivi "<font color=green size=3> step riduzionale dinamico : " & - Int(ariga(0))
      Scrivi
      nCombInt = cSvil.InitSviluppo(anumint,nClassedinamica)
      If nCombInt Then
         nQNumeri = cSvil.GetQuantitaNumeriDaSvil
         Scrivi cSvil.GetStringaNumDaSvil
         Scrivi
         Scrivi "Quantita numeri        : " & nQNumeri
         Scrivi "Classe dinamica        : " & nClassedinamica
         Scrivi "Combinazioni integrali : " & nCombInt
         Scrivi "Step riduzionale dinamico : " & - Int(ariga(0)) 'Stepriduzionalevoluto
         Scrivi
         cSvil.OutputARighe
         Scrivi
         Do While cSvil.GetComb(aColonna)
            Call StatisticaFormazioneTurbo(aColonna,aruote,nSorte,RetRit1,RetRitMax,RetIncrRitMax,RetFreq,Inizio,fine)
            contacomb = contacomb + 1
            Stringaoutput = StringaNumeri(aColonna) & " - " & StringaRuote(aruote) & " -s " & nSorte & " -ra " & RetRit1 & " -rs " & RetRitMax & " -incmax " & RetIncrRitMax & " -freq " & RetFreq & " -inizio " & Inizio & " -fine " & fine
            If RetFreq > freqmassima Then
               freqmassima = RetFreq
               Formazioneconfqmassima = "<font color=red>" & Stringaoutput
               Formazionesceltasolonumeri = StringaNumeri(aColonna)
               numfqmaxuguali = 0
            End If
            If RetFreq = freqmassima Then
               numfqmaxuguali = numfqmaxuguali + 1
            End If
            Messaggio cSvil.GetQuantitaSviluppate & " r " & StringaRuote(aruote) & " ncd " & nClassedinamica & " step rid " & Stepriduzionalevoluto
            If ScriptInterrotto Then Exit Do
            Call AvanzamentoElab(1,nCombInt,contacomb)
         Loop
         Scrivi
         Scrivi "Sviluppate : " & cSvil.GetQuantitaSviluppate
      Else
         MsgBox "Impossibile sviluppare",vbCritical
         Exit For
      End If
      Scrivi
      Scrivi "report finale"
      Scrivi
      Scrivi "formazione con fq massima " & Formazioneconfqmassima
      Scrivi
      Dim giustovalorenumfqmaxuguali
      giustovalorenumfqmaxuguali = numfqmaxuguali - 1
      Scrivi "num. fq max uguali " & numfqmaxuguali - 1
      Scrivi
      Scrivi
      Scrivi "formazione scelta (solo numeri) " & Formazionesceltasolonumeri
      Scrivi
      Scrivi
      Scrivi "Tt " & TempoTrascorso
      Scrivi
      If Formazioneconfqmassima <> "" And numfqmaxuguali - 1 = 0 Then
         If FileEsistente(filediraccolta) Then
            Call EliminaFile(filediraccolta)
         End If
         ScriviFile filediraccolta,Formazionesceltasolonumeri
         CloseFileHandle(filediraccolta)
      Else
         Scrivi "<font color=red>Alt! NUMERO FQ MAX UGUALI purtroppo maggiore di zero e pari a " & giustovalorenumfqmaxuguali
         Scrivi "<font color=red>Interrompo qui l'elaborazione. Ricordo però che è possibile ripeterla da questo punto provando a cambiare valore di step riduzionale"
         Scrivi "<font color=red>e sperando che così facendo la risultanza relativa alla fq max ricercata sia unica :)"
         Stop
      End If
      If giustovalorenumfqmaxuguali > 0 Then ' Exit For
         Select Case(Stepriduzionalevoluto)
         Case 1
            Stepriduzionalevoluto = Int(2)
            Scrivi "<font color=red size=3>CAMBIO STEP RID in -2"
            Scrivi "adesso step riduzionale è : " & Stepriduzionalevoluto
            If FileEsistente(filestepriduzionaledinamico) Then
               Call EliminaFile(filestepriduzionaledinamico)
            End If
            ScriviFile filestepriduzionaledinamico,Stepriduzionalevoluto
            CloseFileHandle(filestepriduzionaledinamico)
            Call LeggiRigheFileDiTesto(filestepriduzionaledinamico,ariga)
         Case 2
            Stepriduzionalevoluto = Int(3)
            Scrivi "<font color=red size=3>CAMBIO STEP RID in -3"
            Scrivi "adesso step riduzionale è : " & Stepriduzionalevoluto
            If FileEsistente(filestepriduzionaledinamico) Then
               Call EliminaFile(filestepriduzionaledinamico)
            End If
            ScriviFile filestepriduzionaledinamico,Stepriduzionalevoluto
            CloseFileHandle(filestepriduzionaledinamico)
            Call LeggiRigheFileDiTesto(filestepriduzionaledinamico,ariga)
         Case 3
            Scrivi "Al termine step riduzionale è : " & Stepriduzionalevoluto
            Exit For
         End Select
      End If
      '--------------- fine controllo x interrompere elaborazione o meno...
      'prima di analizzare la nuova classe riazzeriamo tutto...
      Dim xnuovaclassebase
      Call SplitByChar(Formazionesceltasolonumeri,".",xnuovaclassebase)
      nClasse = UBound(xnuovaclassebase)
      freqmassima = 0
      giustovalorenumfqmaxuguali = 0
      Formazioneconfqmassima = ""
      Formazionesceltasolonumeri = ""
      Call LeggiRigheFileDiTesto(filestepriduzionaledinamico,ariga)
   Next ' x nclassedinamica
   ' End If ' varstop
End Sub

Grazie infinite a chi mi aiuta ad automatizzare questo script n.32 👌👍👋🙃😜🧑‍🍳
Tom, ho letto quanto riporti qui, ho cercato di capirne la logica e l'unico punto che non capisco perfettamente ma che potrebbe influenzare decisamente il risultato potrebbe essere in queste blocco select/end select

Select Case(Stepriduzionalevoluto)
Case 1
Stepriduzionalevoluto = Int(2)

Tu testi il valore di StepRiduzionaleVoluto e poi una volta che questo test e' vero perche' vale 1, gli attribuisce il valore 2...
Quindi al prossimo giro StepRiduzionaleVoluto non sara' mai 1 prima di approcciarsi a entrare e passare dalle forche caudine del Select

Ragionaci un po' e controlla se la mia interpretazione e' corretta. Non posso riprodurre l'errore e nemmeno eseguire lo script, quindi devi vedere se questo che ti indico puo' avere senso...
 
Ultima modifica:
Mi viene in mente di fare un do while nclasse > nclasse volut
Redim anum(nclasse)
Init sviluppo integrale(anum, nclasse)
Do while getcombsviluppo (anumredim atemp( nclasse)
Atemp?= stringanumeri
Statistica atemp
Loop
In Base al filtro Carico temp In anum
Nclasse=nclasse-1 oppure 2



Loop
Io proveri a fare così
Ma a me sto script non funzionava.
Ricordi che me l avevi già postato?

Bho forse una sua versione passata può essere..
Hai provato se gira sul nuovo software?

Tween basic intendi? No... e non saprei nemmeno da che parte iniziare...

Oggi provo ad installarlo, e se va tutto bene "provo" a farne un altro.

Ok

Questo per me è troppo complesso.

Ok

Ma non è facile.
Tempo fa avevo provato a farlo per me che mi serviva , ma non avevo cavato un ragno dal buco.:(

Se provi quello in tom's bakery n.32 + manuale... nel senso che devi appunto cambiare i valori dello step riduzionale a mano... funzia.
Questo è appunto un tentativo di automatizzarne tutto il processo riduzionale variando lo step da 1 a 3 a seconda che incontri o meno casi multipli di frequenza massima...

Grazie x ora per le dritte sopra comunque! 👋😉
 
Tom, ho letto quanto riporti qui, ho cercato di capirne la logica e l'unico punto che non capisco perfettamente ma che potrebbe influenzare decisamente il risultato potrebbe essere in queste blocco select/end select

Select Case(Stepriduzionalevoluto)
Case 1
Stepriduzionalevoluto = Int(2)

Tu testi il valore di StepRiduzionaleVoluto e poi una volta che questo test e' vero perche' vale 1, gli attribuisce il valore 2...
Quindi al prossimo giro StepRiduzionaleVoluto non sara' mai 1 prima di approcciarsi a entrare e passare dalle forche caudine del Select

Ragionaci un po' e controlla se la mia interpretazione e' corretta. Non posso riprodurre l'errore e nemmeno eseguire lo script, quindi devi vedere se questo che ti indico puo' avere senso...

Si ma il cambio lo deve fare se appunto incontra casi con + di una risultanza con la stessa frequenza massima...

Codice:
  If giustovalorenumfqmaxuguali > 0 Then

ma forse non ho capito il tuo alert...

🤔
 
Si ma il cambio lo deve fare se appunto incontra casi con + di una risultanza con la stessa frequenza massima...

Codice:
  If giustovalorenumfqmaxuguali > 0 Then

ma forse non ho capito il tuo alert...

🤔
e allora non deve essere posto a 2 ma al valore +1 che aveva prima. Quindi deve essere una variabile

Case 1
Stepriduzionalevoluto = Int(VariabileIncrementata)


e questa if cambia la sua struttura

If giustovalorenumfqmaxuguali > 0 Then ' Exit For
Exit for
else
VariabileIncrementata=VariabileIncrementata+ 1 (oppure -1 se va decrementata)
end if


Controlla se la logica della variazione risponde a quello che volevi fare altrimenti spiega con qualche dettaglio ulteriore.
VariabileIncrementata e' un nome che inventato io, spero di essere stato utile
 
Ultima modifica:
e allora non deve essere posto a 2 ma al valore +1 che aveva prima. Quindi deve essere una variabile

Case 1
Stepriduzionalevoluto = Int(VariabileIncrementata)

VariabileIncrementata e' un nome che inventato io, spero di essere stato utile

Rookie ho provato anche a sostituirlo come hai detto ma niente...

purtroppo la nclassedinamica non si aggiorna correttamente riducendosi del giusto valore dello step dinamico voluto...

Quantita numeri : 86
Classe dinamica : 85 << qui dovrebbe essere 84 perchè lo step dinamico è cambiato in 2 invece come si vede è diminuito solo di 1 punto...
Combinazioni integrali : 86
Step riduzionale dinamico : -2

Grazie comunque :)
 
Rookie ho provato anche a sostituirlo come hai detto ma niente...

purtroppo la nclassedinamica non si aggiorna correttamente riducendosi del giusto valore dello step dinamico voluto...

Quantita numeri : 86
Classe dinamica : 85 << qui dovrebbe essere 84 perchè lo step dinamico è cambiato in 2 invece come si vede è diminuito solo di 1 punto...
Combinazioni integrali : 86
Step riduzionale dinamico : -2

Grazie comunque :)
Tu non devi modificare la classe, devi continuare a scorrere dentro il ciclo per cercare ulteriori combinazioni... guarda la if che ti ho modificato. Sempre se e' corretta la mia interpretazione della logica del tuo script
 
Ultima modifica:
Tu non devi modificare la classe, devi continuare a scorrere dentro il ciclo per cercare ulteriori combinazioni... guarda la if che ti ho modificato. Sempre se e' corretta la mia interpretazione della logica del tuo script
Hoprova

Devo fare esattamente l'opposto... ovvero quando...

giustovalorenumfqmaxuguali > 0

devo incrementare il valore dello step riduzionale da 1 a 2 o da 2 a 3

altrimenti lo step riduzionale deve rimanere il medesimo...
 
In pratica tom parte da una classe inferiore di uno o due numeri rispetto alla quantità dei numeri da combinare.
In Base ai suoi filtri ne sceglie una
Che continuerà a combinare in una classe inferiore di 2 rispetto alla lunghetta numeri, sino ad arrivare ad una classe di elementi voluti.
 
Devo fare esattamente l'opposto... ovvero quando...

giustovalorenumfqmaxuguali > 0

devo incrementare il valore dello step riduzionale da 1 a 2 o da 2 a 3

altrimenti lo step riduzionale deve rimanere il medesimo...
Aggiusta la if con questa logica, opera l'incremento quando la if e' vera ed esci dal ciclo quando e' falsa
 
In pratica tom parte da una classe inferiore di uno o due numeri rispetto alla quantità dei numeri da combinare.
In Base ai suoi filtri ne sceglie una
Che continuerà a combinare in una classe inferiore di 2 rispetto alla lunghetta numeri, sino ad arrivare ad una classe di elementi voluti.

esatto ilegend, il problema è che non cambia la classe rispettivamente al valore di diminuizione dinamicamente impostato
 
Partenza
Combinazioni(90,88)
Faccio la statistica prendo quella migliore
Nuova combinazione(88,86)

Il problema con lunghette così grandi che si avranno più combinazioni con medesime presenze o ritardi , pertanto bisognerebbe arrivare a 1
Oppure
Sviluppare ogni lunghetta ottenuta
Ad esmpio 5 lunghette nello step
quindi fare un altro sviluppo sino ad ottenere il risultato migliore.
MS i tempi diventano più lunghi

Ho capito cosa vuoi perché avevo fatto lo stesso ragionamento.
 
Partenza
Combinazioni(90,88)
Faccio la statistica prendo quella migliore
Nuova combinazione(88,86)

Il problema con lunghette così grandi che si avranno più combinazioni con medesime presenze o ritardi , pertanto bisognerebbe arrivare a 1
Oppure
Sviluppare ogni lunghetta ottenuta
Ad esmpio 5 lunghette nello step
quindi fare un altro sviluppo sino ad ottenere il risultato migliore.
MS i tempi diventano più lunghi

Ho capito cosa vuoi perché avevo fatto lo stesso ragionamento.
Fate una descrizione di quello che volete ottenere, in pseudo codice, come per descrivere in un diario cosa state facendo manualmente, con tutte le possibili opzioni, e sopratutto le condizioni di uscita, e poi quando tutto e' chiaro, provate ad aggiustare il codice...
 
Fate una descrizione di quello che volete ottenere, in pseudo codice, come per descrivere in un diario cosa state facendo manualmente, con tutte le possibili opzioni, e sopratutto le condizioni di uscita, e poi quando tutto e' chiaro, provate ad aggiustare il codice...

Questa è più prosa.. che uno pseudo codice ma spero sia sufficiente comunque a far capire la logica riduzionale del mio script, che ho condiviso nella tom's bakery (n.32) e che vorrei automatizzare ancora di + rispetto a quanto fa già adesso cari Rookie e Ilegend :)


Mettiamo di avere un gruppo base di 60 elementi per semplicità...

parte lo script...

grazie alla formula "matemagika" sappiamo che fino a step 3 si potranno produrre meno di 1 milione di formazioni integrali...

quindi iniziamo ad esempio da step 1 sviluppando tutte le 60 59ine x la sorte di ricerca voluta (es. ambo)

bene...

mettiamo che lo script rilevi la presenza di una sola 59ina con fq max unica

bene...

ripartiremo da quella classe 59 e continueremo a sottrarre solo 1 punto dalla stessa mantenendo cio' lo step riduzionale
al settaggio iniziale ossia in questo esempio a 1

quindi avremo sempre grazie alla formulina...

solo...

59 58ine da analizzare...

se al passaggio successivo però si incontrasse + di una formazione con fq max identica... lo script deve "SOSPENDERE" l'elaborazione...
o per meglio dire "DOVRA' PROVARE A CAMBIARE LO STEP RIDUZIONALE passando da 1 a 2" e rifacendo lo stesso tipo di analisi...

se con questo step e le conseguenti 2000 e passa formazioni si troverà una sola formazione con fq max unica...

bene...

ripartiremo da quella classe 59-2= 57 e continueremo a sottrarre solo 2 punti dalla stessa mantenendo cio' lo step riduzionale
al settaggio iniziale + 1 punto ossia in questo esempio a 2

se al passaggio successivo però si incontrasse + di una formazione con fq max identica... lo script deve "SOSPENDERE" l'elaborazione...
o per meglio dire "DOVRA' PROVARE A CAMBIARE LO STEP RIDUZIONALE passando da 2 a 3" e a rifare lo stesso tipo di analisi...

se con questo step e le conseguenti 100.000 e passa formazioni si troverà una sola formazione con fq max unica...

bene...

ripartiremo da quella classe 57-3= 54 e continueremo a sottrarre solo 3 punti dalla stessa mantenendo cio' lo step riduzionale
al settaggio iniziale + 2 punti ossia in questo esempio a 3

se al passaggio successivo però si incontrasse + di una formazione con fq max identica... lo script deve "TERMINARE" l'elaborazione...
in quanto sempre per la formulina "matemagika" si andrebbe incontro molto probabilmente a milioni di formazioni integrali difficili
da gestire almeno per quanto riguarda il tempo necessario a svilupparle e analizzarle...

il top del top poi sarebbe cambiare nella medesima maniera, in modo del tutto automatico, anche le sorti da C a E ad esempio 🤖

Lo scopo in sostanza... sarebbe quello di cercare in via del tutto automatica (cosa che invece al momento faccio in modo semi automatico) le risultanze uniche per fq max (in questo caso) testando vari MIX tra step riduzionali (da 1 a 3) e sorti (da cinquina a estratto) riducendo sempre +, in modo del tutto automatico, il gruppo base iniziale fino alla classe finale + ridotta possibile...

[fine]

:)
 
Ultima modifica:
Questa è più prosa.. che uno pseudo codice ma spero sia sufficiente comunque a far capire la logica riduzionale del mio script, che ho condiviso nella tom's bakery (n.32) e che vorrei automatizzare ancora di + rispetto a quanto fa già adesso cari Rookie e Ilegend :)


Mettiamo di avere un gruppo base di 60 elementi per semplicità...

parte lo script...

grazie alla formula "matemagika" sappiamo che fino a step 3 si potranno produrre meno di 1 milione di formazioni integrali...

quindi iniziamo ad esempio da step 1 sviluppando tutte le 60 59ine x la sorte di ricerca voluta (es. ambo)

bene...

mettiamo che lo script rilevi la presenza di una sola 59ina con fq max unica

bene...

ripartiremo da quella classe 59 e continueremo a sottrarre solo 1 punto dalla stessa mantenendo cio' lo step riduzionale
al settaggio iniziale ossia in questo esempio a 1

quindi avremo sempre grazie alla formulina...

solo...

59 58ine da analizzare...

se al passaggio successivo però si incontrasse + di una formazione con fq max identica... lo script deve "SOSPENDERE" l'elaborazione...
o per meglio dire "DOVRA' PROVARE A CAMBIARE LO STEP RIDUZIONALE passando da 1 a 2" e rifacendo lo stesso tipo di analisi...

se con questo step e le conseguenti 2000 e passa formazioni si troverà una sola formazione con fq max unica...

bene...

ripartiremo da quella classe 59-2= 57 e continueremo a sottrarre solo 2 punti dalla stessa mantenendo cio' lo step riduzionale
al settaggio iniziale + 1 punto ossia in questo esempio a 2

se al passaggio successivo però si incontrasse + di una formazione con fq max identica... lo script deve "SOSPENDERE" l'elaborazione...
o per meglio dire "DOVRA' PROVARE A CAMBIARE LO STEP RIDUZIONALE passando da 2 a 3" e a rifare lo stesso tipo di analisi...

se con questo step e le conseguenti 100.000 e passa formazioni si troverà una sola formazione con fq max unica...

bene...

ripartiremo da quella classe 57-3= 54 e continueremo a sottrarre solo 3 punti dalla stessa mantenendo cio' lo step riduzionale
al settaggio iniziale + 2 punti ossia in questo esempio a 3

se al passaggio successivo però si incontrasse + di una formazione con fq max identica... lo script deve "TERMINARE" l'elaborazione...
in quanto sempre per la formulina "matemagika" si andrebbe incontro molto probabilmente a milioni di formazioni integrali difficili
da gestire almeno per quanto riguarda il tempo necessario a svilupparle e analizzarle...

il top del top poi sarebbe cambiare nella medesima maniera, in modo del tutto automatico, anche le sorti da C a E ad esempio 🤖

Lo scopo in sostanza... sarebbe quello di cercare in via del tutto automatica (cosa che invece al momento faccio in modo semi automatico) le risultanze uniche per fq max (in questo caso) testando vari MIX tra step riduzionali (da 1 a 3) e sorti (da cinquina a estratto) riducendo sempre +, in modo del tutto automatico, il gruppo base iniziale fino alla classe finale + ridotta possibile...

[fine]

:)
Viediamo se ancora interpreto bene almeno la prosa... qui e' uno schema che dovrebbe ricalcare la tua procedura ma va affinato per essere definitivo e quello lo devi limare tu...
Fammi sapere se ci siamo o ancora manca qualche dettaglio

PerTom.png
 
Ultima modifica:
Questa è più prosa.. che uno pseudo codice ma spero sia sufficiente comunque a far capire la logica riduzionale del mio script, che ho condiviso nella tom's bakery (n.32) e che vorrei automatizzare ancora di + rispetto a quanto fa già adesso cari Rookie e Ilegend :)


Mettiamo di avere un gruppo base di 60 elementi per semplicità...

parte lo script...

grazie alla formula "matemagika" sappiamo che fino a step 3 si potranno produrre meno di 1 milione di formazioni integrali...

quindi iniziamo ad esempio da step 1 sviluppando tutte le 60 59ine x la sorte di ricerca voluta (es. ambo)

bene...

mettiamo che lo script rilevi la presenza di una sola 59ina con fq max unica

bene...

ripartiremo da quella classe 59 e continueremo a sottrarre solo 1 punto dalla stessa mantenendo cio' lo step riduzionale
al settaggio iniziale ossia in questo esempio a 1

quindi avremo sempre grazie alla formulina...

solo...

59 58ine da analizzare...

se al passaggio successivo però si incontrasse + di una formazione con fq max identica... lo script deve "SOSPENDERE" l'elaborazione...
o per meglio dire "DOVRA' PROVARE A CAMBIARE LO STEP RIDUZIONALE passando da 1 a 2" e rifacendo lo stesso tipo di analisi...

se con questo step e le conseguenti 2000 e passa formazioni si troverà una sola formazione con fq max unica...

bene...

ripartiremo da quella classe 59-2= 57 e continueremo a sottrarre solo 2 punti dalla stessa mantenendo cio' lo step riduzionale
al settaggio iniziale + 1 punto ossia in questo esempio a 2

se al passaggio successivo però si incontrasse + di una formazione con fq max identica... lo script deve "SOSPENDERE" l'elaborazione...
o per meglio dire "DOVRA' PROVARE A CAMBIARE LO STEP RIDUZIONALE passando da 2 a 3" e a rifare lo stesso tipo di analisi...

se con questo step e le conseguenti 100.000 e passa formazioni si troverà una sola formazione con fq max unica...

bene...

ripartiremo da quella classe 57-3= 54 e continueremo a sottrarre solo 3 punti dalla stessa mantenendo cio' lo step riduzionale
al settaggio iniziale + 2 punti ossia in questo esempio a 3

se al passaggio successivo però si incontrasse + di una formazione con fq max identica... lo script deve "TERMINARE" l'elaborazione...
in quanto sempre per la formulina "matemagika" si andrebbe incontro molto probabilmente a milioni di formazioni integrali difficili
da gestire almeno per quanto riguarda il tempo necessario a svilupparle e analizzarle...

il top del top poi sarebbe cambiare nella medesima maniera, in modo del tutto automatico, anche le sorti da C a E ad esempio 🤖

Lo scopo in sostanza... sarebbe quello di cercare in via del tutto automatica (cosa che invece al momento faccio in modo semi automatico) le risultanze uniche per fq max (in questo caso) testando vari MIX tra step riduzionali (da 1 a 3) e sorti (da cinquina a estratto) riducendo sempre +, in modo del tutto automatico, il gruppo base iniziale fino alla classe finale + ridotta possibile...

[fine]

:)
Aggiungo, devi modularizzare le varie operazioni altrimenti torni al tempo dello Spaghetti Code dove si finisce per non potersi districare nei grovigli del codice, per questo (mi sembra sia il teorema di Jacopini-Bohm, per la strutturazione del codice) ci sono le sub e le function. Ogni blocco deve eseguire un compito e stop. Se un blocco e' promiscuo non ti raccapezzi senza struggimenti.
 
Ultima modifica:
Viediamo se ancora interpreto bene almeno la prosa... qui e' uno schema che dovrebbe ricalcare la tua procedura ma va affinato per essere definitivo e quello lo devi limare tu...
Fammi sapere se ci siamo o ancora manca qualche dettaglio

Vedi l'allegato 2252114

non è che la frequenza ottimale selezionata dal filtro debba essere 1 coe si evince dal tuo diagramma di flusso...
il filtro ricava tra le formazioni generate di volta in volta in modo integrale ma di numero comunque contenuto perchè mai di classe minore di oltre tre punti rispetto la precedente... la formazione con fq max unica... se questa risultanza è unica prosegue con lo step riduzionale impostato altrimenti se trova 2 o più risultanze con lo stesso valore di frequenza massima deve aumentare di 1 lo step di riduzione passando quindi da 1 a 2 o da 2 a 3.

👋:)
 
non è che la frequenza ottimale selezionata dal filtro debba essere 1 coe si evince dal tuo diagramma di flusso...
il filtro ricava tra le formazioni generate di volta in volta in modo integrale ma di numero comunque contenuto perchè mai di classe minore di oltre tre punti rispetto la precedente... la formazione con fq max unica... se questa risultanza è unica prosegue con lo step riduzionale impostato altrimenti se trova 2 o più risultanze con lo stesso valore di frequenza massima deve aumentare di 1 lo step di riduzione passando quindi da 1 a 2 o da 2 a 3.

👋:)
Chiaro, stampa lo schema e aggiustalo. Vedrai che i tasselli cominciano a essere piu' definiti e scoprirai cosa MANCA al tuo codice.Mi e' chiaro che per frq=1 significa che fra tutte le 60 59ine ne dobbiamo avere 1 sola, altrimenti tutte queste vanno scartate, e bisogna passare a un gruppo piu' ristretto, ma dal tuo codice non appare chiaro...questo aspetto...non si evince inequivocabilmente.
 
Buongiorno Tom,
sto cercando mentalmente di entrare nel tuo codice e per mentalizzare cosa non va nel verso giusto da te perseguito, ho dovuto smontarlo e rimontarlo in un codice che NON e' eseguibile dal tuo ambiente, ma credo possa aiutare a capire quali parti devono essere controllate, aggiungendo le modifiche correttive che ancora non ho trovato.
Come puoi vedere ho fatto una dicotomia del tuo codice, suddividendolo in MAIN Block operations e FUNCTIONS and SUB Block, queste ultime isolate dal main loop, che e' un frullatore alle quali bisogna trovare il busillis...
Ho eliminato le parti codice afferenti al codice di formattazione. Evidenziando i commenti e le CALL
Una cosa che e' da rivedere e' la condizione di uscita dal loop principale che deve essere testata parecchie volte per farlo uscire da questo loop
Spero di riuscire a entrare completamente nella logica del tuo script...
Frattanto ti auguro Buon Sabato per tutto


'===============================================================================================================================
' MAIN Block OPERATIONS ---------------------------------------------------------------------------

FOR nClassedinamica = nClasse TO nClassefinale STEP - INT(Trim(ariga(0)))
CALL LeggiRigheFileDiTesto(filestepriduzionaledinamico,ariga)
'--- leggo il file filediraccolta
DIM anum
DIM y
DIM c
CALL Messaggio("Lettura file di testo")
REDIM aRighe(0)

'---------------------------------------------------------
CALL LeggiRigheFileDiTesto(filediraccolta,aRighe)

FOR y = 0 TO UBOUND(aRighe)
IF aRighe <> "" THEN
'-------------------------------------------------
CALL SplitByChar("." & aRighe & ".",".",anum)
END IF
DIM anumint
REDIM anumint(UBOUND(anum) - 1)
FOR c = 1 TO UBOUND(anum) - 1
anumint(c) = INT(anum(c))
IF ScriptInterrotto THEN EXIT FOR
NEXT
'
IF ScriptInterrotto THEN EXIT FOR

NEXT

DIM varStop
nCombInt = cSvil.InitSviluppo(anumint,nClassedinamica)


IF nCombInt THEN
nQNumeri = cSvil.GetQuantitaNumeriDaSvil

Scrivi cSvil.GetStringaNumDaSvil
Scrivi "Quantita numeri : " & nQNumeri
Scrivi "Classe dinamica : " & nClassedinamica
Scrivi "Combinazioni integrali : " & nCombInt
Scrivi "Step riduzionale dinamico : " & - INT(ariga(0)) 'Stepriduzionalevoluto

cSvil.OutputARighe



DO WHILE cSvil.GetComb(aColonna)
CALL StatisticaFormazioneTurbo(aColonna,aruote,nSorte,RetRit1,RetRitMax,RetIncrRitMax,RetFreq,Inizio,fine)
contacomb = contacomb + 1
Stringaoutput = StringaNumeri(aColonna) & " - " & StringaRuote(aruote) & " -s " & nSorte & " -ra " & RetRit1 & " -rs " & RetRitMax & " -incmax " & RetIncrRitMax & " -freq " & RetFreq & " -inizio " & Inizio & " -fine " & fine
IF RetFreq > freqmassima THEN
freqmassima = RetFreq
Formazioneconfqmassima = "<font color=red>" & Stringaoutput
Formazionesceltasolonumeri = StringaNumeri(aColonna)
numfqmaxuguali = 0
END IF
IF RetFreq = freqmassima THEN
numfqmaxuguali = numfqmaxuguali + 1
END IF
Messaggio cSvil.GetQuantitaSviluppate & " r " & StringaRuote(aruote) & " ncd " & nClassedinamica & " step rid " & Stepriduzionalevoluto
IF ScriptInterrotto THEN EXIT DO
CALL AvanzamentoElab(1,nCombInt,contacomb)
LOOP
Scrivi "Sviluppate : " & cSvil.GetQuantitaSviluppate
ELSE
MsgBox "Impossibile sviluppare",vbCritical
EXIT FOR
END IF

Scrivi "report finale"
Scrivi "formazione con fq massima " & Formazioneconfqmassima

DIM giustovalorenumfqmaxuguali
giustovalorenumfqmaxuguali = numfqmaxuguali - 1

Scrivi "num. fq max uguali " & numfqmaxuguali - 1
Scrivi "formazione scelta (solo numeri) " & Formazionesceltasolonumeri
Scrivi "Tt " & TempoTrascorso

IF Formazioneconfqmassima <> "" AND numfqmaxuguali - 1 = 0 THEN
IF FileEsistente(filediraccolta) THEN
'--------------------------------
CALL EliminaFile(filediraccolta)
END IF
ScriviFile filediraccolta,Formazionesceltasolonumeri
CloseFileHandle(filediraccolta)
ELSE
STOP
END IF


IF giustovalorenumfqmaxuguali > 0 THEN ' Exit For
SELECT CASE(Stepriduzionalevoluto)
CASE 1
Stepriduzionalevoluto = INT(2)
IF FileEsistente(filestepriduzionaledinamico) THEN
'----------------------------------------------
CALL EliminaFile(filestepriduzionaledinamico)
END IF
ScriviFile filestepriduzionaledinamico,Stepriduzionalevoluto
CloseFileHandle(filestepriduzionaledinamico)

'-------------------------------------------------------------
CALL LeggiRigheFileDiTesto(filestepriduzionaledinamico,ariga)
CASE 2
Stepriduzionalevoluto = INT(3)
IF FileEsistente(filestepriduzionaledinamico) THEN
'---------------------------------------------
CALL EliminaFile(filestepriduzionaledinamico)
END IF
ScriviFile filestepriduzionaledinamico,Stepriduzionalevoluto
CloseFileHandle(filestepriduzionaledinamico)
'------------------------------------------------------------
CALL LeggiRigheFileDiTesto(filestepriduzionaledinamico,ariga)
CASE 3
Scrivi "Al termine step riduzionale è : " & Stepriduzionalevoluto
EXIT FOR
END SELECT
END IF

'--------------- fine controllo x interrompere elaborazione o meno...
'--- prima di analizzare la nuova classe riazzeriamo tutto...

DIM xnuovaclassebase
'-----------------------------------------------------------------
CALL SplitByChar(Formazionesceltasolonumeri,".",xnuovaclassebase)

nClasse = UBOUND(xnuovaclassebase)
freqmassima = 0
giustovalorenumfqmaxuguali = 0
Formazioneconfqmassima = ""
Formazionesceltasolonumeri = ""
'-------------------------------------------------------------
CALL LeggiRigheFileDiTesto(filestepriduzionaledinamico,ariga)

NEXT ' x nclassedinamica
' End If ' varstop

'----- END MAIN Block --------------------------------------------------------------------
'===============================================================================================================================


=================================
'--------------------------------------
'---- Functions and SUB block code
'--------------------------------------
'=================================

'-------------------------------------------
InitSviluppo(aNumeri,Classe)
'-------------------------------------------
nQNumeri = AlimentArrayNumDaSvil(aNumeri)
nCombInt = Combinazioni(nQNumeri,Classe)
nClasse = Classe
nSviluppate = 0
IF nCombInt > 0 THEN
CALL AlimentaArrayRighe
CALL InitArrayPuntatore
END IF
InitSviluppo = nCombInt
END FUNCTION

'-------------------------------------------
FUNCTION GetQuantitaNumeriDaSvil
'-------------------------------------------
GetQuantitaNumeriDaSvil = nQNumeri
END FUNCTION


'-------------------------------------------
FUNCTION GetStringaNumDaSvil
'-------------------------------------------
DIM s,k
s = ""
FOR k = 1 TO UBOUND(aBNumDaSvil)
IF aBNumDaSvil(k) THEN
s = s & Format2(k) & "."
END IF
NEXT
GetStringaNumDaSvil = RimuoviLastChr(s,".")
END FUNCTION

'-------------------------------------------
SUB InitArrayPuntatore
'-------------------------------------------
DIM k
REDIM aPuntatore(nClasse)
FOR k = 1 TO nClasse - 1
aPuntatore(k) = 1
NEXT
aPuntatore(k) = 0
END SUB

'-------------------------------------------
FUNCTION GetComb(aComb)
'-------------------------------------------
DIM nTmp,K,nPuntatore
nPuntatore = nClasse
nTmp = aPuntatore(nPuntatore) + 1
DO WHILE nTmp > nQNumPerRiga
nPuntatore = nPuntatore - 1
IF nPuntatore <= 0 THEN EXIT DO
nTmp = aPuntatore(nPuntatore) + 1
LOOP
IF nPuntatore > 0 THEN
FOR K = nPuntatore TO nClasse
aPuntatore(K) = nTmp
NEXT
REDIM aComb(nClasse)
FOR K = 1 TO nClasse
aComb(K) = aRighe(K,aPuntatore(K))
NEXT
nSviluppate = nSviluppate + 1
GetComb = True
ELSE
GetComb = False
END IF
END FUNCTION

'-------------------------------------------
FUNCTION GetQuantitaSviluppate
'-------------------------------------------
GetQuantitaSviluppate = nSviluppate
END FUNCTION

'---------------------------------------------------
FUNCTION AlimentArrayNumDaSvil(aNumeri)
'---------------------------------------------------
DIM k,q
aBNumDaSvil = ArrayNumeriToBool(aNumeri)
FOR k = 1 TO 90
IF aBNumDaSvil(k) THEN
q = q + 1
END IF
NEXT
AlimentArrayNumDaSvil = q
END FUNCTION

'-------------------------------------------
SUB AlimentaArrayRighe
'-------------------------------------------
DIM nRiga,k,aNumeri
CALL ArrayBNumToArrayNum(aBNumDaSvil,aNumeri)
nQNumPerRiga =(nQNumeri - nClasse) + 1
REDIM aRighe(nClasse,nQNumPerRiga)
FOR nRiga = 1 TO nClasse
FOR k = nRiga TO(nRiga + nQNumPerRiga) - 1 '(nQNumeri - nClasse) + nRiga
aRighe(nRiga,(k - nRiga) + 1) = aNumeri(k)
NEXT
NEXT
END SUB

'-------------------------------------------
SUB OutputARighe
'-------------------------------------------
DIM k,j,s
FOR k = 1 TO nClasse
s = ""
FOR j = 1 TO nQNumPerRiga
s = s & Format2(aRighe(k,j)) & "."
NEXT
NEXT
END SUB
 

Ultima estrazione Lotto

  • Estrazione del lotto
    sabato 23 novembre 2024
    Bari
    33
    80
    86
    52
    25
    Cagliari
    67
    57
    59
    05
    80
    Firenze
    31
    32
    58
    88
    77
    Genova
    40
    39
    23
    36
    81
    Milano
    28
    58
    45
    25
    38
    Napoli
    20
    82
    23
    44
    57
    Palermo
    76
    56
    88
    62
    31
    Roma
    12
    81
    59
    74
    72
    Torino
    46
    53
    72
    45
    23
    Venezia
    04
    12
    42
    64
    20
    Nazionale
    63
    44
    78
    10
    55
    Estrazione Simbolotto
    Torino
    43
    42
    12
    39
    22

Ultimi Messaggi

Indietro
Alto