-
.
Minicorso di programmazione per L8 versione 5.0 e superiori
By Danilo
Per iniziare con quest’avventura diciamo che non sono un grande esperto di programmazione,
cerco di cavarmela guardando esempi vari e leggendo qua e là nel manuale in linea del programma,
spero che questo mio minicorso serva almeno a chi di programmazione è completamente digiuno.
Iniziamo dicendo che per fare un listato occorre seguire delle regole, facili ma ben precise, pena
il non funzionamento dello stesso, qualsiasi listato noi andremo a fare dovrà iniziare e terminare
con le istruzioni seguenti:
Sub main()
...
...
End Sub
Queste dicono al programma che vogliamo fare un listato, che inizia con Sub main(), eseguirà tutte
le istruzioni seguenti in modo sequenziale fino a trovare l'ultima istruzione End Sub che indicherà
che il listato è terminato, e fin qui direte voi ci arrivavo da solo, bene allora andiamo avanti un
passo alla volta.
Per qualsiasi tipo di listato noi vogliamo fare dobbiamo impostare dei parametri che serviranno
al programma per capire cosa vogliamo che faccia per noi, per prima cosa cerchiamo di capire
certi termini che si useranno proseguendo in questo corso,
VARIABILE - VETTORE - CICLO - CONDIZIONE
queste sono alcune delle espressioni che si useranno andando avanti, vediamo di capire cosa si
intende con queste parole,
Variabile - una variabile è un contenitore per un dato variabile, per esempio :
n=Estratto(es,1,1)
n è una variabile che contiene l'estratto dell'esempio, a seconda dell'estrazione che noi andremo ad
analizzare il dato contenuto in n sarà diverso.
Vettore - un vettore è un contenitore che contiene una serie di dati, per esempio:
Dim poste(5)
poste(1)=1
poste(2)=1
poste(3)=1
poste(4)=1
poste(5)=1
poste è un vettore che contiene i 5 dati relativi alle poste di gioco, come vedete abbiamo una
istruzione in piu, Dim poste(5) che è indispensabile, un vettore và sempre " dimensionato "
cioè dobbiamo dire al programma quanti dati dovrà contenere quel vettore, dopo dovremo
" assegnare " ad ogni valore contenuto nel vettore il suo valore, come nell'esempio abbiamo
assegnato ad ognuno dei 5 elementi del vettore ( poste(1), poste(2) ecc. ) un valore, =1 che
vuol dire che la poste(1) ( che è l'Ambata) sarà di 1, la poste(2)( che è l'Ambo) sarà di 1 ecc. ecc.
La stessa cosa sarà per le ruote, per i numeri da mettere in gioco, e per qualsiasi altra necessità noi
abbiamo per fare quello che vogliamo, ho fatto l'esempio delle poste perchè lo useremo quasi
sempre nella stesura dei nostri listati, come gli altri citati che servono per poter effettuare una
giocata.
Ciclo - un ciclo serve per effettuare una serie definita di istruzioni, per effetuare un ciclo si usano
le seguenti istruzioni:
For R = 1 To 10
.....
....
Next
come vedete le istruzioni per fare un ciclo sono due, la prima " For R = 1 To 10 " come vedete fà
uso di una Variabile " R " a cui assegnare un valore, il significato di questa istruzione è questo:
For R alla variabile R assegna un valore " 1 To 10 " da 1 a 10 incrementando questo valore
ogni volta che arrivi all'istruzione Next
Esempio:
For R = 1 To 10
n(R)=Estratto(es,R,1)
Next
questo blocco di istruzioni assegna ai 10 elementi del vettore n che avremmo dimensionato a 10
elementi in precedenza[ Dim n(10) ], ogni elemento conterrà l'estratto assegnato:
primo giro: R=1 n(R) è = a n(1) e gli assegnamo L'Estratto(es,1,1) ( 1° di Bari )
secondo giro: R=2 n(R) è = a n(2) e gli assegnamo L'Estratto(es,2,1) ( 1° di Cagliari )
terzo giro: R=3 n(R) è = a n(3) e gli assegnamo L'Estratto(es,3,1) ( 1° di Firenze )
così via fino ad arrivare a 10, arrivato a dieci il programma esce dal ciclo e continua con le
istruzioni che troverà dopo...., sembra complicato ma in realtà è molto semplice, nel senso che il
programma esegue le istruzioni così come noi le mettiamo in sequenza, quando facciamo un ciclo
come nell'esempio sappiamo che il programma eseguirà quel determinato numero di volte quella
serie di istruzioni che si trova fra le istruzioni For .... To .... e Next poi proseguirà con le
successive istruzioni.
Condizione - lo dice la parola stessa, poniamo una condizione al programma, questa
condizione la poniamo per verificare se un determinato dato ha le
caratteristiche che noi vogliamo, in modo da condizionare l'esecuzione del listato
nella sua prosecuzione, l'esempio piu semplice è quello della individuazione di
una determinata estrazione in cui noi vogliamo successivamente elaborare dei
dati, vediamo l'esempio:
If IndiceMensile(es)=1 Then
.........
.......
End If
come vedete anche questa è una istruzione composta, cioè ha un inizio ed una fine come il ciclo,
il significato di questa istruzione è il seguente:
If se l' Indice Mensile dell'estrazione in esame (es) è = ad 1 Then esegui le istruzioni
che seguono, se invece l'Indice Mensile non è = a 1 salta tutte le istruzioni seguenti fino alla
istruzione End If compresa ed esegui le restanti istruzioni.
seguendo sempre gli esempi pratici se vogliamo che una giocata venga conteggiata alla prima del
mese(e giocata naturalmente dalla successiva) dovremo scrivere le istruzioni in questo modo:
Sub main()
Dim posta(5)
Dim ruota(10)
Dim n(2)
posta(1)=1
ruota(1)=5
For es=7200 To EstrazioneFin
If IndiceMensile(es)=1 Then
n(1)=20
n(2)=15
ImpostaGiocata 1,n,ruota,posta,5,1
Gioca es
End If
Next
ScriviResoconto
End Sub
questo è un esempio completo di listato, cosa andiamo a fare ?
abbiamo impostato le nostre istruzioni per dire al programma dove inizia e dove finisce, abbiamo
dimensionato ed assegnato i vettori ed i relativi valori che ci interessano, posta, ruota, numeri (n),
abbiamo messo un ciclo per far girare le estrazioni che vogliamo analizzare, dall'estrazione con
indice in archivio 7200 all'ultima estrazione inserita nell'archivio ( EstrazioneFin ), abbiamo poi
inserito una condizione, vediamo come si susseguono le istruzioni in modo da capire come lavora
il nostro listato:
Dopo le varie assegnazioni( ruote,poste, ecc. ) il programma trova l'istruzione del ciclo, For es ...
cioè inizierà andando a prendere l'estrazione " es " cioè la 7200 che corrisponde all'estrazione del
15-01-2003 che era la quinta estrazione del mese,
subito a seguire trova l'istruzione If IndiceMensile(es)=1 e naturalmente NON è la prima
estrazione del mese quella, perciò come abbiamo detto non essendo la condizione " vera " il listato
andrà ad eseguire le istruzioni seguenti l' End If , cioè l'istruzione Next, cosa vuol dire, vuol dire
che farà girare il ciclo, cioè l'esecuzione ritornerà al ciclo For es= ed aumentreà di 1 es che ora
sarà 7201, le condizioni sono uguali e ripeterà ancora lo stesso giro fino a quando es sarà una
prima estrazione del mese, nel nostro caso lo sarà quando es sarà = 7205 che è l'estrazione del
01-02-2003 cioè una prima del mese, a quel punto la condizione If IndiceMensile(es)=1
sarà " vera " ed allora il listato eseguirà le istruzioni contenute all'interno del blocco If .... End If
cioè assegnerà agli elementi del vettore dei numeri i numeri da giocare, imposterà la giocata ed
effettuarà la giocata stessa per i colpi specificati e per la sorte impostata.
Effettuate queste istruzioni incontrerà di nuovo l'istruzione Next che farà avanzare il ciclo come
prima di una estrazione alla volta fino a trovare la prossima prima del mese dove rieffettuerà la
giocata e così via fino ad arrivare all'ultima estrazione in archivio, arrivati all'ultima in archivio
anche il ciclo sarà concluso ed il listato proseguirà con le istruzioni trovando l' End Sub cioè la fine
del listato ed arresterà l'esecuzione dello stesso.
Adesso proviamo a scrivere un listato reale, proviamo a scrivere uno dei listati che normalmente
uso io per provare i vari Metodi di Matematica Sommativa, scriviamo prima la struttura base del
listato poi andremo ad inserire le giocate.
Diciamo che abbiamo passato la notte a cercare una combinazione che ci dia dei buoni risultati e
vogliamo vedere se anche nel passato ci ha dato buoni esiti, noi con le nostre prove abbiamo
analizzato gli ultimi sei mesi, adesso proviamo a scrivere un listato per vedere cosa ha fatto questo
Metodo negli ultimi 3 anni, cominciamo a scrivere:
Sub main() inizio del listato
Dim posta(5) dimensiono il vettore delle poste
Dim ruota(10) dimensiono il vettore delle ruote
Dim n(10) dimensiono il vettore dei numeri da giocare
posta(1)=1 assegno alla posta 1 Ambata il valore di 1
ruota(1)=5 assegno alla prima ruota la ruota di MI 5
For es=6877 To EstrazioneFin imposto il ciclo per le estrazioni dal 01-01-2000
If IndiceMensile(es+1)=1 Then metto la condizione che sia l'ultima del mese
n(1)=Fuori90(Estratto(es,1,1)+Estratto(es,9,4)+86) assegno le combinazioni
n(2)=Fuori90(Estratto(es,4,1)+Estratto(es,7,5)+3) ai numeri da giocare
ImpostaGiocata 1,n,ruota,posta,8,1 imposto la giocata
Gioca es metto in gioco la giocata
End If fine della condizione
Next fine dell'istruzione del ciclo estrazioni
ScriviResoconto questa istruzione ci scrive un resoconto dei risultati
End Sub fine del listato
ecco quà il nostro listato, provate a scriverlo ed a eseguirlo, solo così si impara, provando e
riprovando altrimenti impariamo solo a copiare e quello lo sappiamo già fare.
Alcune precisazioni, come consuetudine noi chiamiamo i vettori e le variabili con nomi
che già da soli ci dicono cosa stiamo facendo, è la stessa identica cosa se noi li chiamiamo pippo o
pluto anzichè posta e ruota, i nomi li diamo noi come ci piacciono, naturalmente è piu leggibile un
listato come quello sopra che un listato come questo:
Sub main()
Dim pippo(5)
Dim pluto(10)
Dim mele(10)
pippo(1)=1
pluto(1)=5
For vasi=6877 To EstrazioneFin
If IndiceMensile(vasi+1)=1 Then
mele(1)=Fuori90(Estratto(vasi,1,1)+Estratto(vasi,9,4)+86)
mele(2)=Fuori90(Estratto(vasi,4,1)+Estratto(vasi,7,5)+3)
ImpostaGiocata 1,mele,pluto,pippo,8,1
Gioca vasi
End If
Next
ScriviResoconto
End Sub
ma se provate vedete che funzionano nello stesso identico modo, l'importante è fare sempre
riferimento ai nomi assegnati, se vedete nei due esempi si notano subito i riferimenti, il ciclo
delle estrazioni che sopra lo abbiamo chiamato " es " sotto lo abbiamo chiamato " vasi ", tutto
quello che fà riferimento all'estrazione in esame deve far riferimento al nome assegnato, vedete
la condizione: If IndiceMensile(vasi+1)=1 Then - If IndiceMensile(es+1)=1 Then
gli estratti: Fuori90(Estratto(vasi,1,1) - Fuori90(Estratto(es,1,1)
la giocata: Gioca vasi - Gioca es
così via anche per le altre voci, nessuno ci impedisce di usare un nome rispetto all'altro ma è
sicuramente meglio dare dei nomi intuibili alla prima occhiata.
Una piccola spiegazione anche alle istruzioni che abbiamo usato in questo listato ed ancora non
accennate prima,
EstrazioneFin - abbiamo già visto che questa istruzione ci consente di individuare l'ultima
estrazione in archivio, la possiamo usare in tutte quelle occasioni in cui si deve individuare appunto
l'ultima estrazione in archivio.
IndiceMensile - serve per individuare l'indice mensile dell'estrazione che stiamo esaminando
Fuori90( operazione ) - questa automaticamente ci toglie il 90 da somme che lo superano
esempio:
Fuori90(Estratto(es,1,1)+Estratto(es,9,4)+86) ammettiamo che i due estratti siano 25 e 72
l'operazione sopra equivale a:
Fuori90( 25 + 72 + 86 ) che equivale a dire: se la somma 25+72+86 è superiore a 90 togli 90
25 + 72 + 86 = 183 - 90 = 93 -90 = 3 ecco toglie 90 fino a quando si ha un numero compreso
fra 1 e 90 cioè giocabile al lotto.
Estratto(estrazione , ruota , posizione estratto) questa restituisce l'estratto indicato dai parametri
inseriti fra le parentesi che sono,
l'estrazione che stiamo analizzando, ecco l'importanza del riferimento che abbiamo detto prima, se
l'estrazione in esame la abbiamo chiamata " es " inseriremo
il riferimento " es" se lo abbiamo chiamato in modo diverso andremo ad inserire il nome che
abbiamo usato,
La ruota dell'estratto che vogliamo in numerazione da 1 a 10 che equivale a 1-BA 2-CA..... 10-VE
si possono usare anche riferimenti letterali prestabiliti, BA_ CA_ FI_ ..... VE_ anche se
secondo me è sempre meglio usare la numerazione, anche perchè potremmo scrivere listati in cui la
ruota può cambiare usando una variabile ed a quel punto l'uso della numerazione è indispensabile.
La posizione estratto, cioè in quale posizione estrattiva è l'estratto che vogliamo, 1° 2° 3° 4° o 5°
tornando al nostro esempio sopra avremo:
Fuori90(Estratto(es,1,1)+Estratto(es,9,4)+86) nell'estrazione " es " il 1° estratto di BA (es,1,1)
da sommare al 4° estratto di TO (es,9,4) a cui sommare il fisso 86, il tutto racchiuso dentro
all'istruzione Fuori90 in modo da avere subito il numero giocabile da assegnare al primo elemento
del nostro vettore contenente i numeri da mettere in gioco:
n(1)=Fuori90(Estratto(es,1,1)+Estratto(es,9,4)+86)
Andiamo avanti con le spiegazioni delle istruzioni usate,
ImpostaGiocata 1,n,ruota,posta,8,1 con questa istruzione andiamo a impostare la nostra
giocata, cioè come la leggiamo così si intende,
Imposta la Giocata numero 1, numero 2, numero 3 fino ad un massimo di 50 giocate,
giocami i numeri contenuti dentro gli elementi del vettore n, sulle ruote contenute negli elementi
del vettore ruota, giocameli per le poste contenute negli elementi del vettore posta, me li giochi per
8 colpi, interrompi il gioco all'uscita di 1 numero.
questo è letteralmente il significato della impostazione della giocata, ho fatto sempre riferimento
agli " elementi " contenuti nei vettori perchè noi possiamo dimensionare i vettori per le ruote a 10
per le poste a 5 perchè sono il massimo che possiamo usare, le ruote sono 10 e le poste 5, questo lo
facciamo per comodità, nel senso che quando abbiamo imparato a fare listati la parte comune degli
stessi la copiamo, così se le impostazioni sono quelle standard andranno sempre bene,
ma naturalmente noi andremo ad "assegnare" solo quello che ci serve, nel nostro esempio noi
abbiamo assegnato solamente il primo elemento del vettore delle ruote : ruota(1)=5 ed il solo primo
elemento del vettore delle poste : posta(1)=1 , per il vettore dei numeri da giocare invece abbiamo
assegnato i primi due : n(1)=Fuor.... n(2)=Fuor..... perchè il nostro " Metodo " deve mettere in
gioco appunto 2 numeri per la sorte di Ambata, se volessimo per esempio giocare gli stessi numeri
anche per la sorte di Ambo basterebbe solamente "assegnare" anche questa posta : posta(2)=1 ed
il nostro listato ci verificherà sia la giocata di Ambata che quella di Ambo, naturalmente come
abbiamo impostato la giocata ci fermerà sempre il gioco alla prima uscita di Ambata, se invece
vogliamo che interrompa il gioco all'uscita dell'Ambo dovremo oltre che assegnare la posta
cambiare anche l'interruzione nell'impostazione della giocata:
ImpostaGiocata 1,n,ruota,posta,8,2 questa ultima cifra è appunto la sorte per cui si interrompe la
giocata, il numero precedente invece è il numero dei colpi(8) per cui giocare la giocata.
Sub main() inizio del listato
Dim posta(5) dimensiono il vettore delle poste
Dim ruota(10) dimensiono il vettore delle ruote
Dim n(10) dimensiono il vettore dei numeri da giocare
posta(1)=1 assegno alla posta 1 Ambata il valore di 1
posta(2)=1 assegno alla posta 2 Ambo il valore di 1
ruota(1)=5 assegno alla prima ruota la ruota di MI 5
For es=6877 To EstrazioneFin imposto il ciclo per le estrazioni dal 01-01-2000
If IndiceMensile(es+1)=1 Then metto la condizione che sia l'ultima del mese
n(1)=Fuori90(Estratto(es,1,1)+Estratto(es,9,4)+86) assegno le combinazioni
n(2)=Fuori90(Estratto(es,4,1)+Estratto(es,7,5)+3) ai numeri da giocare
ImpostaGiocata 1,n,ruota,posta,8,2 imposto la giocata
Gioca es metto in gioco la giocata
End If fine della condizione
Next fine dell'istruzione del ciclo estrazioni
ScriviResoconto questa istruzione ci scrive un resoconto dei risultati
End Sub
ecco il listato modificato per l'occasione, mi raccomando scrivete e provate i listati!!!!!!
se li copiate non imparerete mai!!!!!!!
Dopo aver impostato la nostra o le nostre giocate le mettiamo in gioco con l'istruzione:
Gioca es
questa istruzione così semplice è in realtà una delle piu complesse, nel senso che per noi è semplice
ma all'interno del programma è quella che effettua il lavoro maggiore, quando noi facciamo
eseguire al programma questa istruzione, deve mettere in pratica ciò che gli abbiamo detto di fare
con le istruzioni ImpostaGiocata , cioè verifica cosa ha fatto la nostra giocata nei colpi successivi
indicati, fino a che è una sola giocata di due numeri per Ambata per 8 colpi il lavoro è poco, provate
ad immaginare il lavoro che deve svolgere questa semplice istruzione se deve provare 10 quartine
per Ambo,Terno e Quaterna, per 12 colpi magari su 3 ruote...... questo solo per dire che a volte le
cose che sembrano semplici in realtà sono tuttaltro.
ScriviResoconto questa istruzione ci farà come dice la parola stessa un resoconto dei risultati della
nostra prova, se abbiamo diverse giocate possiamo anche avere un resoconto per ogni giocata,
basterà mettere il numero della giocata dopo l'istruzione:
Esempio: se abbiamo 3 giocate e vogliamo il resoconto di ogni singola e quello totale
ScriviResoconto 1 resoconto giocata 1
ScriviResoconto 2 resoconto giocata 2
ScriviResoconto 3 resoconto giocata 3
ScriviResoconto resoconto Totale di tutte le giocate
se le giocate sono molte si può scrivere anche così
For x=1 To 30
ScriviResoconto x
Next
cioè facciamo un ciclo che scrive per noi i 30 resoconti, se poi vogliamo anche quello generale....
For x=1 To 30
ScriviResoconto x
Next
ScriviResoconto
prima scriviamo i 30 resoconti poi scriviamo il resoconto Totale
Ricordate sempre che questo tipo di programmazione è sequenziale, cioè le istruzioni vanno inserite
nella sequenza che vogliamo siano eseguite, con le ricorsioni e le condizioni che vogliamo ma resta
sempre un susseguirsi di istruzioni da eseguire.
Qui sotto vi metto il listato completo del metodo che abbiamo trattato nell'esempio,
Sub main()
Dim ruote(10)
Dim numeri1(10)
Dim numeri(10)
Dim posta(5)
Dim posta1(5)
Dim posta2(5)
posta2(2)=1
posta2(3)=0.8
posta2(4)=0.2
posta1(1)=1
posta(2)=1
ruote(1)=5
k=8
y=2
For n=6876 To EstrazioneFin
If IndiceMensile(n+1)=1 Then
numeri1(1)=Fuori90(Estratto(n,1,1)+Estratto(n,9,4)+86)
numeri1(2)=Fuori90(Estratto(n,4,1)+Estratto(n,7,5)+3)
EliminaRipetuti numeri1
ImpostaGiocata 1,numeri1,ruote,posta1,k,1
numeri1(1)=Fuori90(Estratto(n,1,1)+Estratto(n,9,4)+86)
numeri1(2)=Fuori90(Estratto(n,2,5)+Estratto(n,5,2)+07)
EliminaRipetuti numeri1
ImpostaGiocata 2,numeri1,ruote,posta,k,y
numeri1(1)=Fuori90(Estratto(n,1,1)+Estratto(n,9,4)+86)
numeri1(2)=Fuori90(Estratto(n,6,1)+Estratto(n,9,4)+62)
EliminaRipetuti numeri1
ImpostaGiocata 3,numeri1,ruote,posta,k,y
numeri1(1)=Fuori90(Estratto(n,1,1)+Estratto(n,9,4)+86)
numeri1(2)=Fuori90(Estratto(n,5,2)+Estratto(n,10,5)+79)
EliminaRipetuti numeri1
ImpostaGiocata 4,numeri1,ruote,posta,k,y
numeri1(1)=Fuori90(Estratto(n,1,1)+Estratto(n,9,4)+86)
numeri1(2)=Fuori90(Estratto(n,2,2)+Estratto(n,3,3)+14)
EliminaRipetuti numeri1
ImpostaGiocata 5,numeri1,ruote,posta,k,y
numeri1(1)=Fuori90(Estratto(n,4,1)+Estratto(n,7,5)+3)
numeri1(2)=Fuori90(Estratto(n,2,5)+Estratto(n,5,2)+07)
EliminaRipetuti numeri1
ImpostaGiocata 6,numeri1,ruote,posta,k,y
numeri1(1)=Fuori90(Estratto(n,4,1)+Estratto(n,7,5)+3)
numeri1(2)=Fuori90(Estratto(n,6,1)+Estratto(n,9,4)+62)
EliminaRipetuti numeri1
ImpostaGiocata 7,numeri1,ruote,posta,k,y
numeri1(1)=Fuori90(Estratto(n,4,1)+Estratto(n,7,5)+3)
numeri1(2)=Fuori90(Estratto(n,5,2)+Estratto(n,10,5)+79)
EliminaRipetuti numeri1
ImpostaGiocata 8,numeri1,ruote,posta,k,y
numeri1(1)=Fuori90(Estratto(n,4,1)+Estratto(n,7,5)+3)
numeri1(2)=Fuori90(Estratto(n,2,2)+Estratto(n,3,3)+14)
EliminaRipetuti numeri1
ImpostaGiocata 9,numeri1,ruote,posta,k,y
numeri(1)=Fuori90(Estratto(n,1,1)+Estratto(n,9,4)+86)
numeri(2)=Fuori90(Estratto(n,4,1)+Estratto(n,7,5)+3)
numeri(3)=Fuori90(Estratto(n,2,2)+Estratto(n,3,3)+14)
numeri(4)=Fuori90(Estratto(n,5,2)+Estratto(n,10,5)+79)
numeri(5)=Fuori90(Estratto(n,6,1)+Estratto(n,9,4)+62)
numeri(6)=Fuori90(Estratto(n,2,5)+Estratto(n,5,2)+07)
EliminaRipetuti numeri
ImpostaGiocata 10,numeri,ruote,posta2,k,y
For a=2 To 10
For b=2 To 10
ImpostaInterruzioni a,b,2
ImpostaInterruzioni a,1,1
Next
Next
Gioca n
End If
Next
ScriviResoconto
End Sub
come vedete è solo più complesso perchè ci sono piu giocate e qualche istruzione in più, ma il
listato è uguale al precedente, questo è stato completato aggiungendo alla giocata dei 2 numeri
per Ambata, 4 numeri da accoppiare alle ambate per la sorte dell'Ambo, infatti se guardate vedete la
giocata 1 relativa alla giocata delle Ambate:
numeri1(1)=Fuori90(Estratto(n,1,1)+Estratto(n,9,4)+86)
numeri1(2)=Fuori90(Estratto(n,4,1)+Estratto(n,7,5)+3)
EliminaRipetuti numeri1
ImpostaGiocata 1,numeri1,ruote,posta1,k,1
infatti vedete che ho usato un vettore "numeri1" per contenere i numeri da
giocare, un vettore "ruote" contenente la ruota in gioco "ruote(1)=1" un
vettore per le poste "posta1" contenente la posta per l'Ambata "posta1(1)=1"
poi vedete che ho usato una variabile per indicare il numero dei colpi "k"
ed uno per l'interruzione "y", questo per comodità nel senso che se invece di
ambi secchi ho delle quartine e voglio provare cosa succede ad interrompere il
gioco all'uscita di un Ambo, poi dopo voglio provare ad interrompere all'uscita
di un Terno, oppure prima provo cosa esce giocando per 6 colpi, poi voglio
provare cosa esce giocando per 12 colpi, ogni volta che voglio cambiare con
questo sistema basta che cambi il valore della variabile, non ho bisogno di
andare a cambiare tutti gli ImpostaGiocata ma cambio solo "k" se voglio
aumentare o diminuire i colpi, solo "y" se voglio cambiare la soglia di
interruzione,
poi vedete l'istruzione: EliminaRipetuti numeri1 come dice testualmente se nei
numeri che noi abbiamo assegnato agli elementi del vettore "numeri1" ci sono dei
numeri ripetuti questa istruzione li elimina mettendo in gioco solo i restanti.
Dopo la giocata 1 vedete le giocate da 2 a 9 che sono gli 8 Ambi secchi generati
dall'accoppiamento delle due Ambate ai 4 numeri trovati, cosa abbiamo di diverso
in queste giocate:
numeri1(1)=Fuori90(Estratto(n,1,1)+Estratto(n,9,4)+86)
numeri1(2)=Fuori90(Estratto(n,2,5)+Estratto(n,5,2)+07)
EliminaRipetuti numeri1
ImpostaGiocata 2,numeri1,ruote,posta,k,y
le uniche differenze che abbiamo sono che nella giocata 1 abbiamo messo l'interruzione a 1 perchè
giochiamo per Ambata, nelle altre abbiamo messo "y" come ho spiegato prima, se vedete sopra
"y=2" y è impostato a 2 cioè interrompi all'uscita dell'Ambo, la seconda differenza è quella
relativa alla posta, nella giocata 1 abbiamo il vettore "posta1" in cui avevamo settato il solo primo
elemento "posta1(1)=1" , potremmo settare anche il secondo elemento come nell'esempio ed usare
lo stesso vettore anche per gli Ambi ma cosa troveremmo nel resoconto, che anche per gli ambi il
nostro listato ci ha giocato la posta dell'Ambata, falsandoci i resoconti economici della giocata,
ecco perchè si ricorre ad un secondo vettore per le poste degli Ambi, questo è stato chiamato con un
eccesso di fantasia "posta" che naturalmente è diverso da "posta1" o dal prossimo che vedremo
"posta2" usato per la stessa ragione nella sestina,
dunque nel nostro nuovo vettore "posta" andremo a settare il solo secondo elemento in modo che
nelle giocate dalla 2 alla 9 sia attiva la sola posta per gli Ambi "posta(2)=1", tutto il resto si ripete
giocata per giocata, arriviamo alla 10° giocata, questa riunisce in una unica sestina i nostri 6 numeri,
numeri(1)=Fuori90(Estratto(n,1,1)+Estratto(n,9,4)+86)
numeri(2)=Fuori90(Estratto(n,4,1)+Estratto(n,7,5)+3)
numeri(3)=Fuori90(Estratto(n,2,2)+Estratto(n,3,3)+14)
numeri(4)=Fuori90(Estratto(n,5,2)+Estratto(n,10,5)+79)
numeri(5)=Fuori90(Estratto(n,6,1)+Estratto(n,9,4)+62)
numeri(6)=Fuori90(Estratto(n,2,5)+Estratto(n,5,2)+07)
EliminaRipetuti numeri
ImpostaGiocata 10,numeri,ruote,posta2,k,y
vediamo che abbiamo dovuto cambiare anche il vettore contenente i numeri, il
precedente si chiamava "numeri1" questo si chiama "numeri" per lo stesso motivo
delle poste, se lasciavo il vettore numeri1 avrei dovuto settare 6 elementi, dal
secondo ciclo in poi anche per le ambate e per gli ambi avremmo sempre avuto 6
numeri e non piu i nostri 2 che avevamo impostato, da qui la necessità di usare
un secondo vettore, così il vettore numeri1 ha settato i soli primi due elementi
mentre il vettore numeri ha settato i primi 6 elementi, abbiamo anche usato un
terzo vettore per le poste "posta2" per la stessa ragione precedentemente
esposta, in questa giocata attiviamo anche le poste per Terno e per Quaterna,
"posta2(2)=3 posta2(3)=0.8 posta2(4)=0.2" in poche parole se non siamo
sicuri, abbiamo qualche dubbio, le prime volte fino ad aver preso una certa
dimestichezza con i listati, impostiamo sempre per ogni giocata o gruppi di
giocate uguali, il suo vettore per i numeri, il suo per le poste, il suo per le
ruote,
Per le ruote facciamo una ulteriore precisazione riguardante il gioco a tutte,
quando una giocata deve essere fatta per esempio su MI e Tutte, dovremo
impostare naturalmente 2 giocate, una sulla ruota ed una su tutte, esempio:
Sub main()
Dim posta(5)
Dim ruota(10)
Dim ruota1(10)
Dim n(10)
posta(2)=1
ruota(1)=5
ruota1(1)=11
For es=6877 To EstrazioneFin
If IndiceMensile(es+1)=1 Then
n(1)=Fuori90(Estratto(es,1,1)+Estratto(es,9,4)+86)
n(2)=Fuori90(Estratto(es,2,5)+Estratto(es,5,2)+7)
ImpostaGiocata 1,n,ruota,posta,8,2
ImpostaGiocata 2,n,ruota1,posta,8,2
Gioca es
End If
Next
ScriviResoconto
End Sub
nell'esempio vediamo che il nuovo vettore per le ruote si chiama "ruota1" come elemento è stato
attivato il solo primo, "ruota1(1)=11" settandolo alla ruota 11 cioè TUTTE, quando si deve giocare
su tutte ci si dovrà sempre comportare in questo modo, un vettore solo per la giocata a tutte e il
primo elemento impostato ad 11.
Proseguendo l'analisi del listato completo troviamo queste nuove istruzioni:
For a=2 To 10
For b=2 To 10
ImpostaInterruzioni a,b,2
ImpostaInterruzioni a,1,1
Next
Next
in pratica abbiamo fatto due cicli per comodità che assegnano alle variabili "a"
e "b" i valori da 2 a 10, in modo da limitarci la fatica di scrivere una
infinità di righe per l'operazione che vogliamo andare a fare,
ImpostaInterruzioni a,b,2
questa istruzione la usiamo quando abbiamo molte giocate e vogliamo come nel
nostro caso che il gioco si iterrompa al primo esito positivo di una qualunque
delle nostre giocate, per esempio se nella giocata 1 esce l'Ambata quella
giocata si interrompe perchè nella impostazione della stessa gli abbiamo
specificato di interromperla: ImpostaGiocata 1,numeri1,ruote,posta1,k,1
ma chi dice alle altre 9 giocate di fermarsi perchè è uscita l'Ambata?
la nostra istruzione ImpostaInterruzioni , si legge in questo modo:
ImpostaInterruzioni a,b,2 Interrompi la giocata "a" se al giocata "b" ha dato
esito per la sorte di "2" Ambo
ImpostaInterruzioni a,1,1 Interrompi la giocata "a" se al giocata "1" ha dato
esito per la sorte di "1" Ambata
ecco fatto il nostro giochetto, adesso se esce l'Ambata ferma tutte le altre
giocate, come se esce un Ambo nelle restanti giocate.
Finito anche questo listato, andiamo a vederne un'altro diverso dove vediamo
anche l'uso di altre istruzioni,
Sub main()
Dim ruote(10)
Dim poste(5)
Dim n1(10)
poste(1)=1
ruote(1)=10
sp=70
n1(1)=11
n1(2)=70
k=18
y=1
casi=0
ini=5687
fin=EstrazioneFin
For es=ini To fin
AvanzamentoElab ini,fin,es
If Posizione(es,ruote,sp)>0 Then
casi=casi+1
ImpostaGiocata 1,n1,ruote,poste,k,y
Gioca es
End If
Next
Scrivi " Casi = " & casi
ScriviResoconto
End Sub
Questo è il classico listato per mettere in gioco una determinata combinazione
all'uscita di un "Numero Spia", cioè metteremo come condizione non più che sia
una o altra estrazione, ma che sia uscito un determinato numero per giocare la
nostra previsione, non ci soffermiamo sulle impostazioni generali che come
vedete sono sempre le stesse, come sopra vedete che io ricorro sempre o quasi
all'uso di variabili, in questo caso ho usato due variabili anche per mettere
i limiti delle estrazioni della ricerca "ini" e "fin", una per il numero spia
"sp", sono abitudini che si prendono man mano che si prende dimestichezza con la
programmazione dei listati, sarebbe stata la stessa cosa scrivere così:
Sub main()
Dim ruote(10)
Dim poste(5)
Dim n1(10)
poste(1)=1
ruote(1)=10
n1(1)=11
n1(2)=70
casi=0
For es=5687 To EstrazioneFin
AvanzamentoElab ini,fin,es
If Posizione(es,ruote,70)>0 Then
casi=casi+1
ImpostaGiocata 1,n1,ruote,poste,18,1
Gioca es
End If
Next
Scrivi " Casi = " & casi
ScriviResoconto
End Sub
funziona allo stesso modo, non c'è nessuna differenza sostanziale hai fini della funzionalità,
andiamo a vedere cosa abbiamo scritto, dunque dimensionato e settato i parametri che ci servono,
vediamo di fissare la nostra spia, nell'esempio cerchiamo l'uscita del numero 70 sulla ruota di VE,
dopo aver impostato il ciclo delle estrazioni troviamo una nuova istruzione,
AvanzamentoElab ini,fin,es questa è una istruzione di sola estetica, nel senso
che ci fa vedere l'avanzamento della nostra elaborazione nella barra in fondo
all'editor di L8, è utile quando facciamo girare dei listati che impiegano molto
tempo, in questo modo vediamo a che punto è l'elaborazione dello stesso, ho
detto che è solo estetica nel senso che il nostro listato funziona ugualmente
anche senza quella istruzione, ma naturalmente è piu bello e completo con essa,
i parametri che richiede sono:
ini: cioè inizio della elaborazione - fin: cioè fine della elaborazione
es: incremento della elaborazione, ecco perchè vi dicevo prima dell'uso delle
variabili anche per gli estremi delle estrazioni, se voglio cambiare basta
cambiare i primi due valori ed il gioco è fatto.
If Posizione(es,ruote,70)>0 Then
questa è la condizione che ci cerca la spia, l'istruzione :
Posizione(es,ruote,70) restituisce un valore 1 se in quella estrazione (es)
nella o nelle ruote del vettore "ruote" è presente il numero 70 perciò:
se nell'estrazione es sulla ruota (ruote(1)=10) di VE è presente il num. 70
esegui le istruzioni comprese nel blocco fra If ... Then ed End If altrimenti
esegui le istruzioni seguenti, cioè il Next che và ad analizzare l'estrazione
successiva fino alla fine delle estrazioni.
Quando verrà trovato in una estrazione il numero 70 su VE eseguirà le istruzioni
che come prima impostano la o le giocate, e gioca la previsione stessa, in piu
troviamo questa riga:
casi=casi+1
se guardate all'inizio fra le variabili settate c'è anche "casi=0" cioè abbiamo
usato una variabile chiamata "casi" e l'abbiamo impostata a 0, ci servirà per
sapere quanti casi di 70 a VE abbiamo trovato, infatti l'incremento di questa
variabile è stato inserito nel blocco di istruzioni che si eseguono solo quando
troviamo il 70, casi=casi+1 appunto ci aumenterà di 1 il nostro "contatore" ogni
volta che troviamo il 70, alla fine delle estrazioni la variabile "casi"
conterrà appunto le volte in cui abbiamo trovato il 70 a VE, per leggere
questo dato naturalmente ci serviremo di una ulteriore istruzione:
Scrivi " Casi = " & casi
con questa istruzione facciamo scrivere al listato tutto quello che vogliamo,
lo dice la parola stessa "Scrivi" cioè nella finestra dei risultati ( Output )
in questo caso verrà scritto:
Casi = 50 il cinquanta è un numero inventato, nella realtà sarà il numero
contenuto nella variabile "casi", cosa scrive questa istruzione,
Scrive quello che gli diciamo noi di scrivere....semplice!!!
quando vogliamo scrivere del testo lo dobbiamo mettere fra parentesi " Casi = "
ci scriverà appunto la scritta contenuta dalle parentesi:
Casi =
TUTTO QUELLO CHE VOGLIAMO SCRITTO LO METTIAMO DENTRO ALLE PARENTESI
per unire due scritte si usa " & " (quello sopra al tasto 6) infatti nel nostro
esempio uniamo la scritta Casi = con la scritta del valore contenuto nella
variabile "casi", quanto dobbiamo scrivere il contenuto di una variabile
mettiamo direttamente il nome della stessa, se scriviamo:
Scrivi casi nell' Output vedremo scritto: 50 e non la parola casi, con la
pratica comunque si imparerà ad usare questa come altre istruzioni, quando
viene qualche dubbio, anche se molto schematico l'help del linguaggio è
abbastanza chiaro sull'uso delle varie istruzioni, agli inizi leggiamolo assieme
alla lettura di listati già fatti da altri, secondo me rimane sempre il modo
migliore per imparare, con queste poche informazioni che stò cercando di darvi e
la lettura dei listati piano piano si riuscirà a fare qualche listato in piena
autonomia. per questo minicorso di L8 mi sembra sufficente così, per andare
oltre si necessità di pratica ed un minimo di conoscenza della programmazione di
base, ho cercato con questo di avvicinare quelli alle prime armi con i listati
sperando di essergli stato utile.
ciao Danilo
Qui' trovate il minicorso in formato .PDF:
www.2shared.com/document/GjkD1boD/CORSO_DANILO.html
Sono graditi i vostri voti per aiutare questo Forum a crescere.Grazie! Clicca qui
Saluti,sean69!!
Edited by sean69 - 6/3/2012, 18:01. -
.
Grazie.
Spero di trovare una risposta queste due domande:
- NumeriPari
- NumeriDispari
in quanto cerco di fare un programmino che mi da solo uno dei due risultati (pari o dispari).
Ciao e grazie ancora
luciano.