Option Explicit
Sub Main
'S_A_001_Ammortizzatore_Ritardi_Tab_AB_13.01.16_per_lottoced_Turbo_Stat
'http://forum.lottoced.com/forum/lottoced/area-download/1898364-ammortizzatori-del-ritardo/page5
'ATTENZIONE: questo listato gira su SpazioMetria dalla versione 1.5.75 in su <====
Dim e,r,i,y,n,co,conta,contaes,k,kk,ris,RP,RC,capilista
Dim ini,fin,inizio,dInizio,p,p2,p3,p4,NuRitAtt,NuRitPre
Dim TB(10,4)' tabella che contiene i dati e attuale
Dim TBp(10,4)' tabella che contiene i dati es precedente
Dim A(10),B(10) ' vettore per i valori della scala A e B attuale
Dim Ap(10,2),Bp(10)'Matrice per i valori della scala Aprecedente e vettore per la scala B precedente
Dim At(10),Bt(10)' vettore per memorizzare temporaneamente le posizioni sortite
Dim aSortite(10) ' vettore per memorizzare le ruote con sortite di capilista
Dim tSortiti
Dim nStatA(3,10,10)' matrice statistica fre + max + Rit att Posizione/segnalatori scala A
fin = EstrazioneFin
ini = 9045'3950 'inizio ricerca
'Promemoria: 3950 inizio archivio senza buchi (non partire da 3949 perchè lo script contempla sempre una es precedente)
contaes=0 'contatore estrazioni valide statistica (dalla scala A completa)
'----------------------------------inizializzo la matrice nStat
For i = 1 To 3
nStatA(i,0,0) = 0
For p = 1 To 10
For p2 = 1 To 10
nStatA(i,p,p2) = 0
Next
Next
Next
'-----------------------------------riempio la tabella dati passati sulla es di partenza: (ini-1)
For r = 1 To 10
n = PiuRitardatarioTurbo(ini - 1,r)
RP = RitPosPR(r,ini - 1)
RC = RitardoEstrattoTurbo(n,ini - 1,r)
If NumCapilista(ini - 1,r) > 1 Then
co = 0
For i = 1 To 90
If RitardoEstrattoTurbo(i,ini - 1,r) = RC Then
co = co + 1
If co = 1 Then ris = Format2(i)
If co > 1 Then ris = ris & "." & Format2(i)
End If
Next
Else ris = Format2(n)
End If
TBp(r,1) = r
TBp(r,2) = ris' Numeri/o Più Ritardatari/o
TBp(r,3) = RP ' ritardo di posizione
TBp(r,4) = RC 'ritardo cronologico
Next
Call OrdinaMatriceTurbo(TBp,- 1,"3,4")
For r = 1 To 10
Ap(r,1) = Ap(r,1) - TBp(r,1)' memorizzo valori negativi sulla scala A iniziale (mi serve per controllarne la compilazione)
Ap(r,2)=Ap(r,1) ' inizializzo anche la seconda colonna con gli stessi valori della prima
Next
'---------------------------------------------output dati iniziali/pregressi
Call Scrivi
Call Scrivi(DataEstrazione(ini - 1) & "[" & ini - 1 & "]")
Call Scrivi("PO - RU - NU ---- RC -- RP - Ap")
For p = 1 To 10
Call Scrivi(Format2(p) & Space(3) & SiglaRuota(TBp(p,1)) & Space(3) & FormatSpace(TBp(p,2),6) & Space(2) & FormatSpace(TBp(p,4) + 1,3,1)_
& Space(3) & FormatSpace(TBp(p,3),3,1) & Space(4) & Ap(p,1) & Space(4) & Bp(p))
Next
'----------------------------------scansiono l'archivio elaborando i dati ad ogni estrazione(e)
For e = ini To fin
If ScriptInterrotto Then Exit For
Call AvanzamentoElab(ini,fin,e)
'----------------------------calcolo l'estrazione in cui la scala A è completa
If inizio = 0 Then
conta = 0
For p = 1 To 10
If Ap(p,1) > 0 Then conta = conta + 1
If conta = 10 Then
inizio = 1
dInizio=e
Call Scrivi
Call Scrivi("====================== SCALA A COMPLETA =============================")
Exit For
End If
Next
End If
If inizio = 1 Then ' dalla scala A completa inizio a fare la statistica.1^ cosa gestisco il ritardo incrementandolo di 1 ad ogni es
contaes=contaes+1
For i = 1 To 10
For y = 1 To 10
nStatA(3,i,y) = nStatA(3,i,y) + 1
Next
Next
End If
'---------------------------------------------------------------------------------------------------------
Call Scrivi
Call Scrivi(DataEstrazione(e) & "[" & e & "] " & contaes)
Call Scrivi("PO - RU - NU ---- RC -- RP -- A -- B")
For r = 1 To 10 'ad ogni estrazione travaso sulla TBp i dati di TB
'A(r) = Ap(r)
If e > ini Then 'la TBp mi serve per tenere conto della situazione all'es precedente
TBp(r,1) = TB(r,1) 'ruota
TBp(r,2) = TB(r,2) 'numero/i capolista
TBp(r,3) = TB(r,3) 'RP
TBp(r,4) = TB(r,4) 'RC
End If
aSortite(r) = 0
tSortiti = 0
At(r) = 0
Bt(r) = 0
Next
For r = 1 To 10 ' poi per ogni ruota verifico i dati e riempio la Tabella per poterla ordinare
Call Messaggio(e & " " & r)
n = PiuRitardatarioTurbo(e,r)' Numero Più Ritardatario attuale
NuRitPre = PiuRitardatarioTurbo(e - 1,r) 'idem dell'es precedente
RP = RitPosPR(r,e)
RC = RitardoEstrattoTurbo(n,e,r)
If NumCapilista(e,r) > 1 Then
co = 0
For i = 1 To 90
If RitardoEstrattoTurbo(i,e,r) = RC Then
co = co + 1
If co = 1 Then ris = Format2(i)
If co > 1 Then ris = ris & "." & Format2(i)
End If
Next
Else ris = Format2(n)
End If
TB(r,1) = r
TB(r,2) = ris' Numeri/o Più Ritardatari/o
TB(r,3) = RP ' ritardo di posizione
TB(r,4) = RC 'ritardo cronologico
'-----------------------------------controllo sortite capilista e iniziale azzeramento posizioni cadute sulla scala A pregressa
If NumCapilista(e - 1,r) = 1 And n <> NuRitPre Then ' se c'era un solo capolista e il più Ritardatario è diverso da quello dell'es precedente
Call ColoreTesto(2) ' aggiorno i valori
Call Scrivi(SiglaRuota(r) & " uscito -> " & NuRitPre,,0)
For p = 1 To 10 ' scorro le posizioni della TB
If TBp(p,1) = r Then 'appena trovo corrispondenza tra le ruote TB PREC
'---------------------- step per scala B
If inizio = 1 Then
For p3 = 1 To 10
If Ap(p3,1) = p Then 'verifico la posizione della scala A sortita
For p4 = 1 To 10 '
If B(p4) = p3 Then Bp(p4) = 0 ' verifico se ce n'erano già le azzero
Next
Bt(r) = p3
End If
Next
End If
'-----------------------aggiornamento statistica scala A. Qui è necessario disporre della seconda colonna di Ap
'perchè sulla prima in taluni casi di multisortite i valori dei selettori vengono azzerati per permettere la
'corretta movimentazione della scala A
If inizio=1 Then
nStatA(1,p,Ap(p,2))=nStatA(1,p,Ap(p,2))+1 'aggiorno la freq sortita posizi/segnalatore
If nStatA(3,p,Ap(p,2))> nStatA(2,p,Ap(p,2)) Then nStatA(2,p,Ap(p,2))=nStatA(3,p,Ap(p,2))'aggiorno max rit
nStatA(3,p,Ap(p,2))=0 ' azzero il rit
End If
'--------------------------step valorizzazione scala A
For p2 = 1 To 10
If Ap(p2,1) = p Then Ap(p2,1) = 0 ' verifico che non si siano prec casi con quella posizione altrimenti la azzero
Next
Call Scrivi(" posizione precedente " & p & " con segnalatore " & Ap(p,2))
Call ColoreTesto(0)
At(r) = p ' memorizzo sul vettore tale posizione
aSortite(r) = 1
tSortiti = tSortiti + 1
'------------------------fine step scala A
End If
Next
Else '--------------------------altrimenti in caso di più capilista...mostro nell'output quello sortito
If NumCapilista(e - 1,r) > 1 And NumCapilista(e,r) = 1 Then
For i = 1 To 5
If RitardoEstrattoTurbo(Estratto(e,r,i),e - 1,r) = RitardoEstrattoTurbo(NuRitPre,e - 1,r) Then
Call ColoreTesto(2)
Call Scrivi(SiglaRuota(r) & " uscito 1 dei capilista -> " & Estratto(e,r,i))
End If
Next
Call ColoreTesto(0)
End If
End If
Next
Call OrdinaMatriceTurbo(TB,- 1,"3,4")
'-----------------------------------aggiornamento scala A definitiva 1^ parte
If tSortiti = 0 Then
For p = 1 To 10 ' se non ci sono state sortite di capilista la scala A non varia
A(p) = Ap(p,1)
Next
Else
k = 11 - tSortiti
For p = 10 To 1 Step - 1' scorro la tabB al contrario
If Ap(p,1) <> 0 Then
k = k - 1
If k = 0 Then Exit For
A(k) = Ap(p,1)
End If
Next
End If
'----------------------------------aggiungo i nuovi usciti sulla scala A 2^ parte
kk = 10 - tSortiti
For r = 1 To 10
If aSortite(TB(r,1)) = 1 Then
kk = kk + 1
A(kk) = At(TB(r,1))
End If
Next
'----------------------------aggiornamento scala B 1^ parte (da quando la scala A è completa)
If inizio = 1 Then
If tSortiti = 0 Then
For p = 1 To 10 ' se non ci sono state sortite di capilista la scala B non varia
B(p) = Bp(p)
Next
Else
k = 11 - tSortiti
For p = 10 To 1 Step - 1' scorro la tabB al contrario
If Bp(p) <> 0 Then
k = k - 1
If k = 0 Then Exit For
B(k) = Bp(p)
End If
Next
End If
'----------------------aggiungo i nuovi usciti scala B 2^ parte
kk = 10 - tSortiti
For r = 1 To 10
If aSortite(TB(r,1)) = 1 Then
kk = kk + 1
B(kk) = Bt(TB(r,1))
End If
Next
End If
'-------------------output
For p = 1 To 10
Call Scrivi(Format2(p) & Space(3) & SiglaRuota(TB(p,1)) & Space(3) & FormatSpace(TB(p,2),6) & Space(2) & FormatSpace(TB(p,4) + 1,3,1)_
& Space(3) & FormatSpace(TB(p,3),3,1) & Space(2) & FormatSpace(A(p),3,1) & Space(2) & FormatSpace(B(p),3,1))
Next
'-----------------aggiorno le scale A B pregresse con i valori delle ultime scale A B appena aggiornate
For p = 1 To 10
Ap(p,1) = A(p)
Ap(p,2)=A(p)' la seconda colonna serve per le statistiche in quando sulla prima in taluni casi certe pos vengno azzerate durante la movimentazione scala
Bp(p) = B(p)
Next
Next
'-----------------Output statistica
Call Scrivi
Call Scrivi("=======================================================================")
Call Scrivi
Call Scrivi("AMMORTIZZATORI DEI RITARDI da studio di SEVERO",1)
Call Scrivi("STATISTICA FRE - MAX - ATT POSIZIONI(blu) SEGNALATORI (rosso) SCALA A",1)
Call Scrivi("dal " & DataEstrazione(dInizio) & " al "& DataEstrazione(EstrazioneFin)& " estrazioni valide: " & contaes,1)
Call Scrivi
For p= 1 To 3
If p= 1 Then Call Scrivi("FR",1,False)
If p= 2 Then Call Scrivi("MX",1,False)
If p= 3 Then Call Scrivi("RT",1,False)
For i= 1 To 10
Call ColoreTesto(2)
Call Scrivi(FormatSpace(i,6,1),1,False)
If i= 10 Then Call Scrivi
Next
For i= 1 To 10
Call ColoreTesto(1)
Call Scrivi(FormatSpace(i,2,1),1,False)
Call ColoreTesto(0)
For y=1 To 10
Call Scrivi(FormatSpace(nStatA(p,i,y),6,1),,False)
If y= 10 Then Call Scrivi
Next
Next
Scrivi
Next
Call Scrivi("Legenda: FR=frequenza di sortita MX=Max Rit Sto RT= ritardo attuale")
End Sub
'-----------------------------------FUNZIONE Numeri capilista
Function NumCapilista(e,r)
Dim F_piurit,F_rit,F_i
F_piurit = PiuRitardatarioTurbo(e,r)
F_rit = RitardoEstrattoTurbo(F_piurit,e,r)
NumCapilista = 0
For F_i = 1 To 90
If RitardoEstrattoTurbo(F_i,e,r) = F_rit Then NumCapilista = NumCapilista + 1
Next
End Function
'-----------------------------------FUNZIONE Ritardo di posizione capilista
Function RitPosPR(r,e)
Dim F_n,F_np,F_rit,F_ritp,F_es,F_co
F_co = 0
For F_es = e To e - 500 Step - 1
F_n = PiuRitardatarioTurbo(F_es,r)
F_rit = RitardoEstrattoTurbo(F_n,F_es,r)
F_np = PiuRitardatarioTurbo(F_es - 1,r)
F_ritp = RitardoEstrattoTurbo(F_np,F_es - 1,r)
If F_rit = F_ritp + 1 Then
F_co = F_co + 1
Else Exit For
End If
Next
RitPosPR = F_co
End Function