Novità

Per dirla alla "Austin Powers" sarebbe...

i legend;n1936710 ha scritto:
Codice:
Option Explicit

Class clsLunghetta

Private aNumeri ' contiene i numeri della lunghetta
Private mInizio,mFine,aRuote,mSorte ' parametri per il range analisi
Private mClasse ' contine la classe della lunghetta
Private aElencoRit ' conterra l'elenco dei ritardi per la lunghetta
Private aIdEstrElencoRit ' conterra l'elenco dei ritardi per la lunghetta
Private aElencoIncrRitMax 'contiene l'elnco degli incrementi del ritardo max
Private aIdEstrIncrRitMax ' conterra l'elenco degli id estrazione in
'cui si è registrato l'incremento del ritmax conosciuto
Private Rit, RitMax, Inc, Freq, MaxIncSto

' inizializza le proprietà dell'oggetto
Sub Init(sLunghetta,sChrSep,RangeInizio,RangeFine,vetRuote,SorteInGioco, Ritardo,Incremento, MaxInc,Frequenza)

' acquisisco i parametri per l'analisi
mInizio = RangeInizio
mFine = RangeFine
aRuote = vetRuote
mSorte = SorteInGioco
' alimento il vettore con i numeri della lunghetta
Call AlimentaVettoreLunghetta(sLunghetta,sChrSep)
' calcolo l'elenco dei ritardi
Call ElencoRitardiTurbo(aNumeri,aRuote,mSorte,mInizio,mFine,aElencoRit,aIdEstrElencoRit)
' alimento il vettore che contien l'elenco degli incrementi rit max
Call GetStatistica
Incremento =inc : Ritardo =Rit : Frequenza =Freq
Call AlimentaVettoreIncrRitMax
MaxInc= MaxIncSto
End Sub
Private Sub AlimentaVettoreLunghetta(sLunghetta,sChrSep)

' antepongo un carattere separatore per fare in modo che
' aNumeri si valorizzi dall'indice 1 (senno si sarebeb valorizzato dall'indice 0)
Call SplitByChar((sChrSep & sLunghetta),sChrSep,aNumeri)
' valorizzo la classe della lunghetta
mClasse = UBound(aNumeri)
End Sub
Private Sub AlimentaVettoreIncrRitMax
Dim nRitMax,nIncr,nId,k

nId = 0

' inizializzo il vettore a 0 elementi
ReDim aElencoIncrRitMax(0)
ReDim aIdEstrIncrRitMax(0)

' ciclo sul vettore dei ritardi
For k = 1 To UBound(aElencoRit)-1
' se il ritardo corrente supera il ritmax attuale..
If aElencoRit(k) > nRitMax Then
If nRitMax > 0 Then
' se il ritmax attuale è >0 (ivvero ne esiste uno)
' calcolo di quanto si è incrementato
nIncr = aElencoRit(k) - nRitMax
' incremento il contatore dei valori trovati
nId = nId + 1
' ridimensiono il vettore mantenendo i valori precedenti ma
' aggiungendone uno
ReDim Preserve aElencoIncrRitMax(nId)
' memorizzo il valore
aElencoIncrRitMax(nId) = nIncr

' ridimensiono il vettore mantnendo i valori precedenti ma
' aggiungendone uno
ReDim Preserve aIdEstrIncrRitMax(nId)
' memorizzo l'id dell'estrazione dove si è avuto l'incremento
aIdEstrIncrRitMax(nId) = aIdEstrElencoRit(k)

End If

nRitMax = aElencoRit(k)

End If
Next
MaxIncSto =massimov ( aElencoIncrRitMax )
End Sub

Private Sub GetStatistica
Call statisticaformazioneturbo ( aNumeri, aRuote, mSorte, Rit, RitMax, Inc, Freq )
End sub
Public property get isCondizioneRispettata
If Inc >0 Then
If MaxIncSto -Inc < = 3 then IsCondizioneRispettata = true
End if
End property
End Class
Sub Main

' codice usato solo per testare la classe
Dim clsL,n, n1
Dim Rit, Incr, Freq, MaxInc
Dim aNum

Set clsL = New clsLunghetta

ReDim aRuote(1)
aRuote(1) = 5
' intestazione
Scrivi " Form|Rit |Inc |incSto|Freq"
For n = 1 To 89
For n1=n+1 To 90
aNum =n&"."&n1
Call clsL.Init ( aNum, ".",3950,estrazionefin ,aRuote,1,rit, Incr, MaxInc, Freq )
If clsL.IsCondizioneRispettata Then
Scrivi aNum &" ",1,0
scrivi Rit &" ",0,0
Scrivi incr &" ",0,0
Scrivi MaxInc &" ",0,0
Scrivi freq
End If
Next
Next

Set clsL = Nothing


End Sub
Ciao luigi non spezzarsi le braccine
Ho scritto la funzione come condizione filtro e messo un esempio per vedere se può essere un abbozzo di statistica.
Il mio script è formattato bene da cell troppo codice.
Se ci siamo togliamo il di più e proseguiamo.
In questo script tolgo l ultimo ritardo perfavore provare in entrambi i modi per valutarne la differenza.
Tom fatti sentire ciao:)


Ciao legend più che farmi sentire.. mi farò leggere.. :p ;) ma il papiro... che ho scritto al numero #76 di questo thread l'hai visto? :D Ad ogni modo ho provato a copiare e incollare questo tuo incredibile codice sul programma del grande luigi e ad eseguirlo ma mi da errore riferito a questa riga:

Codice:
If MaxIncSto-Inc < = 3 Then isCondizioneRispettata = True

A te funzia? ;)

