Novità

Si potrebbe realizzare uno script Tabbellare come di seguito ? atto terzo

Per me la cosa più importante è scrivere e utilizzare le funzioni in modo corretto,
inserire i cicli nella parte corretta del codice, ad esempio dove è più conveniente inserire messaggio e avanzamento elab? ed inoltre
scrripInterrotto perchè funzioni?
dovrebbe essere
if scriptInterrotto then exit for all'interno di un ciclo for
exit do all' interno di un ciclo do while o until
non fare come nel primo script le funzioni una ad una quando si puo fare un ciclo for...

provo a risponderti una richiesta per volta
qui va bene per ogni ciclo che vuoi interrompere che sia ciclo for o while o until ed esci dal ciclo impostato.

Insomma ho bisogno del vostro aiuto per imparare a scrivere correttamente ed elegantemente
e vi ringrazio moltissimo per l'aiuto che mi state dando
Grazie mille amici:-)

Una cosa per volta ci si arriva e soprattutto con tanto allenamento.


Per il discendente e ascendente è vero la riga di intestazione titoli va in basso se lo usi ma puoi ovviare scrivendo la riga dei titoli con addrigatabella(atitoli,,....) prima di creatabella.

per ora non mi vengono in mente altri suggerimenti, ma se c'è bisogno per quello che posso volentieri.

P.S. sarebbero da approfondire i calcoli disceb e scaceb non li ho ancora compresi e chiedo che valenza possono avere ai fini di un imminenza del futuro estraendo.

Ciao ci aggiorniamo a più tardi.
 
Ciao Mike,grazie , ancora una volta i tuoi consigli mi sono risultati preziosissimi....
per quanto riguarda
limCeb : è la disuguaglianza di Cebjcev . E' una formula statistica matematica, non sono il primo ad usarla od ad applicarla al lotto o alla teoria dei giochi in generale...
se googli diseguaglianza di cebjcev avrai modo di leggere una spiegazione degna di questo nome:-)
in parole povere data la media e la deviazione standard di un evento
si può ipotizzare il range limite in cui si verificherà un nuovo caso .

media+3*devstd=88%

media+10*devstd=99%

l'unica pecca è che possiamo ipotizzare il ritardo massimo maa non quando avverrà, infatti esiste la ripetizione a colpo.....
Torna utile per le formazioni che hanno già un notevole ritardo per vedere se sono vicine
...

ScaCeb= è lo scarto tra il ritardo cronologico, e il limite ipotizzato, tanto è piu basso tanto è piu attendibile, anche se il limite di cebjcev puo essere superato e restituire numeri negativi....Essendo il lotto un gioco aleatorio è imprevedibile, questa è solo una cartuccia in più...
Vedete la figura della tabella postata in pag 2

Se hai altre domande chiedi pure Mike :-)
Versione light:-),solo MeseCorrente

Codice:
Option Explicit
Sub Main
    Dim Ini,Fin,nEstr,es,k,x,r,nValore,idOrd,TipOrd,Ctr
    Dim DevStd,disCeb,ScaCeb
    Dim s,e,ritardo,ritardomax,IncrRitMax,RitMed,RitMese
    Dim Frequenza,freqTeorica,FreqMese,freq,FreqTot,Scarto
    Dim nNumeri,aColonne
    Dim aNumeri(90)
    Dim aRu(1)
    Dim nCombinazione,nSorte,nCiclo
    ReDim aRetRitardi(0)
    ReDim aRetIdEstr(0)
    Ini = InizioArchivio ' funzione inizio data archivio
    Fin = EstrazioneFin
    Call ScegliNumeri(nNumeri)
    nCombinazione = ScegliCombinazione
    nSorte = CInt(SelEsito)
    If nCombinazione < nSorte Then MsgBox "hai inserito Un Valore errato riscrivi ": nSorte = CInt(SelEsito)
    r = SelRuota ' funziona per selezionare la ruota  statistica su tutte o solo per una ruota
    aRu(1) = r
    If r = 11 Then Ctr = 10: Else Ctr = 1 ' valore utilizzato per calcolo del ciclo teorico
    idOrd = Ordinamento ' seleziono la colonna che voglio ordinare
    TipOrd = TipoOrdinamento ' Crescente o decrescente
    'Imposto i titoli delle colonne della tabella statistica
    '
    ReDim aTitolo(12)
    aTitolo(1) = "ID" ' Numero di combinazione
    aTitolo(2) = "Comb." '  combinazioni ottenute
    aTitolo(3) = "Freq" ' frequenza
    aTitolo(4) = "Scarto" ' differenza tra freq.reale e frequenza teorica
    aTitolo(5) = "Rit" ' ritardo cronologico attuale
    aTitolo(6) = "RitMed" ' ritardo medio combunazione
    aTitolo(7) = "RitSto"
    aTitolo(8) = "IncR.S"
    aTitolo(9) = "DevStd"
    aTitolo(10) = "DisCeb"
    aTitolo(11) = "ScaCeb99%"
    aTitolo(12) = "mese " & Mese(EstrazioneFin) ' frequenza nel mese di...
    InitTabella aTitolo,RGB(108,194,243),,3,RGB(255,255,255),"Consolas"
    'conto le estrazioni utili
    nEstr = ContaEstrazioni(Ini,Fin,r)
    nValore = Round(CicloTeorico(nCombinazione,nSorte,CInt(Ctr)),2)' ctr= 1 (=1R);=10(=TT)
    freqTeorica = Round(Dividi(nEstr,nValore),2)
    aColonne = SviluppoIntegrale(nNumeri,nCombinazione) ' sviluppo i l'array dei numeri scelti ,nella combinazione scelta
    For k = 1 To UBound(aColonne) ' ciclo per leggere la colonna k della matrice aColonne
        s = "" ' dichiaro la stringa combinazione vuota
        Messaggio "Elaborazione in corso id sviluppo: " & k 
        AvanzamentoElab 1,UBound(aColonne),k
        If ScriptInterrotto Then Exit For
        For e = 1 To nCombinazione ' ciclo la combinazione selezionata
            s = s & Format2(aColonne(k,e)) & "." ' questa è la stringa di ritorno dei numeri combinati
            aNumeri(e) = aColonne(k,e) 'matrice dei numeri da analizzare
            Call StatisticaFormazioneTurbo(aNumeri,aRu,nSorte,ritardo,ritardomax,IncrRitMax,Frequenza,Ini,Fin)
            ' qui analizzo le frequenze con la funzione trova frequenze per mese
            Dim z
            ReDim nMese(12)
            FreqTot = 0
            For z = 1 To 12
                nMese(z) = TrovaFrequenzaMese(aNumeri,aRu,nSorte,Ini,Fin,z)
            Next
            For x = 1 To UBound(nMese)
                FreqTot = FreqTot + nMese(x)
            Next
            ' funzione per calcolare il ritardo globale della formazione
            ' questo è un espediente che ho dovuto analizzare visto la frequenza mese
            RitMese = TrovaRitardoMese(aNumeri,aRu,nSorte,Ini,Fin,"TUTTI")
            Scarto = Round(FreqTot - freqTeorica,2)
            ' richiamo la funzione elenca ritardi, per poter attingere alla marice che elenca i ritardi  voce:( aRetRitardi)
            Call ElencoRitardiTurbo(aNumeri,aRu,nSorte,Ini,Fin,aRetRitardi,aRetIdEstr)
            ' scritta funzione per calcolare il ritardo medio della formazione
            RitMed = RitardoMedio(aRetRitardi)
            ' scritta funzione per calcolo deviazione standard della funzione
            '
            DevStd = CalcolaDeviazioneStd(aRetRitardi)
            disCeb = Round(RitMed +(10*DevStd),2)
            ScaCeb = Round(disCeb - RitMese,2)
        Next
        s = Left(s,Len(s) - 1) ' tolgo l'ultimo punto dalla stringa della formazione altrimenti sarebbe es : "12.22.33." anzichè : "12.22.33"
        
        ReDim aRisultato(12)
        aRisultato(1) = k ' id
        aRisultato(2) = s ' combinazioni analizzate
        aRisultato(3) = FreqTot'frequenza combinazione
        aRisultato(4) = Scarto ' differenza freq.reeale e differenza teorica
        aRisultato(5) = RitMese ' ritardo cronologico
        aRisultato(6) = RitMed ' ritardo medio
        aRisultato(7) = ritardomax ' ritardo storico
        aRisultato(8) = IncrRitMax ' incremento ritardo storico
        aRisultato(9) = DevStd ' deviazione standard
        aRisultato(10) = disCeb 'disegualianza di cebicev
        aRisultato(11) = ScaCeb ' scarto tra valore ipotizzato e valore del ritardo reale
        aRisultato(12) = nMese(Mese(EstrazioneFin))'Gennaio ' frequenza per mese
        
        Call AddRigaTabella(aRisultato,,,3,RGB(0,0,0),"Consolas")
        'se decidessi di ordinare il mese? legge il primo colore? No Legge l'ultima istruzione
        Call SetColoreCella(CInt(idOrd),RGB(221,255,230),2)
        Call SetColoreCella(12,RGB(215,215,255),2)
        'Call SetColoreCella(Mese(EstrazioneFin) + 11,RGB(215,215,255),2)
    Next
    Scrivi FormatSpace("script By I Legend per lottoCed's amici",150,- 1)
    Scrivi
    Scrivi "Tabella Statistica per formazioni libere" & " ",1,,RGB(252,227,143),,5
    Scrivi
    Scrivi "Range Ricerca Estrazioni dal :{" & DataEstrazione(Ini) & " } al : {" & DataEstrazione(Fin) & "}",1,,,,3
    Scrivi "Estrazioni Totali Analizzati :{" & nEstr & "}",1,,,,3
    Scrivi "Numeri di ricerca            :{" & StringaNumeri(nNumeri) & "}",1,,,,3
    Scrivi "Sviluppo numeri in           :{" & k - 1 & " " & NomeCombinazione(nCombinazione) & "}",1,,,,3
    Scrivi "Analesi combinazione per     :{" & NomeSorte(nSorte) & "}",1,,,,3
    Scrivi "Ciclo Teorico                :{" & nValore & "}",1,,,,3
    Scrivi "Frequenza Teorica            :{" & freqTeorica & "}",1,,,,3
    Scrivi "Ruota di ricerca             :{" & NomeRuota(aRu(1)) & "}",1,,,,3
    Scrivi "Ordinamento colonna num      :{" & aTitolo(idOrd) & "}",1,,,,3
    Scrivi "Ordino Colonna in modo       :{" & TipOrd & "}",1,,,,3
    Scrivi
    Call SetTableWidth("75%")
    If TipOrd = 1 Then Call AddRigaTabella(aTitolo,RGB(108,194,243),,3,RGB(255,255,255),"Consolas")
    Call CreaTabella(idOrd,TipOrd,0)
    'If ScriptInterrotto Then Exit Sub
End Sub
' riporto qui di seguito tutte le funzioni utilizzate
' per la sub main
' ovviamente possono essere ottimizzate
Function TrovaFrequenzaMese(aNumeri,aRu,nSorte,Ini,fin,nMese)
    Dim k
    Dim FreqMese
    For k = Ini To fin
        If Mese(k) = nMese Then
            Call ImpostaEstrazione(k,True)
        Else
            Call ImpostaEstrazione(k,False)
        End If
    Next
    FreqMese = SerieFreqTurbo(Ini,fin,aNumeri,aRu,nSorte)
    TrovaFrequenzaMese = FreqMese
