| Minicorso di programmazione per L8 versione 5.0 e superiori
Per iniziare con questa 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 bisogna 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
tre lezioni per uno script
Lezione 1
Premesso che non sono un docente........ma l'ultimo degli asini in fatto di informatica, come ho imparato a fare listati smontando, rimontando ed incasinando quelli degli altri................vediamo se riesco ad incasinarVi alcuni consigli iniziali !!!!!!!!!!
Alcune indicazioni: Prima di iniziare con i listati vediamo di capire come sono scritti ed il significato di certi colori:
Le righe verdi (precedute dall'apice .'. sono righe di commento che servono per spiegare o per tenere traccia di quanto fà quello che si scrive.
Le parole azzurre sono istruzioni che si richiamano al Visual Basic originale e non sono tante quelle che servono per fare un normale listatino.
Le parole rosse sono istruzioni che richiamano "routine" dedicate al Lotto, create apposta dal programmatore per facilitare la vita a chi scrive.E le potete trovare dettagliatamente spiegate nell'Help di L8.................peccato però manchino, nella gran parte, di esempi !!!.........mica si può avere tutto dalla vita !!!!!!!!!
Analizziamo quanto troveremo nel listato che segue:
Sub main() End Sub Tra queste due parole viene svolto tutto il listato ed indicano la parte centrale di uno Script che in teoria può essere composto anche da altre parti.
Dim E' una dichiarazione di variabile con indice () e riserva una parte di memoria per la variabile dichiarata, tra parentesi si mette la quantità di valori che può avere.
EstrazioneFin Routine del programma che riporta l'ultima estrazione dell'archivio in uso
For.....To.....Next Questo è il cuore di quasi tutti i listati per Lotto, è un contatore e visto ci sarà da fare la scansione dell'archivio, delle ruote e dei cinque numeri possono essere svariati nello stesso listato, se scrivo:
For es = EstrazioneFin- 100 To EstrazioneFin .......................................... Next "es" assumerà il numero dell'estrazione dall'ultima meno 100 all'ultima
Invece se scrivo: For r = 1 To 10 ............. Next "r" avrà il numero di ogni singola ruota da Bari Venezia.
AvanzamentoElab Serve per vedere se il listato gira, fà avanzare la barra di stato del prg., potrebbe capitare di sbagliare qualcosa e far entrare il listato in un loop infinito !!!
If........Then .............. End If Evento condizionato, se scrivo:
If IndiceMensile(es) = 1 Then ........................... End If Tutte le istruzioni e comandi inseriti tra l'If ...Then e l'End If vengono eseguite se si avvera la condizione richiesta, in questo caso, che l'estrazione in esame sia la 1° di ogni mese.
IndiceMensile(es) Come detto sopra, ogni estrazione ha tre numerazioni: la prima misura il numero totale delle stesse nell'archivio, la seconda "IndiceAnnuale" ci dice a che estr. dell'anno siamo, la terza "IndiceMensile" ci dà il numero di una estr. nel corso del mese.
Estratto(es,r,p) Ci rende il numero che è sortito alla tal estr.(es), su una certa ruota(r) e in una data posizione(p).
Fuori90(x) Nel lotto esistono 90 numeri per cui questa istruzione riporta nei 90 automaticamente un numero maggiore semplicemente togliendo 90 tante volte quante necessarie perchè sia compreso nella novantina: ......120-90=30.......oppure....200-90-90=20......tanto per dire
ImpostaGiocata (x,numeri,ruota,posta,colpi,sorte) Dove: "x" è il numero della giocata, "numeri" una variabile che contiene il numero o i numeri da giocare, "ruota" la ruota su cui giocare, "posta" quanto giochiamo, "colpi" per quante volte si gioca e "sorte" ( facoltativo ) dirà al listato di interrompere il gioco se sortirà l'ambata(1), se invece sarà l'ambo(2), per il terno(3) e via dicendo.
Gioca es E' l'ordine di eseguire il gioco ad una data estr.
ScriviResoconto Chiama una routine che fà la cassa di quanto ci costa il gioco o quanto ci rende.
Circa una decina di istruzioni in tutto per fare un listatino, non tante e nemmeno difficile metterle insieme !!!!!!!! ..........come adesso vedremo:

Proviamo a metterle insieme perchè il listato che faremo verifichi questo semplice metodino:
Alla 1°estrazione del mese si prende il 1° ed il 5° estratto di Bari si sommano ed il risultato lo si mette in gioco x 9 colpi. Si verificano gli esiti x un periodo di 100 estrazioni.

Ogni istruzione è preceduta da un minimo di spiegazione, ma vi potete aiutare anche con l'help o con "ab?" in alto a destra di L8 per sapere esattamente come và composta l'istruzione.
Ops!!! .............dimenticavo !!! Il programma di riferimento per questi listati è L8 di Flavio Perona ..............se qualcuno non se ne fosse accorto !!!!!!!!!!!! Non perchè ci sia solo questo, ma perchè è stato il primo che ho trovato e che mi ha dato la possibilità di iniziare il listamento, ho provato altri programmi ed eventualmente più avanti si potrà dire qualcosa anche di loro!!!
Non c'è bisogno di riscriverlo basta fare il copiaincolla del listato o al limite scaricare il file subito sotto il listato. Per la cronaca: VI = Variabile con indice.............quelle con () VF=Variabile Fissa..........tipo: a, b, es, ini, fin...ecc...ecc... Questo listato gira dalla versione 4.2....in sù di L8............scaricando il file !!! Copiaincollato..........così com'è..........anche sulla 4.1....!!!
Inizio fisso per tutti i listati Sub main() ' Dichiaro le variabili con indice "()" che userò e la dimensione delle stesse (procedura obbligatoria) Dim ambata(1) Dim ruota(1) Dim posta(1) ' Attribuisco un valore ad alcune "VI"(variabile indicizzata) ruota(1) = 1 ' 1 = bari posta(1) = 1 ' 1 lira x ambata
' Dò a due variabili fisse "VF" il periodo di escursione sull'archivio ' estr. nel quale fare la verifica, solo per evitare di scrivere ' istruzioni + lunghe se si ripetono spesso fin = EstrazioneFin ini = fin -100 ' Faccio avanzare la verifica estr. x estr. nell'archivio For es=ini To fin AvanzamentoElab ini,fin,es ' Serve solo x vedere se il listato lavora ' facendo avanzare la barra di stato dello Script Manager
' Condizione......se siamo alla 1° estr. del mese allora procedi con i ' conteggi, ma evita tutte le altre If IndiceMensile(es) = 1 Then
'Attribuisco a 2 VF il valore degli estratti nell'estr.(es), sulla ruota '(1=Bari), in posizione(1° e 5°) a = Estratto(es,1,1) b = Estratto(es,1,5)
' Dò ad una VI (solo queste sono accettate dall'Impostagiocata) il ' risultato della somma dei 2 estratti col Fuori90 ambata(1) = Fuori90(a + b)
' Imposto la giocata con: numero della giocata, numeri da giocare, ruota ' o ruote sù cui giocare, soldi da giocare, x quanti colpi e se l'esito ' é positivo interrompere o no la giocata ImpostaGiocata 1,ambata,ruota,posta,9,1
' Attivo la giocata all'estrz. scelta(es) Gioca es
' Chiudo la condizione "If IndiceMensile(es)=1 Then" End If
' Avanzo fino a chiudere il conteggio chiesto dal "For....To....Next" Next
' Chiedo il resoconto della giocata ScriviResoconto
' ultima istruzione, fissa come la 1° End Sub Lezione 2
Si va avanti
Allora questo sotto è il listato "Prova 1" pulito dalle spiegazioni, così iniziamo a prendere confidenza con l'architettura del listato e con l'armonia del suo scorrere...........eh eh eh !!!..........sembrerà una baggianata, ma il più delle volte trovo un errore dove la fluidità del listato si intoppa e non corrisponde più a quanto lo sviluppo del metodo mi aveva fatto pensare ...................mai detto che sono normale !!!!!
Sub main() Dim ambata(1) Dim ruota(1) Dim posta(1) ruota(1)=1 posta(1)=1fin= EstrazioneFin ini=fin -100 For es=ini To fin AvanzamentoElab ini,fin,es
If IndiceMensile(es)=1 Then a=Estratto(es,1,1) b=Estratto(es,1,5) ambata(1)=Fuori90(a + b)
ImpostaGiocata 1,ambata,ruota,posta,9,1 Gioca es
End If Next ScriviResoconto End Sub  Bene...............adesso cosa ci aggiungiamo ???????????
1°) Mettiamo un'altra ambata (che sarà il vertibile della 1°) e quattro abbinamenti x ambo, le giocate saranno così......2 ambate e 8 ambi 2°) Per semplificare l'output del listato si può usare l'istruzione ",,True" dopo il "Gioca es", in tal modo verranno visualizzati solo gli esiti positivi.....(poi spiegheremo meglio la fazenda !!!!)
Per adesso basta così, tanto più che andando assolutamente a caso, gli esiti mi sembrano del tutto felici........ ........ per cui me li vado a giocare..............hai visto mai !!!!!!!!!!!!!!!!!!!!!!!!!!!!
Nuova istruzione: y = Vert(x) Attribuisce a y il numero x ........ letto al contrario, spiegare cos'è il vertibile a chi mastica di lotto ...............sich !!! ................ siamo seri !!!  Sub main() Dim ambata(2) 'Aumento a 2 la dimensione della (variabile indicizzata) "ambata" Dim abb(4) 'Dichiaro la VI "abb(4)" per gli abbinamenti x ambo Dim numeri(2) 'Dichiaro la VI "numeri(2)" x l'ImpostaGiocata ambi Dim ruota(1) Dim posta(1) Dim poste(2) 'Dichiaro la VI "poste(2)" per il gioco d'ambo ruota(1)=1 posta(1)=1 'Dò valore 1 (lira, euro, cent!!!) alle poste del gioco poste(2)=1 abb(1)=10 'Dò alle 4 "abb" valori casuali per formare gli ambi abb(2)=20 abb(3)=30 abb(4)=40
fin=EstrazioneFin ini=fin -100 For es=ini To fin AvanzamentoElab ini,fin,es
If IndiceMensile(es)=1 Then a=Estratto(es,1,1) b=Estratto(es,1,5) ambata(1)=Fuori90(a + b) ambata(2)=Vert(ambata(1))'Attribuisco alla (ambata(2)) il vertibile della 1°ambata
co=1 'metto ad 1 il contatore della giocate ImpostaGiocata co,ambata,ruota,posta,9,1 'Imposto le giocate per ambata
For x=1 To 2 'conto le ambate For y=1 To 4 'conto gli abbinamenti co=co+1 'x ogni abbinamento ambata + abb incremento il contagiocate numeri(1)=ambata(x) 'Dò a numeri(1) e (2) i vari valori di ambata e abb numeri(2)=abb(y) ImpostaGiocata co,numeri,ruota,poste,9,2 'imposto le giocate x ambo Next 'chiudo i due for precedenti Next
Gioca es,True 'Se si vogliono vedere solo gli esiti positivi, basta aggiungere",True" 'all'istruzione "Gioca es" togliendo l'apostrofo davantialla virgola End If Next ScriviResoconto End Sub Lezione 3
La nave và
Facciamo 3 aggiuntine alla nostra nave scuola:
1°) Eliminiamo eventuali ambi con numeri ripetuti in gioco, inutili ai fini del gioco 2°) Mettiamo un blocco alle giocate in caso di un' esito positivo 3°) Razionalizziamo il "Gioca es"
Pulito il listato da tutte le spiegazioni precedenti:
Sub main Dim ambata(2) Dim abb(4) Dim numeri(2) Dim ruota(1) Dim posta(1) Dim poste(2) ruota(1)=1 posta(1)=1 poste(2)=1 abb(1)=10 abb(2)=20 abb(3)=30 abb(4)=40
fin=EstrazioneFin ini=fin -100 For es=ini To fin AvanzamentoElab ini,fin,es If IndiceMensile(es)=1 Then a=Estratto(es,1,1) b=Estratto(es,1,5) ambata(1)=Fuori90(a + b) ambata(2)=Vert(ambata(1)) co=1 ImpostaGiocata co,ambata,ruota,posta,9,1 For x=1 To 2 For y=1 To 4 co=co+1 numeri(1)=ambata(x) numeri(2)=abb(y) ImpostaGiocata co,numeri,ruota,poste,9,2 Next Next
Gioca es
End If Next ScriviResoconto End Sub
Subito dopo aver composto l'ambo con:
For x=1 To 2 For y=1 To 4 co=co+1 numeri(1)=ambata(x) numeri(2)=abb(y)
può succedere che i due numeri siano uguali per cui la giocata sarebbe inutile, ma il listato visualizzerebbe una giocata, non valida, ( un numero x ambo ) creando confusione, si può eliminare il fatto con questa istruzione:
If NumeriRipetuti(numeri) = True Then Erase numeri
Che vuol dì: se i due numeri sono uguali allora me li cancelli tutti e due per cui l'ImpostaGiocata non trovando numeri da giocare mi salta la giocata relativa, e questo lo si può vedere disattivando il ",True" del " Gioca es " in modo da vedere tutte le giocate, si noterà che sulle 9 giocate può capitare che ne manchi una, lì c'era un ambo ripetuto che è stato eliminato.
Terminati gli " ImpostaGiocata " vediamo di dire al listato come mi deve bloccare tutto il " Gioca es " al 1° esito positivo:
For x=2 To 9 ImpostaInterruzioni x,1,1 ImpostaInterruzioni 1,x,2 Next Ovvero, attivato un contatore da 2 a 9 (quanti sono gli ambi) col 1°" ImpostaInterruzioni x,1,1", gli dirò bloccami le giocate da 2 a 9 (x) se la giocata numero 1 (,1,) e sarebbe quella dell'ambata, avrà dato esito positivo per ambata (,1).
Viceversa......col secondo " ImpostaInterruzioni 1,x,2 " gli dico, mi blocchi la giocata numero 1 (ambata) se la giocata x ( da 2 a 9........gli ambi) hanno dato esito positivo per 2 numeri..... ....un ambo appunto !!!!!!! Arriviamo al "Gioca es"
Se la scrivo così com'è mi fa vedere in Output tutte e nove le giocate con tanto di esiti negativi per ogni estrazione scelta, ovvero mi fa un casino della Mianonna da rimbecilirmi le palle degli occhi......... d'altro canto se uso: "Gioca es,True " mi fa veder sì, solo gli esiti positivi,ma il vigliacco mi nasconde anche gli esiti eventualmente in corso, per cui non so se devo giocarli ancora o no .............aluuuuuuuuura ???????
Basta dirgli le cose nelle dovute maniere !!! If es<fin-9 Then Gioca es, True Else Gioca es End If
|