Ciao grandissimooo ;)
 
Ultima modifica:
non devi togliere l'ultimo ritardo senno è impossibile trovare la condizione voluta da lottotom ... porta pure avanti uno script parallelo ... le braccine rimangono apposto ..anche perche devi pure continuare con le implemetazioni che dico io ...:-) ora dovremmo prevedere una sub che disegni lo stesso grafico che ci ha fatto vedere tom nei post precedenti , pero prima di fare questo bisogna
aggiungere del codice alla proprietà che testa la condizione in base a quanto ci ha detto Tom e che ripeto.

bisogna estrarre le combinazioni che hanno il valore attuale di IncrRitMax uguale al massimo gia riscontrato

ora se tu escludi l'ultimo ritardo cioè proprio quello che sta dando luogo all'incremento che stiamo cercando è evidente che sta famosa condizione non la troveremo mai ...

vai procedi con la modifica
 
Ultima modifica di un moderatore:
Allora Legend , ho preso il tuo script e l'ho messo nell'editor cosi dopo averlo formattato bene ho iniziato ad analizzarlo.

ti dico subito che la condizione (ammesso che io abbia capito cosa voglia Lottotom) non viene identificata correttamente.

con la riga

Codice:
MaxIncSto = MassimoV(aElencoIncrRitMax)

ottieni il massimo valore nell'array , ma non deve essere cosi tu semmai lo dovresti cercare su tutto l'array tranne l'ultimo elemento quindi a quella funzione MassimoV non basta che passi l'array ma devi impostare anche i limiti


poi con quest' altra riga

Codice:
If MaxIncSto - Inc <= 3 Then isCondizioneRispettata = True

in reata stai sottraendo al valore massimo che avevi trovato in tutto il vettore l'ultimo incremento
quello corrente
per esempio se MaxIncSto valesse 50 e inc valesse 49 la tua formula darebbe 1 che essendo minore di tre farebbe tornare la funzione vera .. tutto il contrario di quello che voleva lottotom...sempre se ho capito bene.. perché incrRitMax corrente di 49 non è uguale (o al massimo superiore visto che Tom cerca proprio questo) a 50 .

altra cosa GetStatistica .. bene bravo mi hai anticipato tuttavia devi considerare che noi dobbiamo scrivere codice efficiente probabilmente la maggior parte delle lunghette che verranno lette dal file txt non rispetteranno la condizione ...quindi perché perdere tempo a fare la statistica sempre e comunque ? Tra l'altro non serve manco per sapere quale sia l'ultimo incr perché si puo calcolare dai dati che abbiamo.


purtroppo i professori anche se io non lo sono di certo :-) vengono ricordati sempre come dei grossi rompic..... ehehh dai va ...correggi poi si parla del grafico ..
.
 
Ok .allora riparto leggo per bene la spiegazione è vado.
Avevo pensato devo anche averlo scritto credo se è dove inserire get statistica e nell if era una buona idea , ma ho pensato devo splittare di nuovo i numeri?
Ho pensato che questo rallenta se il codice.
Tra parentesi con la classe lo script è 17 sec più veloce a parità di calcoli. Perché?
Cmq grazie per quello che mi / ci stai insegnando.
Magari avessi avuto un prof come te.

Ps
Con -3 mi avvicinò al ritardo per metterlo in gioco altrimenti se è uguale vuol dire che già sta superando.
Tom non so dove non va . MI dice l errore può essere un problema di scrittura.
Cmq si procede come dice luigi.
A dopo:)
 
Cmq si procede come dice luigi.
A dopo:)


parole sante .. mica per altro perché se sto facendo una spiegazione sto seguendo una traccia che io conosco ...non bisogna essere impazienti.

perciò Legend copia lo script numero 3 e limitati ad aggiungere la proprietà che t ho detto con il codice corretto per individuare la condizione richiesta , il resto verrà seguendo un ordine vedrai ...
 
Ultima modifica di un moderatore:
Ok fatto come al solito avevi ragione fa meno calcoli con i dati che avevamo.
Funziona ma spero che ti piaccia la soluzione che ho adottato :)
 
Codice:
Option Explicit

Class clsLunghetta
    
    Private aNumeri ' contiene i numeri della lunghetta
    Private mInizio,mFine,aRuote,mSorte ' parametri per il range analisi
    Private mClasse ' contine la classe della lunghetta
    Private aElencoRit ' conterra l'elenco dei ritardi per la lunghetta
    Private aIdEstrElencoRit ' conterra l'elenco dei ritardi per la lunghetta
    Private aElencoIncrRitMax 'contiene l'elnco degli incrementi del ritardo max
    Private aIdEstrIncrRitMax ' conterra l'elenco degli id estrazione in
                    'cui si è registrato l'incremento del ritmax conosciuto
    Private  MaxIncSto, UltInc 
    ' inizializza le proprietà dell'oggetto
    Sub Init(sLunghetta,sChrSep,RangeInizio,RangeFine,vetRuote,SorteInGioco,IncSto, uInc)
    
        ' acquisisco i parametri per l'analisi
        mInizio = RangeInizio
        mFine = RangeFine
        aRuote = vetRuote
        mSorte = SorteInGioco
        ' alimento il vettore con i numeri della lunghetta
        Call AlimentaVettoreLunghetta(sLunghetta,sChrSep)
        ' calcolo l'elenco dei ritardi
        Call ElencoRitardiTurbo(aNumeri,aRuote,mSorte,mInizio,mFine,aElencoRit,aIdEstrElencoRit)
        ' alimento il vettore che contien l'elenco degli incrementi rit max
        Call AlimentaVettoreIncrRitMax