End Function
Function TrovaRitardoMese(aNumeri,aRu,nSorte,Ini,fin,nMese)
    Dim k
    Dim RitMese
    For k = Ini To fin
        If Mese(k) = nMese Then
            Call ImpostaEstrazione(k,True)
        Else
            Call ImpostaEstrazione(k,False)
        End If
    Next
    For k = Ini To fin
        If nMese = "TUTTI" Then Call ImpostaEstrazione(k,True)
    Next
    RitMese = SerieRitardoTurbo(Ini,fin,aNumeri,aRu,nSorte)
    TrovaRitardoMese = RitMese
End Function
Function NomeCombinazione(a)
    Dim ris
    Select Case a
    Case 1
        ris = "Estratti"
    Case 2
        ris = "Ambi"
    Case 3
        ris = "Terzine"
    Case 4
        ris = "Quartine"
    Case 5
        ris = "Cinquine"
    End Select
    NomeCombinazione = ris
End Function
Function Ordinamento
    Dim Ord
    ReDim aTitolo(10)
    aTitolo(1) = "Freq" ' frequenza
    aTitolo(2) = "Scarto" ' differenza tra freq.reale e frequenza teorica
    aTitolo(3) = "Rit" ' ritardo cronologico attuale
    aTitolo(4) = "RitMed" ' ritardo medio combunazione
    aTitolo(5) = "RitSto"
    aTitolo(6) = "IncR.S"
    aTitolo(7) = "DevStd"
    aTitolo(8) = "DisCeb"
    aTitolo(9) = "ScaCeb"
    aTitolo(10) = "mese " & Mese(EstrazioneFin)' frequenza nel mese di....
    
    
    
    
    Ord = ScegliOpzioneMenu(aTitolo,1,"Seleziona Ordinamento  per la colonna :") + 2
    Ordinamento = Ord
End Function
Function TipoOrdinamento
    Dim Ord
    ReDim atitolo(1)
    atitolo(0) = "DeCrescente"
    atitolo(1) = "Crescente"
    Ord = ScegliOpzioneMenu(atitolo,0,"Seleziona Tipo di Ordinamento  :")
    If Ord = 0 Then Ord = - 1 : Else Ord = 1
    TipoOrdinamento = Ord
End Function
Function ScegliCombinazione
    Dim combinazione
    ReDim aVoci(5)
    aVoci(1) = "Estratti"
    aVoci(2) = "Ambi"
    aVoci(3) = "Terzine"
    aVoci(4) = "Quartine"
    aVoci(5) = "Cinquine"
    combinazione = ScegliOpzioneMenu(aVoci,3," Combina i numeri In :")
    ScegliCombinazione = CInt(combinazione)
End Function
Function SelEsito
    Dim Esito
    ReDim aVoci(5)
    aVoci(1) = "Estratto"
    aVoci(2) = "Ambo"
    aVoci(3) = "Terno"
    aVoci(4) = "Quaterna"
    aVoci(5) = "Cinquina"
    Esito = ScegliOpzioneMenu(aVoci,2," Analesi per Sorte di : ")
    SelEsito = CInt(Esito)
End Function
Function SelRuota
    Dim Ruota
    ReDim aVoci(12)
    aVoci(1) = "BARI"
    aVoci(2) = "CAGLIARI"
    aVoci(3) = "FIRENZE"
    aVoci(4) = "GENOVA"
    aVoci(5) = "MILANO"
    aVoci(6) = "NAPOLI"
    aVoci(7) = "PALERMO"
    aVoci(8) = "ROMA"
    aVoci(9) = "TORINO"
    aVoci(10) = "VENEZIA"
    aVoci(11) = "TUTTE"
    aVoci(12) = "NAZIONALE"
    Ruota = ScegliOpzioneMenu(aVoci,1," Analizza Ruota di : ")
    SelRuota = CInt(Ruota)
End Function

Function InizioArchivio
    Dim es,Inizio
    ReDim aVoci(EstrazioneFin)
    For es = 3914 To EstrazioneFin
        aVoci(es) = DataEstrazione(es)
    Next
    Inizio = ScegliOpzioneMenu(aVoci,3914,"Inserisci Data Inizio Analisi")
    InizioArchivio = Inizio
End Function
Function RitardoMedio(aRitardi())
    Dim k
    Dim nElementi
    Dim nMedia
    For k = 1 To UBound(aRitardi) - 1
        nElementi = nElementi + 1
        nMedia = nMedia + aRitardi(k)
    Next
    nMedia = Round(Dividi(nMedia,nElementi),2)
    RitardoMedio = nMedia
End Function
Function CalcolaDeviazioneStd(aRitardi())
    Dim k
    Dim somRit,nMedia,nElementi,nVarianza,nSomSQVar
    For k = 1 To UBound(aRitardi) - 1
        nElementi = nElementi + 1
        somRit = somRit + aRitardi(k)
    Next
    nMedia = Round(Dividi(somRit,nElementi))
    For k = 1 To UBound(aRitardi) - 1
        nSomSQVar = nSomSQVar +((nMedia - aRitardi(k)) ^ 2)
        nVarianza = Round(Dividi(nSomSQVar,nElementi),2)
    Next
    CalcolaDeviazioneStd = Round(Sqr(nVarianza),2)
End Function
Function ContaEstrazioni(Ini,Fin,r)
    Dim Conta,es
    For es = Ini To Fin
        If SommaEstratti(es,r) >= 15 Then Conta = Conta + 1
    Next
    ContaEstrazioni = Conta
End Function

P.S:
Per Luigi:
Visto che ho ottimizzato la visualizzazione del codice nel post,:p
che ne dici di qualche suggerimento per l'ottimizzazione del codice?:)
Grazie a tutti!
 
Ciao Legend , anche io voglio farti i complimenti, direi quasi che ti sei mangiato
un libro di programmazione, in questi pochi giorni hai fatto dei passi da gigante
le tue esperienze nel basic e i consigli di Mike e Joe ti hanno aiutato ed hai imparato in fretta.



Finiti i complimenti veniamo a noi , visto che mi chiedi consigli ineffetti c'è anche qualcosa da vedere , alcune sono banalita
altre sono un po piu critiche e altre ancora invece ahime dipendono dal sottsocritto
c'è infatti un evidente errore da parte mia nella funzione che ordina la tabella che correggero il prima possibile,
grazie di avermelo fatto notare.


1) Mi sembra di aver capito che il tuo intento fosse anche la gestione dell'interazione dell'utente
con le sue possibili scelte , quindi su questo argomento il consiglio è quello
di non appesantire la procedura Main con tutta l'imissione dei dati e relativo controllo di coerenza
ma di usare anche qui una function apposita.
Infatti bisogna sempre facilitare la comprensione del codice quando lo si rilegge
e un metodo da applicare sempre è quelllo di scomporre il problema in sottoproblemi , quindi la parte
"immissione parametri" essendo una delle necessita del disegno principale è meglio trasformarla in un'apposita
function (specie se i parametri sono tanti) che ci restituirà false se la coerenza dei valori non è rispettata.
In questo modo potremo non eseguire il codice succesivo e informare l'utente.

Nel tuo script infatti premendo annulla nelle varie finestre interattive il codice proseguiva lo stesso, questo perche non
hai gestito il caso del pulsante annulla.
Nel caso l'utente prema ANNULLA quella funzione torna sempre - 1 .. va gestito.

Nelle modifiche che ho fatto al tuo codice noterai che per alimetare le righe di un array a valori fissi
invece di scrivere 10 righe si puo scrivere una riga sola usando l'istruzione Array ,la quale passandogli
gli opportuni valori ci farà tornare indietro un array , però attenzione gli array partono sempre da 0 percio quando
le necessita dell'algoritmo prevedono valori dall'indice 1 in poi bisogna ricordarsi di passare il primo elemento vuoto
cioè l'elemento per l'indice 0



2) le dichiarazioni delle variabili è meglio farle sempre in cima ala codice solo per una questione di paradigma
come si insegnava nel vecchio pascal nel quale mi pare fosse addirittura obbilgatorio ...
tu ad un certo punto dichiari un Dim Z in mezzo al codice .. se ti piace lo stile non sta bene , anche se ineffetti non da errore

3) dichiarare delle variabili solo ad uso dei cicli in modo da poterle riusare e ridurre cosi il numero di variabili totali
queste modifiche non le ho fatte per evitare di introdurre errori .
Tu ad un certo punto fai due cicli succcessivi con due variabili diverse ne potevi usare una sola,

4) Accorpare le operazioni dei cicli , come in questo caso che ho corretto e che si ricollega pure al punto 3
infatti fai due cicli anche se in realta ne potevi fare uno solo , facci attenzione perche rallenta parecchio.

Codice:
	For z = 1 To 12
		nMese(z) = TrovaFrequenzaMese(aNumeri,aRu,nSorte,Ini,Fin,z)
		FreqTot = FreqTot + nMese(z)
	Next
	' For x = 1 To UBound(nMese)
	'	FreqTot = FreqTot + nMese(x)
	' Next

5) questa è una banalita


Codice:
's = Left(s,Len(s) - 1)
s = RimuoviLastChr( s , ".")

6) Sempre per una questione di leggibilita del codice ma soprattutto per favorirne la comprensione del flusso
è necessario che la procedura MAin sia snella , meglio non valorizzare li dentro array da 10 elementi
ma fare ance qui un'apposita sub.

Codice:
		ReDim aRisultato(12)
		'aRisultato(1) = k ' id
'		aRisultato(2) = s ' combinazioni analizzate
'		aRisultato(3) = FreqTot'frequenza combinazione
'		aRisultato(4) = Scarto ' differenza freq.reeale e differenza teorica
'		aRisultato(5) = RitMese ' ritardo cronologico
'		aRisultato(6) = RitMed ' ritardo medio
'		aRisultato(7) = ritardomax ' ritardo storico
'		aRisultato(8) = IncrRitMax ' incremento ritardo storico
'		aRisultato(9) = DevStd ' deviazione standard
'		aRisultato(10) = disCeb 'disegualianza di cebicev
'		aRisultato(11) = ScaCeb ' scarto tra valore ipotizzato e valore del ritardo reale
'		aRisultato(12) = nMese(Mese(EstrazioneFin))'Gennaio ' frequenza per mese
		
		Call AlimetaArrayRisultato (aRisultato , k,s,FreqTot,Scarto ,RitMese ,RitMed ,ritardomax ,IncrRitMax ,DevStd ,disCeb ,ScaCeb ,nMese(Mese(EstrazioneFin)))

7) una cosa poco conosciuta riguardo al colorare el celel di una riga è che invece di usare
setColore cella si puo passare un array di nElementi quante sono le colonne , nel parametro colore
di AddRigaTabella e InitTabella , ogni elemento dell'array avra il suo colore che si rispecchiera nelle celle
in questo caso non ho fatto modifiche , pero te l'ho detto perche talvolta è utile

Codice:
	Dim aColori  
	Dim aV 
	
	aColori = Array ( 0,vbGreen , vbYellow , vbRed)
	aV  = Array ("" ,"Colonna A" ,"Colonna B" ,"Colonna C" )
	Call InitTabella ( aV , aColori)
	aV  = Array ("" ,"1" ,"2" ,"3" ) 
	Call AddRigaTabella ( aV , aColori)
	
	Call CreaTabella

8) Meglio non mettere valori hardcoded in mezzo alla routine del programma , sempre meglio usare
variabili dichiarate all'inixio per passarle alle sub che le rivhiedono.
Tu nella Sub InizioArchivio avevi un valore fisso di 3914 l'ho spostato all'inizio nella sub che ho creato
per gestire l'immissione dei parametri


