Option Explicit
' Lo script si è arricchito un po alla volta quindi si è rallentato nella sua esecuzione
' l'utilizzo è una semplice ricerca statistica delle combinazioni scelte
' possiamo trovare la frequenza globale della formazione e allo stesso tempo vedere la frequenza mese per mese
' il ritardo cronologico,il ritardo medio,il ritardo storico,e l'incremento del medesimo
' il calcolo effettuato e l'output parrebbe essere corretto , ma consiglio sempre di verificare con altre fonti , per eliminare o segnalare
'eventuali errori sempre possibili vista l'inesperienza.
' lo script non restituisce (e non vuole farlo) previsioni
' script by I legend per gli amici di lottoced
'Ringraziamenti :
' senza gli esempi di Mike , di Claudio, di LuigiB, e le *importantissime* Lezioni/spiegazioni di Joe
' non sarei riuscito a scrivere una solo riga
' Purtoppo l'ordina matrice non funziona, le form di scelta sono pronte ma non so come posso utilizzarle
' Se qualcuno vuole ottimizzare lo script o indicarmi dove ottimizzare sarei davvero grato
'Buono studio e divertimento a tutti
Sub Main
Dim Ini,Fin,nEstr,es,nMese,k,x,r,nValore,idOrd,TipOrd,aRetRitardi,Ctr,DevStd,disCeb,ScaCeb
Dim TUTTI,Gennaio,Febbraio,Marzo,Aprile,Maggio,Giugno,Luglio,Agosto,Settembre,Ottobre,Novembre,Dicembre
Dim s,e,ritardo,ritardomax,IncrRitMax,Frequenza,freqTeorica,RitMed,FreqMese,freq,RitMese,Scarto
Dim nNumeri,aColonne
Dim aNumeri(90)
Dim aRu(1)
Dim nCombinazione,nSorte,nCiclo
ReDim aRit(0)
ReDim aRetIdEstr(0)
Ini = InizioArchivio ' funzione inizio data archivio
Fin = EstrazioneFin
'nEstr = Fin - Ini ' numero di estrazioni da analizzare serve per calcolare frequenze
Call ScegliNumeri(nNumeri)
nCombinazione = ScegliCombinazione
nSorte = CInt(SelEsito)
r = SelRuota ' funziona per selezionare la ruota statistica su tutte o solo per una ruota
'nMese = SelMese
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 ' seleziono in che modo applicare l'ordinamento -1 ascendente,1 discendente
'scrivo qui come vorrei utilizzare ordina matrice '''''
' purtroppo non riesco ad applicarla alla tabella con sceglinumeri è facile
'OrdinaMatrice aRisultato,TipOrd,idOrd
'
'Imposto i titoli delle colonne della tabella statistica
'
ReDim aTitolo(23)
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) = "DisCeb88%"
aTitolo(11) = "ScaCeb"
aTitolo(12) = "GEN" ' frequenza nel mese di....
aTitolo(13) = "FEB"' frequenza nel mese di....
aTitolo(14) = "MAR" ' /////
aTitolo(15) = "APR" '////
aTitolo(16) = "MAG" '////
aTitolo(17) = "GIU"
aTitolo(18) = "LUG"
aTitolo(19) = "AGO"
aTitolo(20) = "SET"
aTitolo(21) = "OTT"
aTitolo(22) = "NOV"
aTitolo(23) = "DIC"
' inizializzo la tabella '''la prima riga
InitTabella aTitolo,RGB(108,194,243),,3,RGB(255,255,255),"Consolas"
' qui scrivo il messaggio di avanzamento elaborazione
' non è il posto più corretto ma non rallenta tanto l'esecuzione
'For es = Ini To Fin
'Call Messaggio("elaborazione in corso estrazione n°:" & es)
'Call AvanzamentoElab(Ini,Fin,es)
'Next
nEstr = ContaEstrazioni(Ini,Fin,r)
nValore = Round(CicloTeorico(nCombinazione,nSorte,CInt(Ctr)),2)' ctr= 1 sta per 1 ruota, ctr = 10 per tutte
freqTeorica = Round(Dividi(nEstr,nValore),2) 'numero di estrazioni esaminate / il proprio CicloTeorico
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
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
TUTTI = TrovaFrequenzaMese(aNumeri,aRu,nSorte,Ini,Fin,"TUTTI")
Gennaio = TrovaFrequenzaMese(aNumeri,aRu,nSorte,Ini,Fin,1)
Febbraio = TrovaFrequenzaMese(aNumeri,aRu,nSorte,Ini,Fin,2)
Marzo = TrovaFrequenzaMese(aNumeri,aRu,nSorte,Ini,Fin,3)
Aprile = TrovaFrequenzaMese(aNumeri,aRu,nSorte,Ini,Fin,4)
Maggio = TrovaFrequenzaMese(aNumeri,aRu,nSorte,Ini,Fin,5)
Giugno = TrovaFrequenzaMese(aNumeri,aRu,nSorte,Ini,Fin,6)
Luglio = TrovaFrequenzaMese(aNumeri,aRu,nSorte,Ini,Fin,7)
Agosto = TrovaFrequenzaMese(aNumeri,aRu,nSorte,Ini,Fin,8)
Settembre = TrovaFrequenzaMese(aNumeri,aRu,nSorte,Ini,Fin,9)
Ottobre = TrovaFrequenzaMese(aNumeri,aRu,nSorte,Ini,Fin,10)
Novembre = TrovaFrequenzaMese(aNumeri,aRu,nSorte,Ini,Fin,11)
Dicembre = TrovaFrequenzaMese(aNumeri,aRu,nSorte,Ini,Fin,12)
' 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(TUTTI - 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 +(3*DevStd),2) ' 10*(devstd)limite prossimo al 99% , 5*(devstd) limite al 96%, 3*(devstd) limite al 88%
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"
'For es = Ini To Fin
'Call AvanzamentoElab(1,UBound(aColonne),k)
'Call Messaggio("Sto Elaborando la Combinazione :" & s)
'Next
ReDim aRisultato(23)
aRisultato(1) = k ' id
aRisultato(2) = s ' combinazioni analizzate
aRisultato(3) = TUTTI'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) = Gennaio ' frequenza per mese
aRisultato(13) = Febbraio'
aRisultato(14) = Marzo'
aRisultato(15) = Aprile
aRisultato(16) = Maggio
aRisultato(17) = Giugno
aRisultato(18) = Luglio
aRisultato(19) = Agosto
aRisultato(20) = Settembre
aRisultato(21) = Ottobre
aRisultato(22) = Novembre
aRisultato(23) = Dicembre
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)
Next
Scrivi "Tabella Statistica per formazioni libere" & " ",1,,RGB(252,227,143),,5
Scrivi
Scrivi "Range Ricerca Estrazioni dal :{" & GetInfoEstrazione(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%")
Call CreaTabella
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
For k = Ini To fin
If nMese = "TUTTI" Then Call ImpostaEstrazione(k,True)
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(23)
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) = "GEN" ' frequenza nel mese di....
aTitolo(11) = "FEB"' frequenza nel mese di....
aTitolo(12) = "MAR" ' /////
aTitolo(13) = "APR" '////
aTitolo(14) = "MAG" '////
aTitolo(15) = "GIU"
aTitolo(16) = "LUG"
aTitolo(17) = "AGO"
aTitolo(18) = "SET"
aTitolo(19) = "OTT"
aTitolo(20) = "NOV"
aTitolo(21) = "DIC"
Ord = ScegliOpzioneMenu(aTitolo,1,"Seleziona Ordinamento per la colonna :") + 2
Ordinamento = Ord
End Function
Function TipoOrdinamento
Dim Ord
ReDim atitolo(1)
atitolo(0) = "Ascendente"
atitolo(1) = "Discendente"
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,1," 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,1," 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 SelMese
Dim Ruota
ReDim aVoci(12)
aVoci(1) = "GENNAIO"
aVoci(2) = "FEBRAIO"
aVoci(3) = "MARZO"
aVoci(4) = "APRILE"
aVoci(5) = "MAGGIO"
aVoci(6) = "GIUGNO"
aVoci(7) = "LUGLIO"
aVoci(8) = "AGOSTO"
aVoci(9) = "SETTEMBRE"
aVoci(10) = "OTTOBRE"
aVoci(11) = "NOVEMBRE"
aVoci(12) = "DICEMBRE"
Ruota = ScegliOpzioneMenu(aVoci,1," Analizza Mese di : ")
SelMese = 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 ' versione proposta da Joe grande:-)
Next
ContaEstrazioni = Conta
End Function