IncSto =MaxIncSto 
uInc =UltInc 
    End Sub
    Private Sub AlimentaVettoreLunghetta(sLunghetta,sChrSep)
        
        ' antepongo un carattere separatore per fare in modo che
        ' aNumeri si valorizzi dall'indice 1 (senno si sarebeb valorizzato dall'indice 0)
        Call SplitByChar((sChrSep & sLunghetta),sChrSep,aNumeri)
        ' valorizzo la classe della lunghetta
        mClasse = UBound(aNumeri)
    End Sub
    Private Sub AlimentaVettoreIncrRitMax
        Dim nRitMax,nIncr,nId,k, LimSupInc 
        
        nId = 0
        
        ' inizializzo il vettore a 0 elementi
        ReDim aElencoIncrRitMax(0)
        ReDim aIdEstrIncrRitMax(0)

        ' ciclo sul vettore dei ritardi
        For k = 1 To UBound(aElencoRit)
            ' se il ritardo corrente supera il ritmax attuale..
            If aElencoRit(k) > nRitMax Then
                If nRitMax > 0 Then
                    ' se il ritmax attuale è >0 (ivvero ne esiste uno)
                    ' calcolo di quanto si è incrementato
                    nIncr = aElencoRit(k) - nRitMax
                    ' incremento il contatore dei valori trovati
                    nId = nId + 1
                    ' ridimensiono il vettore mantenendo i valori precedenti ma
                    ' aggiungendone uno
                    ReDim Preserve aElencoIncrRitMax(nId)
                    ' memorizzo il valore
                    aElencoIncrRitMax(nId) = nIncr
                    
                    ' ridimensiono il vettore mantnendo i valori precedenti ma
                    ' aggiungendone uno
                    ReDim Preserve aIdEstrIncrRitMax(nId)
                    ' memorizzo l'id dell'estrazione dove si è avuto l'incremento
                    aIdEstrIncrRitMax(nId) = aIdEstrElencoRit(k)
                    
                End If
                
                nRitMax = aElencoRit(k)
                
            End If
        Next
LimSupInc =ubound ( aElencoIncrRitMax ) 
MaxIncSto =massimov ( aElencoIncrRitMax, 0,LimSupInc -1)
UltInc =aElencoIncrRitMax ( ubound ( aElencoIncrRitMax ) ) 
    End Sub
    
Public property get isCondizioneRispettata 
If aidestrIncrRitMax  (ubound ( aIdEstrIncrRitMax ))= mfine then 
If aElencoIncrRitMax ( ubound ( aElencoIncrRitMax ) )  > = MaxIncSto  then IsCondizioneRispettata = true 
End if 
End property 
    
End Class
Sub Main
    
    ' codice usato solo per testare la classe
    Dim clsL,n,n1
Dim  aNum, incSto, uInc
    
    Set clsL = New clsLunghetta
    
    ReDim aRuote(1)
    aRuote(1) = 5
    Scrivi siglaruota ( aruote ) 
    For n = 1 To 89
For n1 = n + 1 To 90
ANum =format2 ( n )&"."&format2 ( n1 )
        Call clsL.Init(aNum, ".",3950,estrazionefin ,aRuote,1,incSto, uInc )
        If clsL.IsCondizioneRispettata Then
             Scrivi aNum & " | " ,1,0
Scrivi incSto &" | ",0,0
Scrivi uInc 
        End If
    Next
Next 
    
    Set clsL = Nothing
    
    
End Sub
Ricerca su Milano queste sono le coppie che hanno superato i loro incrementi storici,
Luigi che te ne pare?
Ciao buona serata.
Se leggi stasera e hai già pronte ke nuove indicazioni postale pure , altrimenti Buona notte:)
A domani:)
 
ciao Legend bravo ! Comunque per mantenere fede alla mia qualifica di rompiscatole devo dirti che anche se hai fatto bene io avevo detto : "copia lo script 3 e aggiungi solo la proprieta"
intendo dire che tutto il codice necessario per testare la condizione andava messo dentro la property ..
senza memorizzare altri valori pubblici che non serve mantenre in memoria dato che poi aggiungeremo la statistica completa della formazione e li dvremmo mettere altre variabili pubbliche (come avevi fatto anche tu ma ancora non ci siamo arrivati)

percio .. rimuvi tutto il codice non necessario dalle altre sub e calcola tutto dentro la property visto che il concetto per la verific a lo hai interpretato in modo esatto , bravo si riferiva a questo
 
nel frattempo che fai le modifiche che ho detto studiati questo semplice script che dimostra come si usa un grafico la prossima sub che scriveremo infatti disegna il grafico come ha fatto vedere lottoTom
Ricorda lo script che fai al massiomo puo essere diverso nel nome delle variabili per il resto deve essere uguale allo script 3

ciao