Codice:
	ini = 3914
	If ImpostaParametri(nNumeri,nCombinazione,nSorte,Ctr,idOrd,TipOrd,aRu,r,Ini) = False Then
		MsgBox "Parametri non corretti",vbCritical
		Exit Sub
	End If

9)
invece che SviluppoIntegrale che ti costringe a dover convertire la colonna di sviluppo da una matrice a due livelli
ad un vettore (aNumeri) per consentire le funzioni statistiche è meglio usare InitSviluppoIntegrale , con la sua funzione
GetCombSviluppo che torna true fin quando esistono colonne da svilippare e che invece di una matrice ci fa direttamente
tornare il vettore che serve a noi.
Inoltre nel caso diuno sviluppo di tante colonne la prima sviluppandole preventivamente e caricandole in un array potrebbe dare
problemi con la memoria , invece la seconda le sviluppa mano mano e quindi non soffre il problema.


10) Non usare tipi di carattere non standard perche da errore io il font Consolas non ce l'avevo e infatti mi dava errore



11)
Il punto 11 è il piu critico di tutti perche impatta tantissimo sulla velocita dello script, noterai che lo script modificato da me
è decisamente piu veloce (sperando che dia risultati uguali ahahah .. vabbe dai controlli sommari fatti pare di si).
Nel flusso del tuo codice sono ripetute istruzioni costose troppe volte
in TrovaFrequenzaMese ogni volta resetti tutte le estrazioni del range per impostare quelle del mese in esame e lo fai per 12 volte
e per di piu durante la scansione delle colone sviluppate ... percio è lentissimo
Visto che il tutto serve per valorizzare un array nMese che se calcolato preventivamente consente di velocizzare notevolemte
l'elaborazione io h o fatto cosi ! Naturalemnte ho dovuto modificare nMese da vettore a matrice a due livelli perche
serve sapere preventivamente il valore della tale combinazione per quel determinato mese quandi nMEse è diventato
Redima nMese (nCombinazioniSviluppate , 12)

Inoltre ho dovuto inserire due funzioni per gestire le estrazioni da attivare , meglio tenere separate l'attivazione delle
estrazioni dalla routine che fa la statistica sempre per questione di velocita .



Codice:
 	Dim z
        ReDim nMese(12)
        FreqTot = 0
        For z = 1 To 12
                nMese(z) = TrovaFrequenzaMese(aNumeri,aRu,nSorte,Ini,Fin,z)
        Next
        For x = 1 To UBound(nMese)
                FreqTot = FreqTot + nMese(x)
        Next



segue il codice modificato da me , poi dopo lo stesso codice ma con la parte modificata remmata cosi vedi le modifiche
forse si potrebeb ottimizzare ancora di piu ma gia con questi punti che mi sono venuti in mente le cose vanno molto meglio.
Un saluto !



Codice:
Option Explicit
Sub Main
	Dim Ini,Fin,nEstr,es,k,x,r,nValore,idOrd,TipOrd,Ctr,z
	Dim DevStd,disCeb,ScaCeb
	Dim nColTotSvil
	Dim s,e,ritardo,ritardomax,IncrRitMax,RitMed,RitMese
	Dim Frequenza,freqTeorica,FreqMese,freq,FreqTot,Scarto
	Dim nNumeri,aColonne
	ReDim aNumeri(0)
	Dim aRu(1)
	Dim nCombinazione,nSorte,nCiclo
	Dim aTitolo
	ReDim aRetRitardi(0)
	ReDim aRetIdEstr(0)
	Fin = EstrazioneFin
	If ImpostaParametri(nNumeri,nCombinazione,nSorte,Ctr,idOrd,TipOrd,aRu,r,Ini) = False Then
		MsgBox "Parametri non corretti",vbCritical
		Exit Sub
	End If
	'Imposto i titoli delle colonne della tabella statistica
	
	aTitolo = Array("","ID","Comb","freq","Scarto","Rit","RitMed","RitSto","IncR.s","DevStd","disCeb","ScaCeb99%","Mese " & Mese(EstrazioneFin))
	
	InitTabella aTitolo,RGB(108,194,243) ,,3, vbWhite', "Consolas"
	'conto le estrazioni utili
	nEstr = ContaEstrazioni(Ini,Fin,r)
	nValore = Round(CicloTeorico(nCombinazione,nSorte,CInt(Ctr)),2)' ctr= 1 (=1R);=10(=TT)
	freqTeorica = Round(Dividi(nEstr,nValore),2)
	'aColonne = SviluppoIntegrale(nNumeri,nCombinazione) ' sviluppo i l'array dei numeri scelti ,nella combinazione scelta
	ReDim aColSviluppo(0)
	nColTotSvil = Combinazioni( UBound(nNumeri),nCombinazione )
	ReDim nMese(nColTotSvil ,12)
	For z = 1 To 12
		Call ImpostaEstrazioniAttivePerMese(z,Ini,Fin)
		nColTotSvil =InitSviluppoIntegrale(nNumeri,nCombinazione)
		k =0
		Do While GetCombSviluppo(aColSviluppo)
			k = k +1
			nMese(k ,z) = TrovaFrequenzaMese(aColSviluppo,aRu,nSorte,Ini,Fin,z)
		Loop
	Next
	Call ResetEstrazioniAttive(z,Ini,Fin)
	k = 0
	nColTotSvil = InitSviluppoIntegrale(nNumeri,nCombinazione)
	Do While GetCombSviluppo(aNumeri)
		k = k + 1
		'For k = 1 To UBound(aColonne) ' ciclo per leggere la colonna k della matrice aColonne
		's = "" ' dichiaro la stringa combinazione vuota
		Messaggio "Elaborazione in corso id sviluppo: " & k
		AvanzamentoElab 1,nColTotSvil,k
		If ScriptInterrotto Then Exit Do
		s = StringaNumeri(aNumeri,,True)
		
			Call StatisticaFormazioneTurbo(aNumeri,aRu,nSorte,ritardo,ritardomax,IncrRitMax,Frequenza,Ini,Fin)
			FreqTot = Frequenza
			' funzione per calcolare il ritardo globale della formazione
			' questo è un espediente che ho dovuto analizzare visto la frequenza mese
			RitMese = TrovaRitardoMese(aNumeri,aRu,nSorte,Ini,Fin,"TUTTI")
			Scarto = Round(FreqTot - freqTeorica,2)
			' richiamo la funzione elenca ritardi, per poter attingere alla marice che elenca i ritardi  voce:( aRetRitardi)
			Call ElencoRitardiTurbo(aNumeri,aRu,nSorte,Ini,Fin,aRetRitardi,aRetIdEstr)
			' scritta funzione per calcolare il ritardo medio della formazione
			RitMed = RitardoMedio(aRetRitardi)
			' scritta funzione per calcolo deviazione standard della funzione
			'
			DevStd = CalcolaDeviazioneStd(aRetRitardi)
			disCeb = Round(RitMed +(10*DevStd),2)
			ScaCeb = Round(disCeb - RitMese,2)
		s = RimuoviLastChr(s,".")
		ReDim aRisultato(12)
		Call AlimetaArrayRisultato(aRisultato,k,s,FreqTot,Scarto,RitMese,RitMed,ritardomax,IncrRitMax,DevStd,disCeb,ScaCeb,nMese(k ,Mese(EstrazioneFin)))
		Call AddRigaTabella(aRisultato,,,3,RGB(0,0,0))',"Consolas")
		'se decidessi di ordinare il mese? legge il primo colore? No Legge l'ultima istruzione
		Call SetColoreCella(CInt(idOrd),RGB(221,255,230),2)
		Call SetColoreCella(12,RGB(215,215,255),2)
	
	Loop
	Scrivi FormatSpace("script By I Legend per lottoCed's amici",150,- 1)
	Scrivi
	Scrivi "Tabella Statistica per formazioni libere" & " ",1,,RGB(252,227,143),,5
	Scrivi
	Scrivi "Range Ricerca Estrazioni dal :{" & DataEstrazione(Ini) & " } al : {" & DataEstrazione(Fin) & "}",1,,,,3
	Scrivi "Estrazioni Totali Analizzati :{" & nEstr & "}",1,,,,3
	Scrivi "Numeri di ricerca            :{" & StringaNumeri(nNumeri) & "}",1,,,,3
	Scrivi "Sviluppo numeri in           :{" & k - 1 & " " & NomeCombinazione(nCombinazione) & "}",1,,,,3
	Scrivi "Analesi combinazione per     :{" & NomeSorte(nSorte) & "}",1,,,,3
	Scrivi "Ciclo Teorico                :{" & nValore & "}",1,,,,3
	Scrivi "Frequenza Teorica            :{" & freqTeorica & "}",1,,,,3
	Scrivi "Ruota di ricerca             :{" & NomeRuota(aRu(1)) & "}",1,,,,3
	Scrivi "Ordinamento colonna num      :{" & aTitolo(idOrd) & "}",1,,,,3
	Scrivi "Ordino Colonna in modo       :{" & TipOrd & "}",1,,,,3
	Scrivi
	Call SetTableWidth("75%")
	If TipOrd = 1 Then Call AddRigaTabella(aTitolo,RGB(108,194,243),,3, vbWhite)',"Consolas")
	Call CreaTabella(idOrd ,TipOrd,0)
	'If ScriptInterrotto Then Exit Sub
End Sub
' riporto qui di seguito tutte le funzioni utilizzate
' per la sub main
' ovviamente possono essere ottimizzate
Sub AlimetaArrayRisultato(aRisultato,k,s,FreqTot,Scarto,RitMese,RitMed,ritardomax,IncrRitMax,DevStd,disCeb,ScaCeb,nMese)
	aRisultato(1) = k ' id
	aRisultato(2) = s ' combinazioni analizzate
	aRisultato(3) = FreqTot'frequenza combinazione
	aRisultato(4) = Scarto ' differenza freq.reeale e differenza teorica
	aRisultato(5) = RitMese ' ritardo cronologico
	aRisultato(6) = RitMed ' ritardo medio
	aRisultato(7) = ritardomax ' ritardo storico
	aRisultato(8) = IncrRitMax ' incremento ritardo storico
	aRisultato(9) = DevStd ' deviazione standard
	aRisultato(10) = disCeb 'disegualianza di cebicev
	aRisultato(11) = ScaCeb ' scarto tra valore ipotizzato e valore del ritardo reale
	aRisultato(12) = nMese 'Gennaio ' frequenza per mese
End Sub
Function ImpostaParametri(aNumeri,nCombinazione,nSorte,Ctr,idOrd,TipOrd,aRu,Ruota,Ini)
	Dim bRet
	Ini = InizioArchivio(3914)
	If Ini > 0 Then
		Call ScegliNumeri(aNumeri)
		If IsArray(aNumeri) Then
			nCombinazione = ScegliCombinazione
			If nCombinazione > 0 Then
				nSorte = SelEsito
				If nSorte > 0 Then
					'If nCombinazione < nSorte Then MsgBox "hai inserito Un Valore errato riscrivi ": nSorte = CInt(SelEsito)
					Do While nCombinazione < nSorte
						MsgBox "hai inserito Un Valore errato riscrivi ": nSorte = CInt(SelEsito)
						If nSorte = - 1 Then Exit Do
					Loop
					If nSorte > 0 Then
						Ruota = SelRuota ' funziona per selezionare la ruota  statistica su tutte o solo per una ruota
						If Ruota > 0 Then
							aRu(1) = Ruota
							If Ruota = 11 Then
								Ctr = 10
							Else
								Ctr = 1 ' valore utilizzato per calcolo del ciclo teorico
							End If
							idOrd = Ordinamento ' seleziono la colonna che voglio ordinare
							
							If idOrd > 0 Then
								TipOrd = TipoOrdinamento ' Crescente o decrescente
								bRet = True ' per default torna true
							End If
						End If
					End If
				End If
			End If
		End If
	End If
	ImpostaParametri = bRet
