' Programma lotto di kiara87
' il programma legge i dati (numeri estratti da un file.dat)
' e permette di vedere le estrazioni a video
' i numeri con distanza 30 sono evidenziati con colore rosso
' questi numeri vengono memorizzati e stampati
' Nota 1: sono d'accordo con Bplus e' molto piu'
' rapido lavorare con dati in RAM che con dati su Disco HDD/SSD/USB/CD/DVD
' valori COSTANTI generali Vero e Falso
' le 11 ruote del lotto
CONST Bari
= 1, Cagliari
= 2, Firenze
= 3, Genova
= 4, Milano
= 5 CONST Napoli
= 6, Palermo
= 7, Roma
= 8, Torino
= 9, Venezia
= 10, Nazionale
= 11 CONST Cifra
= 2 ' ogni numero estratto e' una cifra di due caratteri (01-90)
DIM a
AS STRING ' una stringa per leggere i dati dal file
' salta al sottoprogramma LeggiFile delimitato
' dalla Label LeggiFIle e dal RETURN
' verifica che tutto il file sia letto
'FOR b = 1 TO LEN(a) - 116 STEP 116
' PRINT MID$(a, b, 116)
' ' PRINT INSTR(b, a, CHR$(13))
' _DELAY .1
'NEXT b
' il ciclo DO...LOOP UNTIL condizione e' un modo piu' moderno
' rispetto a Etichetta: .... IF condizione GOTO Etichetta
b = 1
f = 1
z$ = " "
CLS ' questo risolve un glitch di output sullo schermo ' in alternativa alla riga sopra CLS nel sottoblocco
' MostraEstratti va stampata la stringa estratto e
' non il suo valore corrispondente ottenuto con VAL
GOSUB MostraRuote
' scrive il nome delle ruote del lotto ' prende l'input dell'utente
END ' indica la fine logica del programma
'-----------------------AREA sottoprogrammi /SUBroutines
' questa etichetta /label indica il punto di inizio
' del sottoprogramma (SUBroutine) LeggiFile scritto con vecchio stile GOSUB
' che usa una etichetta/label e un RETURN per riprendere da dove si era interotto
' nota1: un metodo ancora piu' antico e' il salto con GOTO
' che richiede una seconda etichetta per ritornare nel MAIN o programma principale
' nota2: un metodo migliore e' SUB nomeroutine....END SUB
' perche' permette la localizzazione delle variabili
LeggiFile:
'se non trova lotto.dat segnala l'errore a video e termina il programma
'<--------------------
' questo metodo e' piu' lento
' apre il file lotto.dat per leggere in maniera sequenziale i dati
'OPEN "lotto.dat" FOR INPUT AS #1
'LINE INPUT #1, a ' riempe la variabile a con una riga intera di valori
'<--------------------
' apre lotto.dat per leggerlo in maniera binaria
a
= SPACE$(LOF(1)) ' riempe la variabile a di spazi fino alla grandezza in byte del file apertoGET #1, , a
' legge con una unica operazione il file e lo pone nella variabiel a CLOSE #1 ' chiude il file appena letto ' indica il termine della SUBroutine LeggiFile
' e RITORNA alla riga di codice successiva al salto GOSUB
'seconda SUBroutine /sottoprogramma
MostraRuote:
'------------------------------------
PRINT "+ avanti - indietro"
' indica il termine della SUBroutine MostraRuote
' e RITORNA alla riga di codice successiva al salto GOSUB
'terzo sottoprogramma o SUBroutine
MostraEstratti:
' le prime 4 cifre sembrano essere in numero della estrazione
y = 11 ' prima posizione per il carattere da stampare
FOR x
= 1 TO 5 STEP 1 ' questo ciclo FOR e' di 5 perche' ogni ruota ha 5 estrazioni A1 = "" ' resetto a1 per il prossimo giro
FOR V
= Bari
TO Nazionale
' per tutte le ruote 'posiziona il cursore
' scrive il numero estratto
PRINT VAL(MID$(a
, (V
- 1) * 10 + 5 + ((x
- 1) * 2) + (b
- 1), Cifra
));
"";
A1
= A1
+ (MID$(a
, (V
- 1) * 10 + 5 + ((x
- 1) * 2) + (b
- 1), Cifra
))' indica il termine della SUBroutine MostraEstratti
' e RITORNA alla riga di codice successiva al salto GOSUB
y = 58 ' prima posizione per il carattere da stampare
FOR x
= 1 TO 5 STEP 1 ' questo ciclo FOR e' di 5 perche' ogni ruota ha 5 estrazioni A1 = "" ' resetto a1 per il prossimo giro
FOR V
= Bari
TO Nazionale
' per tutte le ruote 'posiziona il cursore
' scrive il numero estratto
PRINT VAL(MID$(a
, (V
- 1) * 10 + 5 + ((x
- 1) * 2) + (f
- 1), Cifra
));
"";
A1
= A1
+ (MID$(a
, (V
- 1) * 10 + 5 + ((x
- 1) * 2) + (f
- 1), Cifra
))' indica il termine della SUBroutine MostraEstratti
' e RITORNA alla riga di codice successiva al salto GOSUB
Mostra30:
FOR v1
= Bari
TO Venezia
' per tutte le ruote FOR v2
= v1
+ 1 TO Nazionale
IF ABS(VAL(MID$(a
, (v1
- 1) * 10 + 5 + ((x
- 1) * 2) + (b
- 1), Cifra
)) - VAL(MID$(a
, (v2
- 1) * 10 + 5 + ((x
- 1) * 2) + (b
- 1), Cifra
))) = 30 THEN 'posiziona il cursore
' scrive il numero estratto
PRINT VAL(MID$(a
, (v1
- 1) * 10 + 5 + ((x
- 1) * 2) + (b
- 1), Cifra
));
"";
PRINT #2, (MID$(a
, (v1
- 1) * 10 + 5 + ((x
- 1) * 2) + (b
- 1), Cifra
)) 'posiziona il cursore
' scrive il numero estratto
PRINT VAL(MID$(a
, (v2
- 1) * 10 + 5 + ((x
- 1) * 2) + (b
- 1), Cifra
));
"";
PRINT #2, MID$(a
, (v2
- 1) * 10 + 5 + ((x
- 1) * 2) + (b
- 1), Cifra
) ' indica il termine della SUBroutine MostraEstratti
' e RITORNA alla riga di codice successiva al salto GOSUB
MostraCondizione:
FOR v3
= Bari
TO Venezia
' per tutte le ruote FOR v4
= v3
+ 1 TO Nazionale
IF ABS(VAL(MID$(a
, (v3
- 1) * 10 + 5 + ((x
- 1) * 2) + (f
- 1), Cifra
)) - VAL(MID$(a
, (v4
- 1) * 10 + 5 + ((x
- 1) * 2) + (f
- 1), Cifra
))) = 30 THEN 'posiziona il cursore
' scrive il numero estratto
PRINT VAL(MID$(a
, (v3
- 1) * 10 + 5 + ((x
- 1) * 2) + (f
- 1), Cifra
));
"";
PRINT #2, (MID$(a
, (v3
- 1) * 10 + 5 + ((x
- 1) * 2) + (f
- 1), Cifra
)) 'posiziona il cursore
' scrive il numero estratto
PRINT VAL(MID$(a
, (v4
- 1) * 10 + 5 + ((x
- 1) * 2) + (f
- 1), Cifra
));
"";
PRINT #2, MID$(a
, (v4
- 1) * 10 + 5 + ((x
- 1) * 2) + (f
- 1), Cifra
) ' indica il termine della SUBroutine MostraEstratti
' e RITORNA alla riga di codice successiva al salto GOSUB