Codice:
Sub Main
    
    Dim x,y

    'PRIMO GRAFICO ==========================================================
    Call PreparaGrafico("Grafico di prova 1",,,,,10,10)
    
    ' prima riga
    ReDim aV(200,2)
    x = - 100
    For k = 0 To 200
        aV(k,1) = x
        aV(k,2) = NumeroCasuale(- 100,100)
        x = x + 1
    Next
    Call DisegnaLineaGrafico(aV,1,"A")

    ' seconda riga    
    x = - 100
    ReDim aV(200,2)

    For k = 0 To 200
        aV(k,1) = x
        aV(k,2) = NumeroCasuale(- 50,50)
        x = x + 1
    Next
    Call DisegnaLineaGrafico(aV,2,"B")


    ' scrive grafico nell'output
    Call InserisciGrafico
    ' =========================================================================
        
    'SECONDO GRAFICO ==========================================================

    Call PreparaGrafico("Grafico di prova 2",,,,,10,10)
    
    ' prima riga
    ReDim aV(100,2)
    x = 0
    For k = 0 To 100
        aV(k,1) = x
        aV(k,2) = NumeroCasuale(0,100)
        x = x + 1
    Next
    Call DisegnaLineaGrafico(aV,1,"A")
    
    ' seconda riga
    ReDim aV(100,2)
    x = - 100
    For k = 0 To 100
        aV(k,1) = x
        aV(k,2) = NumeroCasuale(- 100,0)
        x = x + 1
    Next
    Call DisegnaLineaGrafico(aV,2,"B")

    
    ' scrive grafico nell'output
    Call InserisciGrafico
    
    ' ===========================================================================

End Sub
 
Ultima modifica di un moderatore:
Ciao ovviamente dato che gia lo calcola possiamo scrivere anche il ritardo attuale utilizzando lo stesso sistema del uInc
Chi vuole può farlo:)
Scritto così è veloce il doppio.
L unico dato che ci manca è la frequenza vediamo

Cmq
UltRit =aElencoRit ( ubound ( aElencoRit ) )

Ma si potrebbe scrivere nella sub inisotto elencoritarditurbo
Questo va messo in inilo dcript funzione ed è una scheggia.
Vediamo i suggerimenti di luigi.
Gli altri perfavore dicano la loro.
X tom
Tom allora vuoi solo le formazioni con inc > = a incSto?
Secondo me sono interessanti anche quelle prossime al traguardo.
Chiedevi anche quanti fossero gli incrementi?
E facile basta fare uboun ( aElencoIncrRitMax )
Vuoi vedere anche la stringa a video?
Se hai delle richieste falle ora così luigi si organizza in sequenza logica il lavoro:)
Dopo diventa difficile metterci le mani .
Notte:)
 
Ciao luigi ok:)
Scusa ma vedo i post con il fuso orario -12
Vedo di riscrivere il tutto
A domani
Ora vado a nanna :)
Notte a tutti
 
i legend;n1936837 ha scritto:
...
X tom
Tom allora vuoi solo le formazioni con inc > = a incSto?
Secondo me sono interessanti anche quelle prossime al traguardo.
Chiedevi anche quanti fossero gli incrementi?
E facile basta fare uboun ( aElencoIncrRitMax )
Vuoi vedere anche la stringa a video?
Se hai delle richieste falle ora così luigi si organizza in sequenza logica il lavoro:)
Dopo diventa difficile metterci le mani .
Notte:)

Ciao legend (di nick e di fatto ;) ) dunque...


domanda: vuoi solo le formazioni con inc > = a incSto?
risposta: basta che rilevi tutte le condizioni aventi ultimo incmax storico relativo all'ultima estrazione in corso = al massimo incmaxstorico avuto nel passato per quella determinata sorte su ruota ( e/o ruote [unite]) e lunghetta. (tipo l'esempio del grafico che ho postato)

tua proposta: Secondo me sono interessanti anche quelle prossime al traguardo.
risposta: se ciò non è un problema, non ti richiede troppo impegno ulteriore e non inficia il risultato della domanda del punto 1 fai pure. Anzi forse è un opzione in più molto interessante.

domanda: Chiedevi anche quanti fossero gli incrementi?
risposta: Si mi chiedevo se fosse possibile rilevare anche quanti fossero gli incrementi massimi nel passato :) perchè sembra che a numero maggiore di questi ultimi corrisponda una teorica maggior stabilità di comportamento...

tua affermazione: E facile basta fare uboun ( aElencoIncrRitMax )
risposta: Figo! :D

domanda: Vuoi vedere anche la stringa a video?
risposta: Benissimo! :) Io avrei intenzione poi di creare anche un file txt relativo di salvataggio... ma quello so già come farlo con la riga di output se comunque ti scappa di implementare anche quello ben venga! :p :D

tuo consiglio: Se hai delle richieste falle ora così luigi si organizza in sequenza logica il lavoro:) Dopo diventa difficile metterci le mani.

risposta al tuo consiglio: L'unica cosa che mi è balenata in più rispetto a tutto quello che grazie a voi è già mirabilmente in fase di costruzione è solo domandarmi se tutto ciò potesse essere poi applicabile anche ad una versione per superenalotto cambiando che so l'archivio e analizzando 6 estratti anzichè 5 e lasciando tutto il resto... invariato... ma sicuramente al 99% ho detto un'eresia non avendo minimamente nè le vostre capacità di programmazione nè di sviluppo :o


Per adesso mi sembra anche troppo :eek: :cool: GRAZIE GRAZIE GRAZIE. Non vedo l'ora di provare la vostra creatura grandiiii !!!

'notte legend! ;) e 'notte luigi! ;)
 
Ultima modifica:
Proviamo così :)
Bon so perché ma se calcolo MaxIncSto nella property mi restituisce un calcolo errato, mentre se la dichiarò Private e la calcolo nella sub restituisce un valore corretto.
Nello script dato che non dà valori in output
Non me ne sarei accorto se non facevo le prove.
Come mai questa differenza?
Codice:
Option Explicit