End Function
Function TrovaFrequenzaMese(aNumeri,aRu,nSorte,Ini,fin,nMese)
	Dim k
	Dim FreqMese
	
	FreqMese = SerieFreqTurbo(Ini,fin,aNumeri,aRu,nSorte)
	TrovaFrequenzaMese = FreqMese
End Function
Sub ImpostaEstrazioniAttivePerMese(nMese,Ini,fin)
	Dim k
	If nMese = "TUTTI" Then
		Call ResetEstrazioniAttive(nMese,Ini,fin)
	Else
		For k = Ini To fin
			If Mese(k) = nMese Then
				Call ImpostaEstrazione(k,True)
			Else
				Call ImpostaEstrazione(k,False)
			End If
		Next
	End If
End Sub
Sub ResetEstrazioniAttive(nMese,Ini,fin)
	Dim k
	For k = Ini To fin
		Call ImpostaEstrazione(k,True)
	Next
End Sub
Function TrovaRitardoMese(aNumeri,aRu,nSorte,Ini,fin,nMese)
	Dim k
	Dim RitMese
	
	If nMese <> "TUTTI" Then
		
		Call ImpostaEstrazioniAttivePerMese(nMese,Ini,fin)
	End If
	RitMese = SerieRitardoTurbo(Ini,fin,aNumeri,aRu,nSorte)
	TrovaRitardoMese = RitMese
End Function
Function NomeCombinazione(a)
	Dim ris
	Select Case a
	Case 1
		ris = "Estratti"
	Case 2
		ris = "Ambi"
	Case 3
		ris = "Terzine"
	Case 4
		ris = "Quartine"
	Case 5
		ris = "Cinquine"
	End Select
	NomeCombinazione = ris
End Function
Function Ordinamento
	Dim Ord
	Dim ret
	Dim aTitolo
	
	' gli array partono sempre da 0
	
	aTitolo = Array("","Freq","Scarto","Rit","RitMed","IncR.S","DevStd","DisCeb","ScaCeb","mese " & Mese(EstrazioneFin))
	
	ret = ScegliOpzioneMenu(aTitolo, 1,"Seleziona Ordinamento  per la colonna :"  )
	' serve per gestire il tasto annulla
	If ret >= 0 Then
		Ord = ret + 2
	Else
		Ord = ret
	End If
	Ordinamento = Ord
End Function
Function TipoOrdinamento
	Dim Ord
	Dim ret
	Dim aTitolo
	
	aTitolo = Array("DeCrescente","Crescente")
	ret = ScegliOpzioneMenu(aTitolo,0,"Seleziona Tipo di Ordinamento  :")
	' serve per gestire il tasto annulla
	If ret >= 0 Then
		If Ord = 0 Then Ord = - 1 : Else Ord = 1
	Else
		Ord = ret
	End If
	TipoOrdinamento = Ord
End Function
Function ScegliCombinazione
	Dim ret
	Dim aVoci
	
	' gli array partono sempre da 0
	aVoci = Array("","Estratti","Ambi","Terzine","Quartine","Cinquine")
	ret = ScegliOpzioneMenu(aVoci,3," Combina i numeri In :")
	' serve per gestire il tasto annulla
	ScegliCombinazione = ret
End Function
Function SelEsito
	Dim ret
	Dim aVoci
	
	' gli array partono sempre da 0
	aVoci = Array("","Estratto","Ambo","Terno","Quaterna","Cinquina")
	ret = ScegliOpzioneMenu(aVoci,2," Analesi per Sorte di : ")
	SelEsito = ret
End Function
Function SelRuota
	Dim ret
	Dim aVoci
	 
	' gli Array partono sempre da 0
	aVoci = Array("","BARI","CAGLIARI","FIRENZE","GENOVA","MILANO","NAPOLI","PALERMO","ROMA","TORINO","VENEZIA","TUTTE","NAZIONALE")
	ret = ScegliOpzioneMenu(aVoci,1," Analizza Ruota di : ")
	SelRuota = ret
End Function
Function InizioArchivio(nInizio)
	Dim es
	Dim ret
	ReDim aVoci(EstrazioneFin)
	For es = nInizio To EstrazioneFin
		aVoci(es) = DataEstrazione(es)
	Next
	ret = ScegliOpzioneMenu(aVoci,nInizio,"Inserisci Data Inizio Analisi")
	InizioArchivio = ret
End Function
Function RitardoMedio(aRitardi())
	Dim k
	Dim nElementi
	Dim nMedia
	For k = 1 To UBound(aRitardi) - 1
		nElementi = nElementi + 1
		nMedia = nMedia + aRitardi(k)
	Next
	nMedia = Round(Dividi(nMedia,nElementi),2)
	RitardoMedio = nMedia
End Function
Function CalcolaDeviazioneStd(aRitardi())
	Dim k
	Dim somRit,nMedia,nElementi,nVarianza,nSomSQVar
	For k = 1 To UBound(aRitardi) - 1
		nElementi = nElementi + 1
		somRit = somRit + aRitardi(k)
	Next
	nMedia = Round(Dividi(somRit,nElementi))
	For k = 1 To UBound(aRitardi) - 1
		nSomSQVar = nSomSQVar +((nMedia - aRitardi(k)) ^ 2)
		nVarianza = Round(Dividi(nSomSQVar,nElementi),2)
	Next
	CalcolaDeviazioneStd = Round(Sqr(nVarianza),2)
End Function
Function ContaEstrazioni(Ini,Fin,r)
	Dim Conta,es
	For es = Ini To Fin
		If SommaEstratti(es,r) >= 15 Then Conta = Conta + 1
	Next
	ContaEstrazioni = Conta
End Function





Codice:
Option Explicit
Sub Main
	Dim Ini,Fin,nEstr,es,k,x,r,nValore,idOrd,TipOrd,Ctr,z
	Dim DevStd,disCeb,ScaCeb
	Dim nColTotSvil
	Dim s,e,ritardo,ritardomax,IncrRitMax,RitMed,RitMese
	Dim Frequenza,freqTeorica,FreqMese,freq,FreqTot,Scarto
	Dim nNumeri,aColonne
	ReDim aNumeri(0)
	Dim aRu(1)
	Dim nCombinazione,nSorte,nCiclo
	Dim aTitolo
	ReDim aRetRitardi(0)
	ReDim aRetIdEstr(0)
	Fin = EstrazioneFin
	If ImpostaParametri(nNumeri,nCombinazione,nSorte,Ctr,idOrd,TipOrd,aRu,r,Ini) = False Then
		MsgBox "Parametri non corretti",vbCritical
		Exit Sub
	End If
	'Imposto i titoli delle colonne della tabella statistica
	'
	'ReDim aTitolo(12)
	
	aTitolo = Array("","ID","Comb","freq","Scarto","Rit","RitMed","RitSto","IncR.s","DevStd","disCeb","ScaCeb99%","Mese " & Mese(EstrazioneFin))
	'aTitolo(1) = "ID" ' Numero di combinazione
	'		aTitolo(2) = "Comb." '  combinazioni ottenute
	'		aTitolo(3) = "Freq" ' frequenza
	'		aTitolo(4) = "Scarto" ' differenza tra freq.reale e frequenza teorica
	'		aTitolo(5) = "Rit" ' ritardo cronologico attuale
	'		aTitolo(6) = "RitMed" ' ritardo medio combunazione
	'		aTitolo(7) = "RitSto"
	'		aTitolo(8) = "IncR.S"
	'		aTitolo(9) = "DevStd"
	'		aTitolo(10) = "DisCeb"
	'		aTitolo(11) = "ScaCeb99%"
	'		aTitolo(12) = "mese " & Mese(EstrazioneFin) ' frequenza nel mese di...
	InitTabella aTitolo,RGB(108,194,243) ,,3, vbWhite', "Consolas"
	'conto le estrazioni utili
	nEstr = ContaEstrazioni(Ini,Fin,r)
	nValore = Round(CicloTeorico(nCombinazione,nSorte,CInt(Ctr)),2)' ctr= 1 (=1R);=10(=TT)
	freqTeorica = Round(Dividi(nEstr,nValore),2)
	'aColonne = SviluppoIntegrale(nNumeri,nCombinazione) ' sviluppo i l'array dei numeri scelti ,nella combinazione scelta
	ReDim aColSviluppo(0)
	nColTotSvil = Combinazioni( UBound(nNumeri),nCombinazione )
	ReDim nMese(nColTotSvil ,12)
	For z = 1 To 12
		Call ImpostaEstrazioniAttivePerMese(z,Ini,Fin)
		nColTotSvil =InitSviluppoIntegrale(nNumeri,nCombinazione)
		k =0
		Do While GetCombSviluppo(aColSviluppo)
			k = k +1
			nMese(k ,z) = TrovaFrequenzaMese(aColSviluppo,aRu,nSorte,Ini,Fin,z)
		Loop
	Next
	Call ResetEstrazioniAttive(z,Ini,Fin)
	k = 0
	nColTotSvil = InitSviluppoIntegrale(nNumeri,nCombinazione)
	Do While GetCombSviluppo(aNumeri)
		k = k + 1
		'For k = 1 To UBound(aColonne) ' ciclo per leggere la colonna k della matrice aColonne
		's = "" ' dichiaro la stringa combinazione vuota
		Messaggio "Elaborazione in corso id sviluppo: " & k
		AvanzamentoElab 1,nColTotSvil,k
		If ScriptInterrotto Then Exit Do
		s = StringaNumeri(aNumeri,,True)
		'For e = 1 To nCombinazione ' ciclo la combinazione selezionata
			's = s & Format2(aColonne(k,e)) & "." ' questa è la stringa di ritorno dei numeri combinati
			'aNumeri(e) = aColonne(k,e) 'matrice dei numeri da analizzare
			Call StatisticaFormazioneTurbo(aNumeri,aRu,nSorte,ritardo,ritardomax,IncrRitMax,Frequenza,Ini,Fin)
			FreqTot = Frequenza
			' qui analizzo le frequenze con la funzione trova frequenze per mese
			'ReDim nMese(12)
			'FreqTot = 0
			'For z = 1 To 12
			'				nMese(z) = TrovaFrequenzaMese(aNumeri,aRu,nSorte,Ini,Fin,z)
			'				FreqTot = FreqTot + nMese(z)
			'			Next
			'			' For x = 1 To UBound(nMese)
			'                FreqTot = FreqTot + nMese(x)
			' Next
			'            ' funzione per calcolare il ritardo globale della formazione
			' questo è un espediente che ho dovuto analizzare visto la frequenza mese
			RitMese = TrovaRitardoMese(aNumeri,aRu,nSorte,Ini,Fin,"TUTTI")
			Scarto = Round(FreqTot - freqTeorica,2)
			' richiamo la funzione elenca ritardi, per poter attingere alla marice che elenca i ritardi  voce:( aRetRitardi)
			Call ElencoRitardiTurbo(aNumeri,aRu,nSorte,Ini,Fin,aRetRitardi,aRetIdEstr)
			' scritta funzione per calcolare il ritardo medio della formazione
			RitMed = RitardoMedio(aRetRitardi)
			' scritta funzione per calcolo deviazione standard della funzione
			'
			DevStd = CalcolaDeviazioneStd(aRetRitardi)
			disCeb = Round(RitMed +(10*DevStd),2)
			ScaCeb = Round(disCeb - RitMese,2)
		'Next
		's = Left(s,Len(s) - 1) ' tolgo l'ultimo punto dalla stringa della formazione altrimenti sarebbe es : "12.22.33." anzichè : "12.22.33"
		s = RimuoviLastChr(s,".")
		ReDim aRisultato(12)
		'aRisultato(1) = k ' id
		'		aRisultato(2) = s ' combinazioni analizzate
		'		aRisultato(3) = FreqTot'frequenza combinazione
		'		aRisultato(4) = Scarto ' differenza freq.reeale e differenza teorica
		'		aRisultato(5) = RitMese ' ritardo cronologico
		'		aRisultato(6) = RitMed ' ritardo medio
		'		aRisultato(7) = ritardomax ' ritardo storico
		'		aRisultato(8) = IncrRitMax ' incremento ritardo storico
		'		aRisultato(9) = DevStd ' deviazione standard
		'		aRisultato(10) = disCeb 'disegualianza di cebicev
		'		aRisultato(11) = ScaCeb ' scarto tra valore ipotizzato e valore del ritardo reale
		'		aRisultato(12) = nMese(Mese(EstrazioneFin))'Gennaio ' frequenza per mese
		Call AlimetaArrayRisultato(aRisultato,k,s,FreqTot,Scarto,RitMese,RitMed,ritardomax,IncrRitMax,DevStd,disCeb,ScaCeb,nMese(k ,Mese(EstrazioneFin)))
		Call AddRigaTabella(aRisultato,,,3,RGB(0,0,0))',"Consolas")
		'se decidessi di ordinare il mese? legge il primo colore? No Legge l'ultima istruzione
		Call SetColoreCella(CInt(idOrd),RGB(221,255,230),2)
		Call SetColoreCella(12,RGB(215,215,255),2)
		'Call SetColoreCella(Mese(EstrazioneFin) + 11,RGB(215,215,255),2)
		'Next
	Loop
	Scrivi FormatSpace("script By I Legend per lottoCed's amici",150,- 1)
	Scrivi
	Scrivi "Tabella Statistica per formazioni libere" & " ",1,,RGB(252,227,143),,5
	Scrivi
	Scrivi "Range Ricerca Estrazioni dal :{" & DataEstrazione(Ini) & " } al : {" & DataEstrazione(Fin) & "}",1,,,,3
	Scrivi "Estrazioni Totali Analizzati :{" & nEstr & "}",1,,,,3
	Scrivi "Numeri di ricerca            :{" & StringaNumeri(nNumeri) & "}",1,,,,3
	Scrivi "Sviluppo numeri in           :{" & k - 1 & " " & NomeCombinazione(nCombinazione) & "}",1,,,,3
	Scrivi "Analesi combinazione per     :{" & NomeSorte(nSorte) & "}",1,,,,3
	Scrivi "Ciclo Teorico                :{" & nValore & "}",1,,,,3
	Scrivi "Frequenza Teorica            :{" & freqTeorica & "}",1,,,,3
	Scrivi "Ruota di ricerca             :{" & NomeRuota(aRu(1)) & "}",1,,,,3
	Scrivi "Ordinamento colonna num      :{" & aTitolo(idOrd) & "}",1,,,,3
	Scrivi "Ordino Colonna in modo       :{" & TipOrd & "}",1,,,,3
	Scrivi
	Call SetTableWidth("75%")
	If TipOrd = 1 Then Call AddRigaTabella(aTitolo,RGB(108,194,243),,3, vbWhite)',"Consolas")
	Call CreaTabella(idOrd ,TipOrd,0)
	'If ScriptInterrotto Then Exit Sub