Class clsLunghetta
    
    Private aNumeri ' contiene i numeri della lunghetta
    Private mInizio,mFine,aRuote,mSorte ' parametri per il range analisi
    Private mClasse ' contine la classe della lunghetta
    Private aElencoRit ' conterra l'elenco dei ritardi per la lunghetta
    Private aIdEstrElencoRit ' conterra l'elenco dei ritardi per la lunghetta
    Private aElencoIncrRitMax 'contiene l'elnco degli incrementi del ritardo max
    Private aIdEstrIncrRitMax ' conterra l'elenco degli id estrazione in
                    'cui si è registrato l'incremento del ritmax conosciuto
    Private MaxIncSto 
    ' inizializza le proprietà dell'oggetto
    Sub Init(sLunghetta,sChrSep,RangeInizio,RangeFine,vetRuote,SorteInGioco)
    
        ' acquisisco i parametri per l'analisi
        mInizio = RangeInizio
        mFine = RangeFine
        aRuote = vetRuote
        mSorte = SorteInGioco
        ' alimento il vettore con i numeri della lunghetta
        Call AlimentaVettoreLunghetta(sLunghetta,sChrSep)
        ' calcolo l'elenco dei ritardi
        Call ElencoRitardiTurbo(aNumeri,aRuote,mSorte,mInizio,mFine,aElencoRit,aIdEstrElencoRit)
        ' alimento il vettore che contien l'elenco degli incrementi rit max
        Call AlimentaVettoreIncrRitMax
    End Sub
    Private Sub AlimentaVettoreLunghetta(sLunghetta,sChrSep)
        
        ' antepongo un carattere separatore per fare in modo che
        ' aNumeri si valorizzi dall'indice 1 (senno si sarebeb valorizzato dall'indice 0)
        Call SplitByChar((sChrSep & sLunghetta),sChrSep,aNumeri)
        ' valorizzo la classe della lunghetta
        mClasse = UBound(aNumeri)
    End Sub
    Private Sub AlimentaVettoreIncrRitMax
        Dim nRitMax,nIncr,nId,k
        
        nId = 0
        
        ' inizializzo il vettore a 0 elementi
        ReDim aElencoIncrRitMax(0)
        ReDim aIdEstrIncrRitMax(0)

        ' ciclo sul vettore dei ritardi
        For k = 1 To UBound(aElencoRit)
            ' se il ritardo corrente supera il ritmax attuale..
            If aElencoRit(k) > nRitMax Then
                If nRitMax > 0 Then
                    ' se il ritmax attuale è >0 (ivvero ne esiste uno)
                    ' calcolo di quanto si è incrementato
                    nIncr = aElencoRit(k) - nRitMax
                    ' incremento il contatore dei valori trovati
                    nId = nId + 1
                    ' ridimensiono il vettore mantenendo i valori precedenti ma
                    ' aggiungendone uno
                    ReDim Preserve aElencoIncrRitMax(nId)
                    ' memorizzo il valore
                    aElencoIncrRitMax(nId) = nIncr
                    
                    ' ridimensiono il vettore mantnendo i valori precedenti ma
                    ' aggiungendone uno
                    ReDim Preserve aIdEstrIncrRitMax(nId)
                    ' memorizzo l'id dell'estrazione dove si è avuto l'incremento
                    aIdEstrIncrRitMax(nId) = aIdEstrElencoRit(k)
                    
                End If
                
                nRitMax = aElencoRit(k)
                
            End If
        Next
MaxIncSto = massimov ( aElencoIncrRitMax, 0, ubound ( aElencoIncrRitMax ) -1)
    End Sub
    
Public property get isCondizioneRispettata 
Dim  UltInc, LimSupInc 
LimSupInc =ubound ( aElencoIncrRitMax ) 

UltInc = aElencoIncrRitMax ( LimSupInc )
If aidestrIncrRitMax ( LimSupInc ) = mfine  then 
If  UltInc > = MaxIncSto  then  IsCondizioneRispettata = true 
End If 
End property 
    
End Class
Sub Main
    
    ' codice usato solo per testare la classe
    Dim clsL,n
    
    Set clsL = New clsLunghetta
    
    ReDim aRuote(1)
    aRuote(1) = 3
    
    For n = 1 To 90
        Call clsL.Init(n,".",5000,8000,aRuote,1)
        If clsL.IsCondizioneRispettata Then
             Call Scrivi "Il numero " & n & "Rispetta la condizione"
        End If
    Next
    
    Set clsL = Nothing
    
    
End Sub
Scritto solo la sub
Le variabili le ho dichiarate dentro.
Ma se ci servono successivamente ?
Adesso mi studio l ultimo script:)
Interessante l utilizzo dei grafici:)
Ora vado davvero a nanna:)
Ciao tom grazie per i complimenti ma luigi detta e io scrivo nella speranza d imparare :)
Grazie per le risposte :)
Ok credo che sia tutto possibile .intanto luigi vede
E ci dice come proseguire :)
Notte:)
 
Ultima modifica:
Benissimo , ottimo Legend .. il concetto lo hai capito hai implmentato bene hai pero lasciato una variabile globale della classe che non serviva , quella che memorizza lo storico.
Ora copia lo script numero 4 a fondo pagina cosi ci riallineamo

I valori statistici che ci serviranno li calcoleremo a suo tempo solo se la lunghetta rispetta le condizioni.

Non ci discosteremo dalla richiesta iniziale di LottoTom perche aggiungere tutte le cose che vuole lui noin ci fa imparare niente di nuovo , quello lo potrai fare tu stesso dopo che questo script verrà portato a termine.

Ripeto qui stiamo facendo una spiegazione non uno script ,anche se alla fine è proprio lo script che otterremo. E' per questo che deve essre il piu compatto possibile , aggiungere le carattristiche nuove richieste da Tom agginge solo complessita ma nom serve a toccare concetti nuovi.

come dicevo ora dobbiamo dedicarci alla sub che disegnerà il grafico , in realtà scriveremo un nuovo metodo della classe.
Dovresti aver gia capito che nuovo metodo della classe significa semplicemente scrivere una nuova sub pubblica che la classe espone al chiamante.

come hai visto nei post precedenti Lottotom ci ha proposto il grafico dell'evoluzione dell'incremento del ritardo massimo che dimostra a colpo d'occhio l'esattezza della condizione.

per disegnare un grafico dobbiamo disporre dei valori per le ascisse e per le ordinate , le ascisse sono la X , le ordinate sono la Y

Dato che gli incrementi del ritmax si sono verificati in un momento preciso del tempo misurato in estrazioni noi useremo per i valori della X il numero dell'estrazione che indica appunto il momento
Invece per i valori della Y useremo il valore dell'incremento (linea rossa ) e del ritardo.(linea blu)

Incremento e ritardo

sul nostro grafico dovranno comparire due differenti linee , la prima si riferisce ai valori dell'incrRitMax
la seconda ai valori del ritardo , linea rossa e linea blu.

i momenti che noi vogliamo fotografare con il grafico sono queli scanditi dall'array aIdEstrIncrRitMax
ad ogni estrazione in cui si è verificato un incremento prendiamo il valore dell'incremento per la Y (quello contenuto in aElencoIncrRitMax ) e quello del'estrazione (contenuto in aIdEstrIncrRitMax ) per la X

Sulla seconda linea quella del ritardo prendiamo per la X lo stesso valore di prima perche ci interessa
il valore del ritardo nello stesso preciso momento in cui si è verificato l'incremento quindi il valore contenuto in aIdEstrIncrRitMax rappresenterà ancora una volta la nostra X , per la Y invece prenderemo il valore del ritardo di quella stessa estrazione (il valore x) dall'array aElencoRit
qui sorge un piccolo problemino da risolvere.

Ora segui bene il ragionamento :
Mentre scriviamo i valori del grafico l'array che comanda è quello degli incrementi perche è quello che indica le estrazioni salienti che ci interessano ch escandiscono la X
Ti ricorderai che l'array degli incrementi è dinamico , contiene tanti elementi quanti sono
i casi in cui si è avuto un superamento del vecchio rit max,
Questo array ha il suo parallelo che contiene l'id estrazione in cui quell'incremento si è verificato.
quindi con un ciclo per esempio For k = 1 to ubound(aIdEstrIncrRitMax ) è chiaro che k andrà bene
per identificare sia l'elemento di aIdEstrIncrRitMax che quello di aElencoIncrRitMax , purtroppo non va piu bene per identificare l'elemento dell'array aElencoRit che invece è proprio quello che ci serve quando disegnamo la linea blu,
Infatti l'array aElencoRit ha piu elementi di aElencoIncrRitMax quindi la stessa K non va piu bene per
leggere quale era il ritardo di quel momento identificato da X.
Questo problema si potrebbe risolvere in due modi , il primo piu difficile (per modo di dire) consisterebbe nello scrivere una funzione privata alla quale passare l'idEstrazione , questa funzione al suo interno leggerebbe l'array aIdEstrElencoRit troverebbe l'elemento che contiene l'idEstrazione passato e ci darebbe il valore del ritardo letto dal'elemento del vettore aElencoRit alla stessa posizione di dove è stato trovato idEstrazione.
Il secondo metodo molto piu semplice introduce una ridondanza di valori ma ci risparma codice.
Basta dichiarare un altro vettore gobale alla classe che cresca insieme agli altri due dell'incremento
e che contenga il valore del ritardo in quel momento.
Ti consiglio di fare cosi , di usare il secondo metodo quindi dichiarare un nuovo vettore globbale da chiamarsi ad esempio aRitardiAllIncremento , questo vettore si alimentera insieme agli altri due dell'incremento e in ogni elemento conterra il ritardo di quel momento.
Quindi anche se abbiamo una ridondanza di valori questo array non ha piu il problema della corrispondenza di K quando facciamo il ciclo for che calcola i valori di x e y per il grafico.

quindi , la sub per il grafico la scriviamo dopo , ora fai questa modifica : prendi lo script 4 e aggiungi il vettore che ti ho detto e alimentalo, appena avrai fatto ci dedicheremo al grafico

4