End Sub
' riporto qui di seguito tutte le funzioni utilizzate
' per la sub main
' ovviamente possono essere ottimizzate
Sub AlimetaArrayRisultato(aRisultato,k,s,FreqTot,Scarto,RitMese,RitMed,ritardomax,IncrRitMax,DevStd,disCeb,ScaCeb,nMese)
	aRisultato(1) = k ' id
	aRisultato(2) = s ' combinazioni analizzate
	aRisultato(3) = FreqTot'frequenza combinazione
	aRisultato(4) = Scarto ' differenza freq.reeale e differenza teorica
	aRisultato(5) = RitMese ' ritardo cronologico
	aRisultato(6) = RitMed ' ritardo medio
	aRisultato(7) = ritardomax ' ritardo storico
	aRisultato(8) = IncrRitMax ' incremento ritardo storico
	aRisultato(9) = DevStd ' deviazione standard
	aRisultato(10) = disCeb 'disegualianza di cebicev
	aRisultato(11) = ScaCeb ' scarto tra valore ipotizzato e valore del ritardo reale
	aRisultato(12) = nMese 'Gennaio ' frequenza per mese
End Sub
Function ImpostaParametri(aNumeri,nCombinazione,nSorte,Ctr,idOrd,TipOrd,aRu,Ruota,Ini)
	Dim bRet
	Ini = InizioArchivio(3914)
	If Ini > 0 Then
		Call ScegliNumeri(aNumeri)
		If IsArray(aNumeri) Then
			nCombinazione = ScegliCombinazione
			If nCombinazione > 0 Then
				nSorte = SelEsito
				If nSorte > 0 Then
					'If nCombinazione < nSorte Then MsgBox "hai inserito Un Valore errato riscrivi ": nSorte = CInt(SelEsito)
					Do While nCombinazione < nSorte
						MsgBox "hai inserito Un Valore errato riscrivi ": nSorte = CInt(SelEsito)
						If nSorte = - 1 Then Exit Do
					Loop
					If nSorte > 0 Then
						Ruota = SelRuota ' funziona per selezionare la ruota  statistica su tutte o solo per una ruota
						If Ruota > 0 Then
							aRu(1) = Ruota
							If Ruota = 11 Then
								Ctr = 10
							Else
								Ctr = 1 ' valore utilizzato per calcolo del ciclo teorico
							End If
							idOrd = Ordinamento ' seleziono la colonna che voglio ordinare
							
							If idOrd > 0 Then
								TipOrd = TipoOrdinamento ' Crescente o decrescente
								bRet = True ' per default torna true
							End If
						End If
					End If
				End If
			End If
		End If
	End If
	ImpostaParametri = bRet
End Function
Function TrovaFrequenzaMese(aNumeri,aRu,nSorte,Ini,fin,nMese)
	Dim k
	Dim FreqMese
	'For k = Ini To fin
	'		If Mese(k) = nMese Then
	'			Call ImpostaEstrazione(k,True)
	'		Else
	'			Call ImpostaEstrazione(k,False)
	'		End If
	'	Next
	FreqMese = SerieFreqTurbo(Ini,fin,aNumeri,aRu,nSorte)
	TrovaFrequenzaMese = FreqMese
End Function
Sub ImpostaEstrazioniAttivePerMese(nMese,Ini,fin)
	Dim k
	If nMese = "TUTTI" Then
		Call ResetEstrazioniAttive(nMese,Ini,fin)
	Else
		For k = Ini To fin
			If Mese(k) = nMese Then
				Call ImpostaEstrazione(k,True)
			Else
				Call ImpostaEstrazione(k,False)
			End If
		Next
	End If
End Sub
Sub ResetEstrazioniAttive(nMese,Ini,fin)
	Dim k
	For k = Ini To fin
		Call ImpostaEstrazione(k,True)
	Next
End Sub
Function TrovaRitardoMese(aNumeri,aRu,nSorte,Ini,fin,nMese)
	Dim k
	Dim RitMese
	'For k = Ini To fin
	'		If Mese(k) = nMese Then
	'			Call ImpostaEstrazione(k,True)
	'		Else
	'			Call ImpostaEstrazione(k,False)
	'		End If
	'	Next
	'	For k = Ini To fin
	'		If nMese = "TUTTI" Then Call ImpostaEstrazione(k,True)
	'	Next
	If nMese <> "TUTTI" Then
		
		Call ImpostaEstrazioniAttivePerMese(nMese,Ini,fin)
	End If
	RitMese = SerieRitardoTurbo(Ini,fin,aNumeri,aRu,nSorte)
	TrovaRitardoMese = RitMese
End Function
Function NomeCombinazione(a)
	Dim ris
	Select Case a
	Case 1
		ris = "Estratti"
	Case 2
		ris = "Ambi"
	Case 3
		ris = "Terzine"
	Case 4
		ris = "Quartine"
	Case 5
		ris = "Cinquine"
	End Select
	NomeCombinazione = ris
End Function
Function Ordinamento
	Dim Ord
	Dim ret
	Dim aTitolo
	'ReDim aTitolo(10)
	'	aTitolo(1) = "Freq" ' frequenza
	'	aTitolo(2) = "Scarto" ' differenza tra freq.reale e frequenza teorica
	'	aTitolo(3) = "Rit" ' ritardo cronologico attuale
	'	aTitolo(4) = "RitMed" ' ritardo medio combunazione
	'	aTitolo(5) = "RitSto"
	'	aTitolo(6) = "IncR.S"
	'	aTitolo(7) = "DevStd"
	'	aTitolo(8) = "DisCeb"
	'	aTitolo(9) = "ScaCeb"
	'	aTitolo(10) = "mese " & Mese(EstrazioneFin)' frequenza nel mese di....
	'
	' gli array partono sempre da 0
	
	aTitolo = Array("","Freq","Scarto","Rit","RitMed","IncR.S","DevStd","DisCeb","ScaCeb","mese " & Mese(EstrazioneFin))
	
	ret = ScegliOpzioneMenu(aTitolo, 1,"Seleziona Ordinamento  per la colonna :"  )
	' serve per gestire il tasto annulla
	If ret >= 0 Then
		Ord = ret + 2
	Else
		Ord = ret
	End If
	Ordinamento = Ord
End Function
Function TipoOrdinamento
	Dim Ord
	Dim ret
	Dim aTitolo
	'ReDim atitolo(1)
	'	atitolo(0) = "DeCrescente"
	'	atitolo(1) = "Crescente"
	'
	'
	aTitolo = Array("DeCrescente","Crescente")
	ret = ScegliOpzioneMenu(aTitolo,0,"Seleziona Tipo di Ordinamento  :")
	' serve per gestire il tasto annulla
	If ret >= 0 Then
		If Ord = 0 Then Ord = - 1 : Else Ord = 1
	Else
		Ord = ret
	End If
	TipoOrdinamento = Ord
End Function
Function ScegliCombinazione
	Dim ret
	Dim aVoci
	'ReDim aVoci(5)
	'
	'	aVoci(1) = "Estratti"
	'	aVoci(2) = "Ambi"
	'	aVoci(3) = "Terzine"
	'	aVoci(4) = "Quartine"
	'	aVoci(5) = "Cinquine"
	' gli array partono sempre da 0
	aVoci = Array("","Estratti","Ambi","Terzine","Quartine","Cinquine")
	ret = ScegliOpzioneMenu(aVoci,3," Combina i numeri In :")
	' serve per gestire il tasto annulla
	ScegliCombinazione = ret
End Function
Function SelEsito
	Dim ret
	Dim aVoci
	'ReDim aVoci(5)
	'	aVoci(1) = "Estratto"
	'	aVoci(2) = "Ambo"
	'	aVoci(3) = "Terno"
	'	aVoci(4) = "Quaterna"
	'	aVoci(5) = "Cinquina"
	' gli array partono sempre da 0
	aVoci = Array("","Estratto","Ambo","Terno","Quaterna","Cinquina")
	ret = ScegliOpzioneMenu(aVoci,2," Analesi per Sorte di : ")
	SelEsito = ret