Codice:
[COLOR=#0000CD][B]Option Explicit

Class clsLunghetta
    
    Private aNumeri ' contiene i numeri della lunghetta
    Private mInizio,mFine,aRuote,mSorte ' parametri per il range analisi
    Private mClasse ' contine la classe della lunghetta
    Private aElencoRit ' conterra l'elenco dei ritardi per la lunghetta
    Private aIdEstrElencoRit ' conterra l'elenco dei ritardi per la lunghetta
    Private aElencoIncrRitMax 'contiene l'elnco degli incrementi del ritardo max
    Private aIdEstrIncrRitMax ' conterra l'elenco degli id estrazione in
                    'cui si è registrato l'incremento del ritmax conosciuto
    
    
    ' inizializza le proprietà dell'oggetto
    Sub Init(sLunghetta,sChrSep,RangeInizio,RangeFine,vetRuote,SorteInGioco)
    
        ' acquisisco i parametri per l'analisi
        mInizio = RangeInizio
        mFine = RangeFine
        aRuote = vetRuote
        mSorte = SorteInGioco
        ' alimento il vettore con i numeri della lunghetta
        Call AlimentaVettoreLunghetta(sLunghetta,sChrSep)
        ' calcolo l'elenco dei ritardi
        Call ElencoRitardiTurbo(aNumeri,aRuote,mSorte,mInizio,mFine,aElencoRit,aIdEstrElencoRit)
        ' alimento il vettore che contien l'elenco degli incrementi rit max
        Call AlimentaVettoreIncrRitMax
    End Sub
    Private Sub AlimentaVettoreLunghetta(sLunghetta,sChrSep)
        
        ' antepongo un carattere separatore per fare in modo che
        ' aNumeri si valorizzi dall'indice 1 (senno si sarebeb valorizzato dall'indice 0)
        Call SplitByChar((sChrSep & sLunghetta),sChrSep,aNumeri)
        ' valorizzo la classe della lunghetta
        mClasse = UBound(aNumeri)
    End Sub
    Private Sub AlimentaVettoreIncrRitMax
        Dim nRitMax,nIncr,nId,k
        
        nId = 0
        
        ' inizializzo il vettore a 0 elementi
        ReDim aElencoIncrRitMax(0)
        ReDim aIdEstrIncrRitMax(0)
        ReDim aRitardiAllIncremento (0)

        ' ciclo sul vettore dei ritardi
        For k = 1 To UBound(aElencoRit)
            ' se il ritardo corrente supera il ritmax attuale..
            If aElencoRit(k) > nRitMax Then
                If nRitMax > 0 Then
                    ' se il ritmax attuale è >0 (ivvero ne esiste uno)
                    ' calcolo di quanto si è incrementato
                    nIncr = aElencoRit(k) - nRitMax
                    ' incremento il contatore dei valori trovati
                    nId = nId + 1
                    ' ridimensiono il vettore mantenendo i valori precedenti ma
                    ' aggiungendone uno
                    ReDim Preserve aElencoIncrRitMax(nId)
                    ' memorizzo il valore
                    aElencoIncrRitMax(nId) = nIncr
                    
                    ' ridimensiono il vettore mantnendo i valori precedenti ma
                    ' aggiungendone uno
                    ReDim Preserve aIdEstrIncrRitMax(nId)
                    ' memorizzo l'id dell'estrazione dove si è avuto l'incremento
                    aIdEstrIncrRitMax(nId) = aIdEstrElencoRit(k)
                    
                    
                    
                End If
                
                nRitMax = aElencoRit(k)
                
            End If
        Next
    End Sub
    
    Function IsCondizioneRispettata
        ' verifica che l'incremento dell'ultimo ritmax sia uguale al massimo incr rit max conosciuto.
        Dim nUpper
        
        nUpper = UBound(aElencoIncrRitMax)
        If aElencoIncrRitMax(nUpper) > 0 And aIdEstrIncrRitMax(nUpper) = mFine Then
        
            IsCondizioneRispettata =(aElencoIncrRitMax(nUpper) >= MassimoV(aElencoIncrRitMax,1,nUpper - 1))
        Else
            IsCondizioneRispettata = False
        End If
        
    End Function
    
    
End Class
Sub Main
    
    Dim clsL,n,r
    
    Set clsL = New clsLunghetta
    
    ReDim aRuote(1)
    
    
    For r = 1 To 10
        aRuote(1) = r
        For n = 1 To 90
            Call clsL.Init(n,".",5000,8000,aRuote,1)
            If clsL.IsCondizioneRispettata Then
                Call Scrivi ( "Il numero " & n & " rispetta la condizione su " & NomeRuota(r) )
            End If
        Next
    Next     
    Set clsL = Nothing
    
    
End Sub[/B][/COLOR]
 
Ciao buona giornata a tutti.
Grazie luigi:)
Bello come hai scritto la function:)
Tutto è ovviamente ok ora leggo capisco e provo a d andar avanti :)
Nella speranza di riuscire a fare tutte le cose ci aggiorniamo dopo;)
 
bravo ti sei accorto che quello che a te avevo di chiesto di fare come proprietà io l'ho fatto come function , ovvero un metodo che torna un valore.
procedi con la modifica che ti ho detto
 
Ciao che fiducia mi avevi scritto l array anche nella sub:)
Allora se ho capito bene era sufficiente passarli
aElencoRit ( k ).
Ora in base allo script di esempio è ai dati cerco di scrivere la sub:)
A dopo:)

Codice:
Option Explicit

Class clsLunghetta
    
    Private aNumeri ' contiene i numeri della lunghetta
    Private mInizio,mFine,aRuote,mSorte ' parametri per il range analisi
    Private mClasse ' contine la classe della lunghetta
    Private aElencoRit ' conterra l'elenco dei ritardi per la lunghetta
    Private aIdEstrElencoRit ' conterra l'elenco dei ritardi per la lunghetta
    Private aElencoIncrRitMax 'contiene l'elnco degli incrementi del ritardo max
    Private aIdEstrIncrRitMax ' conterra l'elenco degli id estrazione in
                    'cui si è registrato l'incremento del ritmax conosciuto
    Private aRitardiAllIncremento 
    
    ' inizializza le proprietà dell'oggetto
    Sub Init(sLunghetta,sChrSep,RangeInizio,RangeFine,vetRuote,SorteInGioco)
    
        ' acquisisco i parametri per l'analisi
        mInizio = RangeInizio
        mFine = RangeFine
        aRuote = vetRuote
        mSorte = SorteInGioco
        ' alimento il vettore con i numeri della lunghetta
        Call AlimentaVettoreLunghetta(sLunghetta,sChrSep)
        ' calcolo l'elenco dei ritardi
        Call ElencoRitardiTurbo(aNumeri,aRuote,mSorte,mInizio,mFine,aElencoRit,aIdEstrElencoRit)
        ' alimento il vettore che contien l'elenco degli incrementi rit max
        Call AlimentaVettoreIncrRitMax
    End Sub
    Private Sub AlimentaVettoreLunghetta(sLunghetta,sChrSep)
        
        ' antepongo un carattere separatore per fare in modo che
        ' aNumeri si valorizzi dall'indice 1 (senno si sarebeb valorizzato dall'indice 0)
        Call SplitByChar((sChrSep & sLunghetta),sChrSep,aNumeri)
        ' valorizzo la classe della lunghetta
        mClasse = UBound(aNumeri)
    End Sub
    Private Sub AlimentaVettoreIncrRitMax
        Dim nRitMax,nIncr,nId,k
        
        nId = 0
        
        ' inizializzo il vettore a 0 elementi
        ReDim aElencoIncrRitMax(0)
        ReDim aIdEstrIncrRitMax(0)
        ReDim aRitardiAllIncremento (0)

        ' ciclo sul vettore dei ritardi
        For k = 1 To UBound(aElencoRit)
            ' se il ritardo corrente supera il ritmax attuale..
            If aElencoRit(k) > nRitMax Then
                If nRitMax > 0 Then
                    ' se il ritmax attuale è >0 (ivvero ne esiste uno)
                    ' calcolo di quanto si è incrementato
                    nIncr = aElencoRit(k) - nRitMax
                    ' incremento il contatore dei valori trovati
                    nId = nId + 1
                    ' ridimensiono il vettore mantenendo i valori precedenti ma
                    ' aggiungendone uno
                    ReDim Preserve aElencoIncrRitMax(nId)
                    ' memorizzo il valore
                    aElencoIncrRitMax(nId) = nIncr
                    
                    ' ridimensiono il vettore mantnendo i valori precedenti ma
                    ' aggiungendone uno
                    ReDim Preserve aIdEstrIncrRitMax(nId)
                    ' memorizzo l'id dell'estrazione dove si è avuto l'incremento
                    aIdEstrIncrRitMax(nId) = aIdEstrElencoRit(k)
                    Redim preserv aRitardiAllIncremento  (nId ) 
ARitardiAllIncremento  (nId ) = aElencoRit ( k ) 
                    
                    
                End If
                
                nRitMax = aElencoRit(k)
                
            End If
        Next
    End Sub
    
    Function IsCondizioneRispettata
        ' verifica che l'incremento dell'ultimo ritmax sia uguale al massimo incr rit max conosciuto.
        Dim nUpper
        
        nUpper = UBound(aElencoIncrRitMax)
        If aElencoIncrRitMax(nUpper) > 0 And aIdEstrIncrRitMax(nUpper) = mFine Then
        
            IsCondizioneRispettata =(aElencoIncrRitMax(nUpper) >= MassimoV(aElencoIncrRitMax,1,nUpper - 1))
        Else
            IsCondizioneRispettata = False
        End If
        
    End Function
    
    
End Class
Sub Main
    
    Dim clsL,n,r
    
    Set clsL = New clsLunghetta
    
    ReDim aRuote(1)
    
    
    For r = 1 To 10
        aRuote(1) = r
        For n = 1 To 90
            Call clsL.Init(n,".",5000,8000,aRuote,1)
            If clsL.IsCondizioneRispettata Then
                Call Scrivi ( "Il numero " & n & " rispetta la condizione su " & NomeRuota(r) )
            End If
        Next
    Next     
    Set clsL = Nothing
    
    
End Sub
 
bravo ! ok prima di scrivere la sub per il grafico tinei presente che ti conviene dichairare delle variabili
private a questa sub che contengano i limiti entro i quali si muovono i valori di x e di y
queste variabili serviranno per essere passate alla funzione che prepara il grafico.

ricordati che i vettori che si usano per passare le coordinate al grafico sono a 2 dimensioni e partono dall'indice 0

quindi dovrai per ognuna delle due linee dimensionare il vettore pari al numero di elementi -1 (parte da 0) , il primo indice identidica l'elemento , il secondo indice a due dimensioni all'indice 1 vuole la x all'indice due vuole la y .. come da esempio script grafico
 
ad onor del vero la funzone che testa la condizione si puo scrivere ancora meglio levando l'if che testa le due condizioni con l'and , basta testare che l'ultimo id estr in cui si è verificato l'incremento sia uguale ad mFine,
Falla questa ottimizzazione
 
Luigi se l ottimizzo rallenta di due secondi. Se ho capito cosa ottimizzare.
Allora scrivo solo la sub del grafico.
Spero sia corretta ma molto probabilmente no.
Codice:
Sub  GetGrafico 
Dim x,k
Call PreparaGrafico ("Grafico Inc",0,10,0,100,1,5)
Redim aVer ( ubound ( aElencoIncrRitMax ) ,2)
X=0
For k = 0 To ubound ( aElencoIncrRitMax ) 
aVer  (x,1)=x
aVer  (x,2)=aElencoIncrRitMax ( k ) 
X=x+1
Next 
Call  DisegnaLineaGrafico  (aVer, 1,"EstrazioneIncrementoRitMax ")
X=0
Redim aVer ( ubound ( aRitardiAllIncremento ),2)
For k =0 To  ubound ( aRitardiAllIncremento )
aVer ( x, 1 ) = x
aVer ( x, 2 ) = aRitardiAllIncremento  (k)
X=x+1
Next 
Call DisegnaLineaGrafico ( aVer, 2,"EstrRitardoMax")
Call inserisciGrafico 
End sub

Ciao come si scrivono le date sui nodi?

Dove devo correggere?
Mai fatto un grafico.
Che te ne pare Tom?
Rispecchia i tuoi dati?
Ciao :)
 

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
Indietro
Alto