End Function
Function SelRuota
	Dim ret
	Dim aVoci
	'ReDim aVoci(12)
	'	aVoci(1) = "BARI"
	'	aVoci(2) = "CAGLIARI"
	'	aVoci(3) = "FIRENZE"
	'	aVoci(4) = "GENOVA"
	'	aVoci(5) = "MILANO"
	'	aVoci(6) = "NAPOLI"
	'	aVoci(7) = "PALERMO"
	'	aVoci(8) = "ROMA"
	'	aVoci(9) = "TORINO"
	'	aVoci(10) = "VENEZIA"
	'	aVoci(11) = "TUTTE"
	'	aVoci(12) = "NAZIONALE"
	'	' gli array partono sempre da 0
	aVoci = Array("","BARI","CAGLIARI","FIRENZE","GENOVA","MILANO","NAPOLI","PALERMO","ROMA","TORINO","VENEZIA","TUTTE","NAZIONALE")
	' comunque qui avrei usato un ciclo con NomeRuota piuttosto che scrivere a mano le 12 ruote
	ret = ScegliOpzioneMenu(aVoci,1," Analizza Ruota di : ")
	SelRuota = ret
End Function
Function InizioArchivio(nInizio)
	Dim es
	Dim ret
	ReDim aVoci(EstrazioneFin)
	For es = nInizio To EstrazioneFin
		aVoci(es) = DataEstrazione(es)
	Next
	ret = ScegliOpzioneMenu(aVoci,nInizio,"Inserisci Data Inizio Analisi")
	InizioArchivio = ret
End Function
Function RitardoMedio(aRitardi())
	Dim k
	Dim nElementi
	Dim nMedia
	For k = 1 To UBound(aRitardi) - 1
		nElementi = nElementi + 1
		nMedia = nMedia + aRitardi(k)
	Next
	nMedia = Round(Dividi(nMedia,nElementi),2)
	RitardoMedio = nMedia
End Function
Function CalcolaDeviazioneStd(aRitardi())
	Dim k
	Dim somRit,nMedia,nElementi,nVarianza,nSomSQVar
	For k = 1 To UBound(aRitardi) - 1
		nElementi = nElementi + 1
		somRit = somRit + aRitardi(k)
	Next
	nMedia = Round(Dividi(somRit,nElementi))
	For k = 1 To UBound(aRitardi) - 1
		nSomSQVar = nSomSQVar +((nMedia - aRitardi(k)) ^ 2)
		nVarianza = Round(Dividi(nSomSQVar,nElementi),2)
	Next
	CalcolaDeviazioneStd = Round(Sqr(nVarianza),2)
End Function
Function ContaEstrazioni(Ini,Fin,r)
	Dim Conta,es
	For es = Ini To Fin
		If SommaEstratti(es,r) >= 15 Then Conta = Conta + 1
	Next
	ContaEstrazioni = Conta
End Function
 
Ultima modifica di un moderatore:
WOW........................OK!!!!!!!!!!! Buona serata a tutti:-) Ciao Luigi grazie per i complimenti, ma ora il libro di programmazione mi tocca mangiarlo davvero, ho lanciato lo script, ha fatto in pochi minuti quello che oggi pomeriggio ha fatto in poco più di un ora ,forse anche di più :) .................................................. ora lo controllo per bene, e lo studio con molta attenzione la tua spiegazione è eccezionale ........................................In effetti devo dire che sto studiando,ma gli input è il modo di ragionare nella giusta logica(la strada è lunghissima lo so:) lo devo ai consigli e spiegazioni di joe e all'aiuto puntuale e preciso di mike... Leggere i vostri codici caspita è proprio bello............ Ancora grazie mille :-)................Scusa per questo post , ma sono scomparsi di nuovo i bottoni nella casella di testo, per questo l'altro giorno il codice usciva su una sola riga,,,,,,,Farò tesoro di questi insegnamenti.....Spero di migliorare ancora un pochino nel mio prossimo script,,,,,, Rinnovo quello che avevo gia detto a Joe. Bisognerebbe fare una raccolta dei vostri script magari remmati, e da questi che si può imparare a scrivere nel modo corretto...........Grazie Mille Luigi,Mike,Joe siete i migliori :-)..................Buona notte
 
Buon Giorno a tutte/i.

Rispondo ad i legend scrivendo che Mike e Luigi hanno individuato risolto e spiegato ...

come correggere e "fare" per migliorare uno script ... già ben evoluto.

Non per declinare i ringraziamenti, da parte di uno "sveglio" e con una buona base,

che noi vecchi non si poteva avere (non esistendo neppure i PC) sono gradidi e

giusto riconoscimento di tanta passione, impegno, dedizione

Ma ... ci sono molti altri, altrettanto ... ed anche di livello superiore.

Qui sicuramente si deve riconoscere un merito maggiore ... al buon Luigi.

Senza però escludere ... le molte, silenti, menti lottologiche-scriptiche cui va il mio caro saluto e gli

auguri di Buon Natale, considerando i giorni in cui siamo e da cui tanto ho imparato. Maestri.

Ringrazio anche Luigi per aver introdotto tra le altre, una istruzione a me nuova.

Per un puntino ... in meno.

Qui dissento un minimo ... perchè tanto più si sale "nel livello" del linguaggio ...

tanto più si perde la compatibilità ... con versioni non in grado di riconoscere istruzioni

aggiunte successivamente. (Legge della nostalgia)

Qui tuttavia, per esempio, nelle tabelle, la possibilità di odinare qualunque colonna,

come si vuole e come ha ben descritto Mike.

E' "utilità" tale da giustificare l'abbandono di piattaforme che al confronto sono evidentemente obsolete.

Ripeto, anche per me c'è molto da imparare.

:) Ancora complimenti e cordiali saluti ...
 
Ultima modifica:
ciao joe mi spiace, ma i complimenti te li meriti tutti anche tu.Mi accodo per fare gli auguri a tutti.... Un saluto anche a mike e al grande Luigi. Grazie a tutti voi per la pazienza :) ......
 
Sono anch'io d'accordo con tutti, che l'amico I legend ha fatto veramente un bel salto di qualità e merita di stare tra i migliori dei ahinoi pochi del bel mondo del vbscript.

Partecipo poco ad auguri di vario genere ma anch'io voglio ricordare visto che siamo in tema di nostalgia gli amici che hanno fatto oltre che al prof LuigiB , Joe, anche gli amici che hanno contribuito a fat crescere il vscript e che magari alcuni non sono + assiduamente presenti ed in particolare a Claudio8,BlackMore,BaffoBlu,Disaronno e altri....

Mi auguro che la collaborazione costruttiva ci sia da stimolo per crescere ulteriormente.

P.s: x I legend ricompila lo script iniziale con tutti mesi con le dritte di Luigi evidenziando l mese che vogliamo vedere in evidenza tramite scelta.

Ciao e ri-complimenti.
 
Buon Giorno a tutte/i.

Mi permetto anch'io una piccola osservazione ...

... riprendendo quanto accennato e relativo alla nostalgica-compatibilità.

La funzione creata da ilegend ... è una applicazione di quanto si

si trova negli esempi a corredo dei testi di programmazione.

In quanto tale è eseguibile, praticamente ovunque.

Mentre nello specifico Spaziometria, offre un alternativa "sintetica" e qui mi ricollego a quanto scritto da Luigi.

Oltre i due elementi (dico io) ... meglio preferire un ciclo For - Next per indirizzarli.

In sintesi per dare concretezza a tutto questo ... ho creato una piccola

Sub Main con un ciclo ... For-Next per richiamare

sia la funzione redatta da i legend che ... l'istuzione già presente in Spaziometria.

Ponedo a confronto i risultati di questa "Funzione Compatibile" con dell' "Istruzione già presente".

Suggerendo, per contro, il percorso inverso come rendere compatibili ...

i vecchi ambienti di sviluppo ... quando non hanno "l' istruzione giusta" e/o presente,

come è presente in Spaziometria.

Si aggiunge in fondo all script ... l'istruzione mancante ... organizzandola in funzione

"richiamabile" dalla Main dello script (con i parametri necessari a farla funzionare).

Codice:
Sub Main
	For a = 1 To 5
	Scrivi NomeCombinazione(a)
	Scrivi NomeSorte(a)
	Scrivi
	Next
End Sub

Function NomeCombinazione(a)
	Dim ris
	Select Case a
	Case 1
		ris = "Estratti"
	Case 2
		ris = "Ambi"
	Case 3
		ris = "Terzine"
	Case 4
		ris = "Quartine"
	Case 5
		ris = "Cinquine"
	End Select
	NomeCombinazione = ris
End Function

:)
 
Ultima modifica:
Ciao Mike,Ciao joe,ciao Luigi Ciao Tutti :)
X Mike , ho ricompilato lo script con tutti i mesi, la cella colorata è sempre quella del mese corrente, ma si possono ordinare tutte...
Per aggiungere i mesi ho modificato la sub alimentaArray, se luigi ci da un occhiata è meglio,non vorrei aver dimenticato di modificare qualche parametro..... ho sostituito nMese con Gen,feb,ecc ridimensionaro l'array
ho modificato la function ordinamento, perchè non ordinava in maniera decrescente,ora dovrebbe andare.....
Luigi è una scheggia :)
Codice:
Option Explicit
Sub Main
    Dim Ini,Fin,nEstr,es,k,x,r,nValore,idOrd,TipOrd,Ctr,z
    Dim DevStd,disCeb,ScaCeb
    Dim nColTotSvil
    Dim s,e,ritardo,ritardomax,IncrRitMax,RitMed,RitMese
    Dim Frequenza,freqTeorica,FreqMese,freq,FreqTot,Scarto
    Dim nNumeri,aColonne
    ReDim aNumeri(0)
    Dim aRu(1)
    Dim nCombinazione,nSorte,nCiclo
    Dim aTitolo
    ReDim aRetRitardi(0)
    ReDim aRetIdEstr(0)
    Fin = EstrazioneFin
    If ImpostaParametri(nNumeri,nCombinazione,nSorte,Ctr,idOrd,TipOrd,aRu,r,Ini) = False Then
         MsgBox "Parametri non corretti",vbCritical
        Exit Sub
    End If
    'Imposto i titoli delle colonne della tabella statistica
    aTitolo = Array("","ID","Comb","freq","Scarto","Rit","RitMed","RitSto","IncR.s","DevStd","disCeb","ScaCeb99%","GEN","FEB","MAR","APR","MAG","GIU","LUG","AGO","Set","OTT","NOV","DIC")
    InitTabella aTitolo,RGB(108,194,243),,3,vbWhite', "Consolas"
    'conto le estrazioni utili
    nEstr = ContaEstrazioni(Ini,Fin,r)
    nValore = Round(CicloTeorico(nCombinazione,nSorte,CInt(Ctr)),2)' ctr= 1 (=1R);=10(=TT)
    freqTeorica = Round(Dividi(nEstr,nValore),2)
    'aColonne = SviluppoIntegrale(nNumeri,nCombinazione) ' sviluppo i l'array dei numeri scelti ,nella combinazione scelta
    ReDim aColSviluppo(0)
    nColTotSvil = Combinazioni(UBound(nNumeri),nCombinazione)
    ReDim nMese(nColTotSvil,12)
    For z = 1 To 12
        Call ImpostaEstrazioniAttivePerMese(z,Ini,Fin)
        nColTotSvil = InitSviluppoIntegrale(nNumeri,nCombinazione)
        k = 0
        Do While GetCombSviluppo(aColSviluppo)
            k = k + 1
            nMese(k,z) = TrovaFrequenzaMese(aColSviluppo,aRu,nSorte,Ini,Fin,z)
        Loop
    Next
    Call ResetEstrazioniAttive(z,Ini,Fin)
    k = 0
    nColTotSvil = InitSviluppoIntegrale(nNumeri,nCombinazione)
    Do While GetCombSviluppo(aNumeri)
        k = k + 1
        'For k = 1 To UBound(aColonne) ' ciclo per leggere la colonna k della matrice aColonne
        's = "" ' dichiaro la stringa combinazione vuota
        Messaggio "Elaborazione in corso id sviluppo: " & k
        AvanzamentoElab 1,nColTotSvil,k
        If ScriptInterrotto Then Exit Do
        s = StringaNumeri(aNumeri,,True)
        Call StatisticaFormazioneTurbo(aNumeri,aRu,nSorte,ritardo,ritardomax,IncrRitMax,Frequenza,Ini,Fin)
        FreqTot = Frequenza
        ' funzione per calcolare il ritardo globale della formazione
        ' questo è un espediente che ho dovuto analizzare visto la frequenza mese
        RitMese = TrovaRitardoMese(aNumeri,aRu,nSorte,Ini,Fin,"TUTTI")
        Scarto = Round(FreqTot - freqTeorica,2)
        ' richiamo la funzione elenca ritardi, per poter attingere alla marice che elenca i ritardi  voce:( aRetRitardi)
        Call ElencoRitardiTurbo(aNumeri,aRu,nSorte,Ini,Fin,aRetRitardi,aRetIdEstr)
        ' scritta funzione per calcolare il ritardo medio della formazione
        RitMed = RitardoMedio(aRetRitardi)
        ' scritta funzione per calcolo deviazione standard della funzione
        '
        DevStd = CalcolaDeviazioneStd(aRetRitardi)
        disCeb = Round(RitMed +(10*DevStd),2)
        ScaCeb = Round(disCeb - RitMese,2)
        s = RimuoviLastChr(s,".")
        ReDim aRisultato(23)
        Call AlimetaArrayRisultato(aRisultato,k,s,FreqTot,Scarto,RitMese,RitMed,ritardomax,IncrRitMax,DevStd,disCeb,ScaCeb,nMese(k,1),nMese(k,2),nMese(k,3),nMese(k,4),nMese(k,5),nMese(k,6),nMese(k,7),nMese(k,8),nMese(k,9),nMese(k,10),nMese(k,11),nMese(k,12))
        Call AddRigaTabella(aRisultato,,,3,RGB(0,0,0))',"Consolas")
        'se decidessi di ordinare il mese? legge il primo colore? No Legge l'ultima istruzione
        Call SetColoreCella(CInt(idOrd),RGB(221,255,230),2)
        Call SetColoreCella(Mese(EstrazioneFin)+11,RGB(215,215,255),2)
    Loop
    Scrivi FormatSpace("script By I Legend per lottoCed's amici",150,- 1)
    Scrivi
    Scrivi "Tabella Statistica per formazioni libere" & " ",1,,RGB(252,227,143),,5
    Scrivi
    Scrivi "Range Ricerca Estrazioni dal :{" & DataEstrazione(Ini) & " } al : {" & DataEstrazione(Fin) & "}",1,,,,3
    Scrivi "Estrazioni Totali Analizzati :{" & nEstr & "}",1,,,,3
    Scrivi "Numeri di ricerca            :{" & StringaNumeri(nNumeri) & "}",1,,,,3
    Scrivi "Sviluppo numeri in           :{" & k - 1 & " " & NomeCombinazione(nCombinazione) & "}",1,,,,3
    Scrivi "Analesi combinazione per     :{" & NomeSorte(nSorte) & "}",1,,,,3
    Scrivi "Ciclo Teorico                :{" & nValore & "}",1,,,,3
    Scrivi "Frequenza Teorica            :{" & freqTeorica & "}",1,,,,3
    Scrivi "Ruota di ricerca             :{" & NomeRuota(aRu(1)) & "}",1,,,,3
    Scrivi "Ordinamento colonna num      :{" & aTitolo(idOrd) & "}",1,,,,3
    Scrivi "Ordino Colonna in modo       :{" & TipOrd & "}",1,,,,3
    Scrivi
    Call SetTableWidth("100%")
    If TipOrd = 1 Then Call AddRigaTabella(aTitolo,RGB(108,194,243),,3,vbWhite)',"Consolas")
    Call CreaTabella(idOrd,TipOrd,0)
    'If ScriptInterrotto Then Exit Sub
End Sub
' riporto qui di seguito tutte le funzioni utilizzate
' per la sub main
' ovviamente possono essere ottimizzate
Sub AlimetaArrayRisultato(aRisultato,k,s,FreqTot,Scarto,RitMese,RitMed,ritardomax,IncrRitMax,DevStd,disCeb,ScaCeb,Gen,Feb,Mar,Apr,Mag,Giu,Lug,Ago,Stt,Ott,Nov,Dic)
    aRisultato(1) = k ' id
    aRisultato(2) = s ' combinazioni analizzate
    aRisultato(3) = FreqTot'frequenza combinazione
    aRisultato(4) = Scarto ' differenza freq.reeale e differenza teorica
    aRisultato(5) = RitMese ' ritardo cronologico
    aRisultato(6) = RitMed ' ritardo medio
    aRisultato(7) = ritardomax ' ritardo storico
    aRisultato(8) = IncrRitMax ' incremento ritardo storico
    aRisultato(9) = DevStd ' deviazione standard
    aRisultato(10) = disCeb 'disegualianza di cebicev
    aRisultato(11) = ScaCeb ' scarto tra valore ipotizzato e valore del ritardo reale
    aRisultato(12) = Gen 'Gennaio ' frequenza per mese
    aRisultato(13) = Feb'Gennaio ' frequenza per mese
    aRisultato(14) = Mar 'Gennaio ' frequenza per mese
    aRisultato(15) = Apr 'Gennaio ' frequenza per mese
    aRisultato(16) = Mag 'Gennaio ' frequenza per mese
    aRisultato(17) = Giu 'Gennaio ' frequenza per mese
    aRisultato(18) = Lug 'Gennaio ' frequenza per mese
    aRisultato(19) = Ago 'Gennaio ' frequenza per mese
    aRisultato(20) = Stt 'Gennaio ' frequenza per mese
    aRisultato(21) =  Ott 'Gennaio ' frequenza per mese
    aRisultato(22) =  Nov 'Gennaio ' frequenza per mese
    aRisultato(23) =  Dic 'Gennaio ' frequenza per mese
End Sub
Function ImpostaParametri(aNumeri,nCombinazione,nSorte,Ctr,idOrd,TipOrd,aRu,Ruota,Ini)
    Dim bRet
    Ini = InizioArchivio(3914)
    If Ini > 0 Then
        Call ScegliNumeri(aNumeri)
        If IsArray(aNumeri) Then
            nCombinazione = ScegliCombinazione
            If nCombinazione > 0 Then
                nSorte = SelEsito
                If nSorte > 0 Then
                    'If nCombinazione < nSorte Then MsgBox "hai inserito Un Valore errato riscrivi ": nSorte = CInt(SelEsito)
                    Do While nCombinazione < nSorte
                        MsgBox "hai inserito Un Valore errato riscrivi ": nSorte = CInt(SelEsito)
                        If nSorte = - 1 Then Exit Do
                    Loop
                    If nSorte > 0 Then
                        Ruota = SelRuota ' funziona per selezionare la ruota  statistica su tutte o solo per una ruota
                        If Ruota > 0 Then
                            aRu(1) = Ruota
                            If Ruota = 11 Then
                                Ctr = 10
                            Else
                                Ctr = 1 ' valore utilizzato per calcolo del ciclo teorico
                            End If
                            idOrd = Ordinamento ' seleziono la colonna che voglio ordinare
                            If idOrd > 0 Then
                                TipOrd = TipoOrdinamento ' Crescente o decrescente
                                bRet = True ' per default torna true
                            End If
                        End If
                    End If
                End If
            End If
        End If
    End If
    ImpostaParametri = bRet
End Function
Function TrovaFrequenzaMese(aNumeri,aRu,nSorte,Ini,fin,nMese)
    Dim k
    Dim FreqMese
    FreqMese = SerieFreqTurbo(Ini,fin,aNumeri,aRu,nSorte)
    TrovaFrequenzaMese = FreqMese
End Function
Sub ImpostaEstrazioniAttivePerMese(nMese,Ini,fin)
    Dim k
    If nMese = "TUTTI" Then
        Call ResetEstrazioniAttive(nMese,Ini,fin)
    Else
        For k = Ini To fin
            If Mese(k) = nMese Then
                Call ImpostaEstrazione(k,True)
            Else
                Call ImpostaEstrazione(k,False)
            End If
        Next
    End If
End Sub
Sub ResetEstrazioniAttive(nMese,Ini,fin)
    Dim k
    For k = Ini To fin
        Call ImpostaEstrazione(k,True)
    Next
End Sub
Function TrovaRitardoMese(aNumeri,aRu,nSorte,Ini,fin,nMese)
    Dim k
    Dim RitMese
    If nMese <> "TUTTI" Then
        Call ImpostaEstrazioniAttivePerMese(nMese,Ini,fin)
    End If
    RitMese = SerieRitardoTurbo(Ini,fin,aNumeri,aRu,nSorte)
    TrovaRitardoMese = RitMese
End Function
Function NomeCombinazione(a)
    Dim ris
    Select Case a
    Case 1
        ris = "Estratti"
    Case 2
        ris = "Ambi"
    Case 3
        ris = "Terzine"
    Case 4
        ris = "Quartine"
    Case 5
        ris = "Cinquine"
    End Select
    NomeCombinazione = ris
End Function
Function Ordinamento
    Dim Ord
    Dim ret
    Dim aTitolo
    ' gli array partono sempre da 0
    aTitolo = Array("","","","freq","Scarto","Rit","RitMed","RitSto","IncR.s","DevStd","disCeb","ScaCeb99%","GEN","FEB","MAR","APR","MAG","GIU","LUG","AGO","Set","OTT","NOV","DIC")

    ret = ScegliOpzioneMenu(aTitolo,3,"Seleziona Ordinamento  per la colonna :")
    ' serve per gestire il tasto annulla
    If ret >= 0 Then
        Ord = ret 
    Else
        Ord = ret
    End If
    Ordinamento = Ord
End Function
Function TipoOrdinamento
    Dim Ord
    Dim ret
    Dim aTitolo
    aTitolo = Array("","Crescente","DeCrescente")
    ret = ScegliOpzioneMenu(aTitolo,1,"Seleziona Tipo di Ordinamento  :")
    ' serve per gestire il tasto annulla
    If ret >= 0 Then
        If ret = 1 Then Ord =  1 : Else Ord = -1
    Else
        Ord = ret
    End If
    TipoOrdinamento = Ord
End Function
Function ScegliCombinazione
    Dim ret
    Dim aVoci
    ' gli array partono sempre da 0
    aVoci = Array("","Estratti","Ambi","Terzine","Quartine","Cinquine")
    ret = ScegliOpzioneMenu(aVoci,3," Combina i numeri In :")
    ' serve per gestire il tasto annulla
    ScegliCombinazione = ret
End Function
Function SelEsito
    Dim ret
    Dim aVoci
    ' gli array partono sempre da 0
    aVoci = Array("","Estratto","Ambo","Terno","Quaterna","Cinquina")
    ret = ScegliOpzioneMenu(aVoci,2," Analesi per Sorte di : ")
    SelEsito = ret
End Function
Function SelRuota
    Dim ret
    Dim aVoci
    ' gli Array partono sempre da 0
    aVoci = Array("","BARI","CAGLIARI","FIRENZE","GENOVA","MILANO","NAPOLI","PALERMO","ROMA","TORINO","VENEZIA","TUTTE","NAZIONALE")
    ret = ScegliOpzioneMenu(aVoci,1," Analizza Ruota di : ")
    SelRuota = ret
End Function
Function InizioArchivio(nInizio)
    Dim es
    Dim ret
    ReDim aVoci(EstrazioneFin)
    For es = nInizio To EstrazioneFin
        aVoci(es) = DataEstrazione(es)
    Next
    ret = ScegliOpzioneMenu(aVoci,nInizio,"Inserisci Data Inizio Analisi")
    InizioArchivio = ret
End Function
Function RitardoMedio(aRitardi())
    Dim k
    Dim nElementi
    Dim nMedia
    For k = 1 To UBound(aRitardi) - 1
        nElementi = nElementi + 1
        nMedia = nMedia + aRitardi(k)
    Next
    nMedia = Round(Dividi(nMedia,nElementi),2)
    RitardoMedio = nMedia
End Function
Function CalcolaDeviazioneStd(aRitardi())
    Dim k
    Dim somRit,nMedia,nElementi,nVarianza,nSomSQVar
    For k = 1 To UBound(aRitardi) - 1
        nElementi = nElementi + 1
        somRit = somRit + aRitardi(k)
    Next
    nMedia = Round(Dividi(somRit,nElementi))
    For k = 1 To UBound(aRitardi) - 1
        nSomSQVar = nSomSQVar +((nMedia - aRitardi(k)) ^ 2)
        nVarianza = Round(Dividi(nSomSQVar,nElementi),2)
    Next
    CalcolaDeviazioneStd = Round(Sqr(nVarianza),2)
End Function
Function ContaEstrazioni(Ini,Fin,r)
    Dim Conta,es
    For es = Ini To Fin
        If SommaEstratti(es,r) >= 15 Then Conta = Conta + 1
    Next
    ContaEstrazioni = Conta
End Function


X Joe avevo scritto la funzione perchè volevo usare la funzione Case per capirne il funzionamento,avevo gia visto la funzione nomeSortex
x questo l'ho chiamata cosi per allinearmi :) spero sia corretta...
Luigi il tuo script è superlativo!!!!!
Ciao amici :)
 
ciao ragazzi e grazie sempre per tutto il credito che mi date ...
Continuando a parlare di cose tecniche il consiglio sempre valido è quello di avere sempre l'ultima versione del programma
non tanto per l'introduzione di nuove funzionalità ma perche ogni aggiornamento contiene sempre anche qualche piccola magari impercettibile correzione , per esempio mi ero accorto che nella funzione Find nell'editor script in alcuni casi il programma crashava , ora con questo nuovo aggiornamento credo di aver risolto oltre ad aver naturalmente corretto il problema su "ordina tabella" di cui ci siamo resi conto.
Per allacciarmi al discorso di Joe sulle funzioni mancanti potrebbe convenire creare uno script che contenga solo funzioni , nessuna sub main , da usare tramite l'istruzione "includi" nei propri script come fosse un modulo, anche se è ancora meglio usare sempre ove possibile le funzionalità offerte dal linguaggio in modo da standardizzare il codice e concentrarsi solo sulla logica del proprio script.
Caro Legend , lo script è tutto tuo .. io si puo dire che non so manco cosa faccia .. ho corretto solo le criticità che ne provocavano la lentezza, lo avevi impostato bene e infatti vedi che non ho minimamente cambiato la logica ..se vuoi che giri ancora piu veloce devi trasformarlo in exe , è un operazione automatica che si fa tramite un pulsantino presente nell'editor, pero è necessario possedere il vb6 senno non funziona.
un altro consiglio che ti voglio dare Legend è quello di studiarti uno per uno tutti gli script che stanno nella directory test, ognuno serve epr testare una delle funzionalita del linguaggio , alcuni sembrano banali e sono tuti abbastanza semplici e generici ma sono come dei mattoncini , un singolo mattonciono sembra poco , ma con tanti mattoncini si fa una villa ... spero di rendere bene l'idea con la metafora.

ciao a tutti ...

la nuova versione del programma è qui

SetupSpaziometria_1_5_1
 
Ultima modifica di un moderatore:
Ciao Mike, ciao Luigi,grazie troppo buono...........Seguirò il tuo consiglio :)Appena la connessione me lo consente scarico la versione nuova..Purtroppo non ho vb6, avevo scaricato vb2010 express  ma non funziona sul mio pc, non ho i requisiti di sistema sufficenti ...Vb6 non è free vero? forse se ha qualcuno fa piacere e non è difficile può fare un plug.in .........Grazie ancora mille Luigi se alle superiori avessi avuto un prof come te forse ................................Sai quando si doveva fare l'ora d'informatica mi veniva male. Ti posso dire che solo l'idea mi terrorizzava,All'epoca c'era il dos ..c: e non so......Una volta chiesi cosa significava quello che aveva scritto ,(perchè se non capisco non c'è verso che impari a fare niente)la  risposta fu molto esaustiva, non dovevo sapere che significava ma che si faceva così.....dovevo imparare a memoria .................Peccato .Spero che le cose Vadano Meglio oggigiorno....Grazie ancora mille :)Buona serata a tutti :)
 
Ultima modifica:
sig. disaronno si potrebbe adattare al 10elotto5m l'unica differenza e che dovrebbe trovare due quertine con l'elemento mancante e formare i due elementi mancanti capogioco e formare due terzine
cioè 1.2._.4
1._.3.4

formare 2.3.1
2.3.4
 
BRAVISSIMO

BRAVISSIMO

LOGOSILOP.gif

Buona sera a tutti.
Per prima cosa voglio fare i complimenti al bravissimo i legend
che in brevissimo tempo è riuscito a mettere in pratica (script) i consigli/lezioni
dei bravissimi LuigiB, joe91,mike58 e claudio8 ….

BRAVO BRAVO BRAVO​
hai fatto un ottimo script
per la ricerca libera per qualsiasi combinazione.
stickman.gif

Siccome da alcuni mesi sto utilizzando per i miei studi alcuni script
su lotterie diverse dal lotto tradizionale, utilizzando le funzioni con File di Testo [FT],
vorrei chiedere a LuigiB & company
se era possibile poter convertire il presente script nella ricerca statistica su archivi in formato .txt
so che il buon Mike58 già si adoperato in tal senso con altri script (PE).

L'archivio che m'interessa maggiormente è in formato testo composto da 5 estratti su 49 numeri
che di seguito vi elenco alcune estrazioni iniziali:

id,data,n1,n2,n3,n4,n5
===============

1,06/10/2008,19,33,41,24,27
2,08/10/2008,24,48,32,41,22
3,11/10/2008,46,22,10,39,20
4,13/10/2008,11,10,41,37,48
5,15/10/2008,49,28,18,20,40
6,18/10/2008,44,35,4,32,39
7,20/10/2008,43,7,48,31,15
8,22/10/2008,11,28,12,48,14


===============
Mettendo all'inizio dello script il seguente comando:

Call ApriBaseDatiFT("C:\Documents and Settings\Asus\Documenti…… ....txt",5,",",49)

e aggiungendo dove ci vuole nelle altre funzioni il finale FT
... che di queste modifiche non sono capace, grazie.
stickman.gif

Sperando che questa mia richiesta venga presa in considerazione
auguro a tutti una buona serata.
A presto
Silop
 
Ultima modifica:
Ciao a tutti :)
X Luigi , sei un ottimo professore, perchè sei innamorato di quello che fai :-) , si vede la passione in ogni riga che scrivi.
Basta cosi altrimenti sembra che sviolino :),
x Silop , grazie per i complimenti :) come ben hai detto devo tutto ai miei grandi maestri ;)
Purtroppo non sono in grado di fare quello che chiedi perchè non ho ancora affrontato il discorso dei file txt, ma se mike o chiunque vuole farlo sarà un altro mattoncino per il mio sapere,,,,
Buona serata a tutti.......
PS: C'è ancora una miglioramento da fare allo script , ma non a livello di codice , quello è perfetto.Ci devo studiare su, ho paura a metterci mano :)
L'idea è aggiungere ancora una combox che andro a gestire come le altre nella funzione di impostazioni,
dove si potra scegliere se fare lo
1)sviluppo integrale,
2)selezionare un capogioco tra i numeri dell'array scelto
3)due capogichi

Ma credo che se faccio cosi dovrò sviluppare 3 sub
1 initsviluppo integrale che gia c'è
2 scrivere se non c'è una sub che combina i numeri in capogioco&sviluppo(a numeri-capogioco,nCombinazione-1)
ci devo pensare non credo sia facile
Questa è la prossima sfida :)
Notte a tutti
 
Ciao Silop , per fare le modifiche che chiedi biosnga stare sulla falsa riga dello script originale , non è difficile.. pero a me ti dico la verita non va di farlo , una volta che ho spiegato poi le varianti e le evoluzioni spero possiate farle da soli..
 
legend per la faccenda dei capigioco è semplicissimo
, fai finta che hai 20 numeri nello sviluppo , 1 capogioco
benisimo , sviluppi l'integrale di 19 numeri a classe N- 1 e ad ogni colonna
dello sviluppo ci aggiungi il capogico , basta che usi
l'istruzione "redim preserve" per riidmensionare l'array della colonna
sviluppata ad un valore classe = N , cosicche creando un nuovo elemento lo puoi valorizzare
col capogioco.
 
Ciao Tutti gli intervenuti, intanto grazie a Luigi per la nuova versione di spazioMetria con le nuove migliorie, e leggendo i vari quesiti non è semplice mettere ordine al tutto.

Creare le function cosi da richiamarle nello script con il codice INCLUDI trovo che sia una buona idea, ma necessità di un po' di allenamento da parte degli scripter in quanto non facilmente usata e poi potrebbe essere non capibile da parte degli utilizzatori esterni, però sicuramente utile.

Sullo sviluppo con il capogioco, io ho già affrontato in qualche mio script postato una soluzione, senza usare la Redim Preserve (ma perché ho poco dimestichezza con questa ) con una qualche escamotage che adesso ricordo anche poco ed era funzionale ma se è si dovessimo arrivarci con un array valorizzato usando il Preserve ben venga anche così.

Per Silop non è facile mettere le mani su script altrui e districarsi nelle linee di codice da cambiare ma è sicuramente fattibile
basta un po' di impegno (conta pure sul mio supporto ).

Almeno in questo il nostro Prof ad Honorem lasciamo riposare.

Ciao se c'è altro ci aggiorniamo a domani.

Buona domenica
 

Ultima estrazione Lotto

  • Estrazione del lotto
    martedì 21 gennaio 2025
    Bari
    78
    09
    70
    03
    23
    Cagliari
    32
    88
    30
    13
    45
    Firenze
    87
    23
    15
    39
    86
    Genova
    71
    48
    67
    59
    23
    Milano
    58
    50
    80
    85
    29
    Napoli
    90
    81
    79
    82
    62
    Palermo
    70
    33
    90
    05
    10
    Roma
    15
    71
    55
    85
    76
    Torino
    89
    09
    18
    33
    69
    Venezia
    44
    80
    82
    73
    58
    Nazionale
    80
    25
    13
    63
    17
    Estrazione Simbolotto
    Bari
    39
    36
    34
    14
    31
Indietro
Alto