Author Topic: Aritmologia e Matematica, un esempio di programma/ Arithmology and Math, a demo  (Read 3563 times)

0 Members and 1 Guest are viewing this topic.

Offline TempodiBasic

  • Forum Resident
  • Posts: 1792
    • View Profile
Hi guys and gals
I have found some time to spend to programming so I go deeper in the request of Kiara87.
The ideas about a Lotto program are many and they are not so immediately or clear to understand...
here the Arithmology sum
  [ You are not allowed to view this attachment ]  

that as you have observed it has a Cabala's fashion.

here the code that solve the issue of kiara87 about a program to search and to show the absent number of the Symmetric Triple following the AMBO ISOTOPIC . As you can see it must be joined to the date function made by Bplus to get all the specific solved.


------------------------------------ ITALIAN VERSIONE
Ciao ragazzi e ragazze
Ho trovato del tempo da dedicare alla programmazione quindi vado più a fondo nella richiesta di Kiara87.
Le idee su un programma Lotto sono tante e non sono così immediate o chiare da capire ...
qui la somma di aritmologia
   [ You are not allowed to view this attachment ]
Code: QB64: [Select]
  1. ' Programma lotto di kiara87
  2. ' il programma legge i dati (numeri estratti da un file.dat)
  3. ' e permette di vedere  le estrazioni a video
  4. ' i numeri con distanza 30 sono evidenziati con colore rosso
  5. ' questi numeri vengono memorizzati e stampati
  6.  
  7. ' Nota 1: sono d'accordo con Bplus e' molto piu'
  8. ' rapido lavorare con dati in RAM che con dati su Disco HDD/SSD/USB/CD/DVD
  9.  
  10. 'nota 2: si e' scoperto che la distanza 30 e' aritmologica ossia
  11. ' in un sistema ciclico 1-90 per cui se si va oltre il limite si ritorna nel range 1-90
  12. ' invece di pensare i numeri su di una linea retta bisogna pensarli su una
  13. ' linea a cerchio per cui sottrarre o aggiungere equivale a spostarsi indietro
  14. ' o in avanti di un numero specificato di posizioni
  15.  
  16. 'nota 3: lo scopo della ricerca delle coppie di numeri distanti 30 unita'
  17. ' e' quello di individuare la terzina simmetrica con passo 30 che e' interessata
  18. ' (ossia che con 2 numeri forma un ambo) per cercare gli AMBI ISOTOPI
  19. ' (ossia due coppie di numeri che nella griglia delle estrazioni mostrano
  20. ' la stessa posizione formando un quadrilatero)
  21.  
  22. 'nota 4: la coppia di numeri di una terzina simmetrica puo' essere
  23. ' in orizzontale  ( i numeri sono nella stessa ruota di estrazione)
  24. ' in verticale ( i numeri sono nella ' stessa posizione di estrazione tipo 1 estratto,
  25. ' 2 estratto...5 estratto)
  26. ' in diagonale (i numeri appartengono a ruota estrattiva e colonna estrattiva diverse)
  27. '
  28.  
  29. ' valori COSTANTI  generali Vero e Falso
  30. CONST True = -1, False = NOT True
  31. ' le 11 ruote del lotto
  32. CONST Bari = 1, Cagliari = 2, Firenze = 3, Genova = 4, Milano = 5
  33. CONST Napoli = 6, Palermo = 7, Roma = 8, Torino = 9, Venezia = 10, Nazionale = 11
  34. CONST Cifra = 2 ' ogni numero estratto e' una cifra di due caratteri (01-90)
  35.  
  36. DIM a AS STRING ' una stringa per leggere i dati dal file
  37.  
  38. ' salta al sottoprogramma LeggiFile delimitato
  39. ' dalla Label LeggiFIle e dal RETURN
  40. GOSUB LeggiFile
  41.  
  42. ' verifica che tutto il file sia letto
  43. 'FOR b = 1 TO LEN(a) - 116 STEP 116
  44. '    PRINT MID$(a, b, 116)
  45. '    '    PRINT INSTR(b, a, CHR$(13))
  46. '    _DELAY .1
  47. 'NEXT b
  48.  
  49.  
  50.  
  51. ' il ciclo DO...LOOP UNTIL condizione e' un modo piu' moderno
  52. ' rispetto a Etichetta: .... IF condizione GOTO Etichetta
  53. b = 1 ' flag che conta la posizione di lettura nel file  per il riquadro sinistro
  54. f = 1 ' flag che conta la posizione di lettura nel file  per il riquadro destro
  55. z$ = " " ' flag per l'output a schermo del programma
  56. OPEN "distanza30.dat" FOR APPEND AS #2 ' apertura del file dei risultati
  57.     IF z$ <> "" THEN ' se non c'e' input non viene eseguito
  58.         CLS ' questo risolve un glitch di output sullo schermo
  59.         ' in alternativa alla riga sopra CLS nel sottoblocco
  60.         ' MostraEstratti va stampata la stringa estratto e
  61.         ' non il suo valore corrispondente ottenuto con VAL
  62.         GOSUB MostraRuote ' scrive il nome delle ruote del lotto
  63.         GOSUB MostraEstratti ' scrive le estrazioni
  64.         GOSUB cerca30 ' evidenzia gli ambi isotopi nella estrazione di sinistra
  65.         ' e se la terzina simmetrica e' incompleta  segnala il numero mancante
  66.     END IF
  67.     ' prende l'input dell'utente
  68.     z$ = UCASE$(INKEY$) ' Z$ mantiene il maiuscolo di Inkey$
  69.     IF z$ = CHR$(0) + CHR$(72) AND b < (LEN(a) - 116) THEN b = b + 116
  70.     IF z$ = CHR$(0) + CHR$(80) AND b > 116 THEN b = b - 116
  71.     IF z$ = "+" AND f < (LEN(a) - 116) THEN f = f + 116
  72.     IF z$ = "-" AND f > 116 THEN f = f - 116
  73.     IF z$ <> "" THEN riga = 0
  74. LOOP UNTIL z$ = "Q" ' esegue questo ciclo fino a che si preme q per quit
  75. CLOSE #2 ' chiude il file che memorizza i distanti 30 per ogni estrazione esaminata a video
  76.  
  77. END ' indica la fine logica del programma
  78.  
  79.  
  80. '-----------------------AREA sottoprogrammi /SUBroutines
  81.  
  82. ' questa etichetta /label indica il punto di inizio
  83. ' del sottoprogramma (SUBroutine) LeggiFile scritto con vecchio stile GOSUB
  84. ' che usa una etichetta/label e un RETURN per riprendere da dove si era interotto
  85. ' nota1: un metodo ancora piu' antico e' il salto con GOTO
  86. '        che richiede una seconda etichetta per ritornare nel MAIN o programma principale
  87. ' nota2: un metodo migliore e' SUB nomeroutine....END SUB
  88. '        perche' permette la localizzazione delle variabili
  89. LeggiFile:
  90. 'se non trova lotto.dat segnala l'errore a video e termina il programma
  91. IF NOT _FILEEXISTS("lotto.dat") THEN PRINT "File non trovato": END
  92. '<--------------------
  93. ' questo metodo e' piu' lento
  94. ' apre il file lotto.dat per leggere in maniera sequenziale i dati
  95. 'OPEN "lotto.dat" FOR INPUT AS #1
  96. 'LINE INPUT #1, a  ' riempe la variabile a con una riga intera di valori
  97. '<--------------------
  98.  
  99. ' apre lotto.dat per leggerlo in maniera binaria
  100. OPEN "lotto.dat" FOR BINARY AS #1
  101. a = SPACE$(LOF(1)) ' riempe la variabile a di spazi fino alla grandezza in byte del file aperto
  102. GET #1, , a ' legge con una unica operazione il file e lo pone nella variabile a
  103. CLOSE #1 ' chiude il file appena letto
  104. ' indica il termine della SUBroutine LeggiFile
  105. ' e RITORNA alla riga di codice successiva al salto GOSUB
  106.  
  107. 'seconda SUBroutine /sottoprogramma
  108. MostraRuote:
  109. LOCATE 1, 1
  110. PRINT "BARI"
  111. LOCATE 3, 1
  112. PRINT "CAGLIARI"
  113. LOCATE 5, 1
  114. PRINT "FIRENZE"
  115. LOCATE 7, 1
  116. PRINT "GENOVA"
  117. LOCATE 9, 1
  118. PRINT "MILANO"
  119. LOCATE 11, 1
  120. PRINT "NAPOLI"
  121. LOCATE 13, 1
  122. PRINT "PALERMO"
  123. LOCATE 15, 1
  124. PRINT "ROMA"
  125. LOCATE 17, 1
  126. PRINT "TORINO"
  127. LOCATE 19, 1
  128. PRINT "VENEZIA"
  129. LOCATE 21, 1
  130. PRINT "NAZIONALE"
  131. LOCATE 1, 49
  132. PRINT "BARI"
  133. LOCATE 3, 49
  134. PRINT "CAGLIARI"
  135. LOCATE 5, 49
  136. PRINT "FIRENZE"
  137. LOCATE 7, 49
  138. PRINT "GENOVA"
  139. LOCATE 9, 49
  140. PRINT "MILANO"
  141. LOCATE 11, 49
  142. PRINT "NAPOLI"
  143. LOCATE 13, 49
  144. PRINT "PALERMO"
  145. LOCATE 15, 49
  146. PRINT "ROMA"
  147. LOCATE 17, 49
  148. PRINT "TORINO"
  149. LOCATE 19, 49
  150. PRINT "VENEZIA"
  151. LOCATE 21, 49
  152. PRINT "NAZIONALE"
  153.  
  154. LOCATE 23, 50
  155. PRINT "+ avanti  - indietro"
  156. LOCATE 23, 1
  157. PRINT CHR$(24); " avanti   "; CHR$(25); " indietro"
  158.  
  159. ' indica il termine della SUBroutine MostraRuote
  160. ' e RITORNA alla riga di codice successiva al salto GOSUB
  161.  
  162. 'terzo sottoprogramma o SUBroutine
  163. MostraEstratti:
  164. ' le prime 4 cifre sembrano essere il numero della estrazione
  165. LOCATE 1, 32
  166. PRINT "estraz.num "; MID$(a, b, 4)
  167. PRINT #2, "estraz.num "; MID$(a, b, 4)
  168. y = 12 ' prima posizione per il carattere da stampare
  169. FOR x = 1 TO 5 STEP 1 ' questo ciclo   FOR e' di 5 perche' ogni ruota ha 5 estrazioni
  170.     A1 = "" ' resetto a1 per il prossimo giro
  171.     FOR V = Bari TO Nazionale ' per tutte le ruote
  172.         COLOR 15, 0
  173.         'posiziona il cursore
  174.         LOCATE (V * 2) - 1, y
  175.         ' scrive il numero estratto
  176.         PRINT (MID$(a, (V - 1) * 10 + 5 + ((x - 1) * 2) + (b - 1), Cifra)); " ";
  177.         A1 = A1 + (MID$(a, (V - 1) * 10 + 5 + ((x - 1) * 2) + (b - 1), Cifra))
  178.     NEXT V
  179.     y = POS(0)
  180. ' indica il termine della SUBroutine MostraEstratti
  181. ' e RITORNA alla riga di codice successiva al salto GOSUB
  182. LOCATE 23, 32
  183. PRINT "estraz.num "; MID$(a, f, 4)
  184. PRINT #2, "estraz.num "; MID$(a, f, 4)
  185.  
  186. y = 60 ' prima posizione per il carattere da stampare
  187. FOR x = 1 TO 5 STEP 1 ' questo ciclo   FOR e' di 5 perche' ogni ruota ha 5 estrazioni
  188.     A1 = "" ' resetto a1 per il prossimo giro
  189.     FOR V = Bari TO Nazionale ' per tutte le ruote
  190.         COLOR 15, 0
  191.         'posiziona il cursore
  192.         LOCATE (V * 2) - 1, y
  193.         ' scrive il numero estratto
  194.         PRINT (MID$(a, (V - 1) * 10 + 5 + ((x - 1) * 2) + (f - 1), Cifra)); " ";
  195.         A1 = A1 + (MID$(a, (V - 1) * 10 + 5 + ((x - 1) * 2) + (f - 1), Cifra))
  196.     NEXT V
  197.     y = POS(0)
  198. ' indica il termine della SUBroutine MostraEstratti
  199. ' e RITORNA alla riga di codice successiva al salto GOSUB
  200.  
  201.  
  202. ' essendo la distanza30 orizzontale e la distanza30 verticale due condizioni
  203. ' particolari della distanza 30 diagonale allora bastera' calcolare questa ultima
  204. ' per calcolare anche le altre...questo trasforma la ricerca da 1 vs 1 con una
  205. ' specifica condizione (stessa riga o stessa colonna) in 1 vs 1 in cui il secondo
  206. ' appartiene al sottoinsieme ruota in esame (v) to nazionale e 1 to 5 estratti (x)
  207. ' quindi dopo aver mostrato le estrazioni va chiamata la subroutine per cercare
  208. ' un ambo con 2 numeri della terzina simmetrica con passo 30
  209. cerca30:
  210. FOR x1 = 1 TO 5 STEP 1
  211.     FOR v1 = Bari TO Venezia STEP 1
  212.         ' estraggo  il numero dall'elenco
  213.         num = VAL(MID$(a, (v1 - 1) * 10 + 5 + ((x1 - 1) * 2) + (b - 1), Cifra))
  214.         ' calcolo il numero precedente e successivo al numero estratto
  215.         IF num < 30 THEN prev = num - 30 + 90 ELSE prev = num - 30
  216.         IF num > 60 THEN succ = num + 30 - 90 ELSE succ = num + 30
  217.         FOR x2 = x1 TO 5
  218.             FOR v2 = v1 TO Nazionale 'per le restanti ruote
  219.                 num2 = VAL(MID$(a, (v2 - 1) * 10 + 5 + ((x2 - 1) * 2) + (b - 1), Cifra))
  220.                 IF num2 = prev OR num2 = succ THEN GOSUB AmboIsotopi
  221.             NEXT v2
  222.         NEXT x2
  223.     NEXT v1
  224. NEXT x1
  225.  
  226.  
  227. AmboIsotopi:
  228. 'cerca nell'intervallo della coppia trovata
  229.  
  230. IF x1 <> x2 THEN
  231.     ' i 2 numeri sono su 2 colonne diverse
  232.     IF v1 <> v2 THEN
  233.         ' i 2 numeri sono su due righe diverse
  234.         ' quindi i 2 numeri sono in diagonale
  235.         num3 = VAL(MID$(a, (v1 - 1) * 10 + 5 + ((x2 - 1) * 2) + (b - 1), Cifra))
  236.         num4 = VAL(MID$(a, (v2 - 1) * 10 + 5 + ((x1 - 1) * 2) + (b - 1), Cifra))
  237.         IF num3 < 30 THEN prev1 = num3 - 30 + 90 ELSE prev1 = num3 - 30
  238.         IF num3 > 60 THEN succ1 = num3 + 30 - 90 ELSE succ1 = num3 + 30
  239.         'se hanno distanza 30 abbiamo trovato un   Ambo Isotopo
  240.         IF num4 = prev1 OR num4 = succ1 THEN GOSUB AmboOk
  241.     ELSE
  242.         ' v1 = v2  i 2 numeri sono sulla stessa riga
  243.         FOR v3 = v1 + 1 TO v2 STEP 1
  244.             num3 = VAL(MID$(a, (v3 - 1) * 10 + 5 + ((x1 - 1) * 2) + (b - 1), Cifra))
  245.             num4 = VAL(MID$(a, (v3 - 1) * 10 + 5 + ((x2 - 1) * 2) + (b - 1), Cifra))
  246.             IF num3 < 30 THEN prev1 = num3 - 30 + 90 ELSE prev1 = num3 - 30
  247.             IF num3 > 60 THEN succ1 = num3 + 30 - 90 ELSE succ1 = num3 + 30
  248.             'se hanno distanza 30 abbiamo trovato un   Ambo Isotopo
  249.             IF num4 = prev1 OR num4 = succ1 THEN GOSUB AmboOk
  250.         NEXT v3
  251.         v3 = 0
  252.     END IF
  253.     ' x1 = x2    i 2 numeri sono sulla stessa colonna
  254.     IF v1 <> v2 THEN
  255.         ' i 2 numeri sono su diverse righe
  256.         FOR x3 = x1 + 1 TO x2 STEP 1
  257.             num3 = VAL(MID$(a, (v1 - 1) * 10 + 5 + ((x3 - 1) * 2) + (b - 1), Cifra))
  258.             num4 = VAL(MID$(a, (v2 - 1) * 10 + 5 + ((x3 - 1) * 2) + (b - 1), Cifra))
  259.             IF num3 < 30 THEN prev1 = num3 - 30 + 90 ELSE prev1 = num3 - 30
  260.             IF num3 > 60 THEN succ1 = num3 + 30 - 90 ELSE succ1 = num3 + 30
  261.             'se hanno distanza 30 abbiamo trovato un   Ambo Isotopo
  262.             IF num4 = prev1 OR num4 = succ1 THEN GOSUB AmboOk
  263.         NEXT x3
  264.         x3 = 0
  265.     ELSE
  266.         ' i 2 numeri sono sulla stessa riga
  267.         ' v1 = v2
  268.         ' e' il caso impossibile perche' i due numeri coincidono con uno solo
  269.     END IF
  270.  
  271.  
  272. AmboOk:
  273. ' evidenzia sulla tabella estrattiva di sinistra i numeri trovati e
  274. ' scrive al centro i numeri mancanti della terzina simmetrica
  275. IF riga < 4 THEN riga = 4 ELSE riga = riga + 2
  276. k = 11
  277. 'posiziona il cursore
  278. LOCATE (v1 * 2) - 1, k + (x1 * 3) - 2
  279. ' scrive il numero estratto
  280. PRINT (MID$(a, (v1 - 1) * 10 + 5 + ((x1 - 1) * 2) + (b - 1), Cifra));
  281. 'posiziona il cursore
  282. LOCATE (v2 * 2) - 1, k + (x2 * 3) - 2
  283. ' scrive il numero estratto
  284. PRINT (MID$(a, (v2 - 1) * 10 + 5 + ((x2 - 1) * 2) + (b - 1), Cifra));
  285. IF x1 <> x2 THEN
  286.     IF v1 <> v2 THEN
  287.         'posiziona il cursore
  288.         LOCATE (v1 * 2) - 1, (x2 * 3) + k - 2
  289.         ' scrive il numero estratto
  290.         PRINT (MID$(a, (v1 - 1) * 10 + 5 + ((x2 - 1) * 2) + (b - 1), Cifra));
  291.  
  292.         'posiziona il cursore
  293.         LOCATE (v2 * 2) - 1, (x1 * 3) - 2 + k
  294.         ' scrive il numero estratto
  295.         PRINT (MID$(a, (v2 - 1) * 10 + 5 + ((x1 - 1) * 2) + (b - 1), Cifra));
  296.     ELSE
  297.         'v1 = v2
  298.         'posiziona il cursore
  299.         LOCATE (v3 * 2) - 1, (x1 * 3) - 2 + k
  300.         ' scrive il numero estratto
  301.         PRINT (MID$(a, (v3 - 1) * 10 + 5 + ((x1 - 1) * 2) + (b - 1), Cifra));
  302.  
  303.         'posiziona il cursore
  304.         LOCATE (v3 * 2) - 1, (x2 * 3) - 2 + k
  305.         ' scrive il numero estratto
  306.         PRINT (MID$(a, (v3 - 1) * 10 + 5 + ((x2 - 1) * 2) + (b - 1), Cifra));
  307.     END IF
  308.     ' x1 = x2
  309.  
  310.     IF v1 <> v2 THEN
  311.         'posiziona il cursore
  312.         LOCATE (v3 * 2) - 1, ((x1 - 1) * 3) - 2 + k
  313.         ' scrive il numero estratto
  314.         PRINT (MID$(a, (v1 - 1) * 10 + 5 + ((x3 - 1) * 2) + (b - 1), Cifra));
  315.  
  316.         'posiziona il cursore
  317.         LOCATE (v3 * 2) - 1, ((x2 - 1) * 3) - 2 + k
  318.         ' scrive il numero estratto
  319.         PRINT (MID$(a, (v2 - 1) * 10 + 5 + ((x3 - 1) * 2) + (b - 1), Cifra));
  320.     ELSE
  321.         ' v1 = v2 e' il caso impossibile
  322.     END IF
  323. LOCATE riga, 35:
  324. IF num2 = prev THEN PRINT succ; ELSE PRINT prev;
  325. PRINT "--";
  326. IF num4 = prev1 THEN PRINT succ1; ELSE PRINT prev1;
  327.  
  328. COLOR 15, 0
  329.  
  330.  
che come hai osservato ha un'organizzazione della Cabala.
Per completare il programma sulle specifica di Kiara87 è necessario incollare la funzione della data fatta da Bplus.

« Last Edit: August 06, 2020, 07:54:17 pm by TempodiBasic »
Programming isn't difficult, only it's  consuming time and coffee

Offline Kiara87

  • Forum Regular
  • Posts: 164
    • View Profile
Hi guys and gals
I have found some time to spend to programming so I go deeper in the request of Kiara87.
The ideas about a Lotto program are many and they are not so immediately or clear to understand...
here the Arithmology sum
  [ You are not allowed to view this attachment ]  

that as you have observed it has a Cabala's fashion.

here the code that solve the issue of kiara87 about a program to search and to show the absent number of the Symmetric Triple following the AMBO ISOTOPIC . As you can see it must be joined to the date function made by Bplus to get all the specific solved.


------------------------------------ ITALIAN VERSIONE
Ciao ragazzi e ragazze
Ho trovato del tempo da dedicare alla programmazione quindi vado più a fondo nella richiesta di Kiara87.
Le idee su un programma Lotto sono tante e non sono così immediate o chiare da capire ...
qui la somma di aritmologia
   [ You are not allowed to view this attachment ]
Code: QB64: [Select]
  1. ' Programma lotto di kiara87
  2. ' il programma legge i dati (numeri estratti da un file.dat)
  3. ' e permette di vedere  le estrazioni a video
  4. ' i numeri con distanza 30 sono evidenziati con colore rosso
  5. ' questi numeri vengono memorizzati e stampati
  6.  
  7. ' Nota 1: sono d'accordo con Bplus e' molto piu'
  8. ' rapido lavorare con dati in RAM che con dati su Disco HDD/SSD/USB/CD/DVD
  9.  
  10. 'nota 2: si e' scoperto che la distanza 30 e' aritmologica ossia
  11. ' in un sistema ciclico 1-90 per cui se si va oltre il limite si ritorna nel range 1-90
  12. ' invece di pensare i numeri su di una linea retta bisogna pensarli su una
  13. ' linea a cerchio per cui sottrarre o aggiungere equivale a spostarsi indietro
  14. ' o in avanti di un numero specificato di posizioni
  15.  
  16. 'nota 3: lo scopo della ricerca delle coppie di numeri distanti 30 unita'
  17. ' e' quello di individuare la terzina simmetrica con passo 30 che e' interessata
  18. ' (ossia che con 2 numeri forma un ambo) per cercare gli AMBI ISOTOPI
  19. ' (ossia due coppie di numeri che nella griglia delle estrazioni mostrano
  20. ' la stessa posizione formando un quadrilatero)
  21.  
  22. 'nota 4: la coppia di numeri di una terzina simmetrica puo' essere
  23. ' in orizzontale  ( i numeri sono nella stessa ruota di estrazione)
  24. ' in verticale ( i numeri sono nella ' stessa posizione di estrazione tipo 1 estratto,
  25. ' 2 estratto...5 estratto)
  26. ' in diagonale (i numeri appartengono a ruota estrattiva e colonna estrattiva diverse)
  27. '
  28.  
  29. ' valori COSTANTI  generali Vero e Falso
  30. CONST True = -1, False = NOT True
  31. ' le 11 ruote del lotto
  32. CONST Bari = 1, Cagliari = 2, Firenze = 3, Genova = 4, Milano = 5
  33. CONST Napoli = 6, Palermo = 7, Roma = 8, Torino = 9, Venezia = 10, Nazionale = 11
  34. CONST Cifra = 2 ' ogni numero estratto e' una cifra di due caratteri (01-90)
  35.  
  36. DIM a AS STRING ' una stringa per leggere i dati dal file
  37.  
  38. ' salta al sottoprogramma LeggiFile delimitato
  39. ' dalla Label LeggiFIle e dal RETURN
  40. GOSUB LeggiFile
  41.  
  42. ' verifica che tutto il file sia letto
  43. 'FOR b = 1 TO LEN(a) - 116 STEP 116
  44. '    PRINT MID$(a, b, 116)
  45. '    '    PRINT INSTR(b, a, CHR$(13))
  46. '    _DELAY .1
  47. 'NEXT b
  48.  
  49.  
  50.  
  51. ' il ciclo DO...LOOP UNTIL condizione e' un modo piu' moderno
  52. ' rispetto a Etichetta: .... IF condizione GOTO Etichetta
  53. b = 1 ' flag che conta la posizione di lettura nel file  per il riquadro sinistro
  54. f = 1 ' flag che conta la posizione di lettura nel file  per il riquadro destro
  55. z$ = " " ' flag per l'output a schermo del programma
  56. OPEN "distanza30.dat" FOR APPEND AS #2 ' apertura del file dei risultati
  57.     IF z$ <> "" THEN ' se non c'e' input non viene eseguito
  58.         CLS ' questo risolve un glitch di output sullo schermo
  59.         ' in alternativa alla riga sopra CLS nel sottoblocco
  60.         ' MostraEstratti va stampata la stringa estratto e
  61.         ' non il suo valore corrispondente ottenuto con VAL
  62.         GOSUB MostraRuote ' scrive il nome delle ruote del lotto
  63.         GOSUB MostraEstratti ' scrive le estrazioni
  64.         GOSUB cerca30 ' evidenzia gli ambi isotopi nella estrazione di sinistra
  65.         ' e se la terzina simmetrica e' incompleta  segnala il numero mancante
  66.     END IF
  67.     ' prende l'input dell'utente
  68.     z$ = UCASE$(INKEY$) ' Z$ mantiene il maiuscolo di Inkey$
  69.     IF z$ = CHR$(0) + CHR$(72) AND b < (LEN(a) - 116) THEN b = b + 116
  70.     IF z$ = CHR$(0) + CHR$(80) AND b > 116 THEN b = b - 116
  71.     IF z$ = "+" AND f < (LEN(a) - 116) THEN f = f + 116
  72.     IF z$ = "-" AND f > 116 THEN f = f - 116
  73.     IF z$ <> "" THEN riga = 0
  74. LOOP UNTIL z$ = "Q" ' esegue questo ciclo fino a che si preme q per quit
  75. CLOSE #2 ' chiude il file che memorizza i distanti 30 per ogni estrazione esaminata a video
  76.  
  77. END ' indica la fine logica del programma
  78.  
  79.  
  80. '-----------------------AREA sottoprogrammi /SUBroutines
  81.  
  82. ' questa etichetta /label indica il punto di inizio
  83. ' del sottoprogramma (SUBroutine) LeggiFile scritto con vecchio stile GOSUB
  84. ' che usa una etichetta/label e un RETURN per riprendere da dove si era interotto
  85. ' nota1: un metodo ancora piu' antico e' il salto con GOTO
  86. '        che richiede una seconda etichetta per ritornare nel MAIN o programma principale
  87. ' nota2: un metodo migliore e' SUB nomeroutine....END SUB
  88. '        perche' permette la localizzazione delle variabili
  89. LeggiFile:
  90. 'se non trova lotto.dat segnala l'errore a video e termina il programma
  91. IF NOT _FILEEXISTS("lotto.dat") THEN PRINT "File non trovato": END
  92. '<--------------------
  93. ' questo metodo e' piu' lento
  94. ' apre il file lotto.dat per leggere in maniera sequenziale i dati
  95. 'OPEN "lotto.dat" FOR INPUT AS #1
  96. 'LINE INPUT #1, a  ' riempe la variabile a con una riga intera di valori
  97. '<--------------------
  98.  
  99. ' apre lotto.dat per leggerlo in maniera binaria
  100. OPEN "lotto.dat" FOR BINARY AS #1
  101. a = SPACE$(LOF(1)) ' riempe la variabile a di spazi fino alla grandezza in byte del file aperto
  102. GET #1, , a ' legge con una unica operazione il file e lo pone nella variabile a
  103. CLOSE #1 ' chiude il file appena letto
  104. ' indica il termine della SUBroutine LeggiFile
  105. ' e RITORNA alla riga di codice successiva al salto GOSUB
  106.  
  107. 'seconda SUBroutine /sottoprogramma
  108. MostraRuote:
  109. LOCATE 1, 1
  110. PRINT "BARI"
  111. LOCATE 3, 1
  112. PRINT "CAGLIARI"
  113. LOCATE 5, 1
  114. PRINT "FIRENZE"
  115. LOCATE 7, 1
  116. PRINT "GENOVA"
  117. LOCATE 9, 1
  118. PRINT "MILANO"
  119. LOCATE 11, 1
  120. PRINT "NAPOLI"
  121. LOCATE 13, 1
  122. PRINT "PALERMO"
  123. LOCATE 15, 1
  124. PRINT "ROMA"
  125. LOCATE 17, 1
  126. PRINT "TORINO"
  127. LOCATE 19, 1
  128. PRINT "VENEZIA"
  129. LOCATE 21, 1
  130. PRINT "NAZIONALE"
  131. LOCATE 1, 49
  132. PRINT "BARI"
  133. LOCATE 3, 49
  134. PRINT "CAGLIARI"
  135. LOCATE 5, 49
  136. PRINT "FIRENZE"
  137. LOCATE 7, 49
  138. PRINT "GENOVA"
  139. LOCATE 9, 49
  140. PRINT "MILANO"
  141. LOCATE 11, 49
  142. PRINT "NAPOLI"
  143. LOCATE 13, 49
  144. PRINT "PALERMO"
  145. LOCATE 15, 49
  146. PRINT "ROMA"
  147. LOCATE 17, 49
  148. PRINT "TORINO"
  149. LOCATE 19, 49
  150. PRINT "VENEZIA"
  151. LOCATE 21, 49
  152. PRINT "NAZIONALE"
  153.  
  154. LOCATE 23, 50
  155. PRINT "+ avanti  - indietro"
  156. LOCATE 23, 1
  157. PRINT CHR$(24); " avanti   "; CHR$(25); " indietro"
  158.  
  159. ' indica il termine della SUBroutine MostraRuote
  160. ' e RITORNA alla riga di codice successiva al salto GOSUB
  161.  
  162. 'terzo sottoprogramma o SUBroutine
  163. MostraEstratti:
  164. ' le prime 4 cifre sembrano essere il numero della estrazione
  165. LOCATE 1, 32
  166. PRINT "estraz.num "; MID$(a, b, 4)
  167. PRINT #2, "estraz.num "; MID$(a, b, 4)
  168. y = 12 ' prima posizione per il carattere da stampare
  169. FOR x = 1 TO 5 STEP 1 ' questo ciclo   FOR e' di 5 perche' ogni ruota ha 5 estrazioni
  170.     A1 = "" ' resetto a1 per il prossimo giro
  171.     FOR V = Bari TO Nazionale ' per tutte le ruote
  172.         COLOR 15, 0
  173.         'posiziona il cursore
  174.         LOCATE (V * 2) - 1, y
  175.         ' scrive il numero estratto
  176.         PRINT (MID$(a, (V - 1) * 10 + 5 + ((x - 1) * 2) + (b - 1), Cifra)); " ";
  177.         A1 = A1 + (MID$(a, (V - 1) * 10 + 5 + ((x - 1) * 2) + (b - 1), Cifra))
  178.     NEXT V
  179.     y = POS(0)
  180. ' indica il termine della SUBroutine MostraEstratti
  181. ' e RITORNA alla riga di codice successiva al salto GOSUB
  182. LOCATE 23, 32
  183. PRINT "estraz.num "; MID$(a, f, 4)
  184. PRINT #2, "estraz.num "; MID$(a, f, 4)
  185.  
  186. y = 60 ' prima posizione per il carattere da stampare
  187. FOR x = 1 TO 5 STEP 1 ' questo ciclo   FOR e' di 5 perche' ogni ruota ha 5 estrazioni
  188.     A1 = "" ' resetto a1 per il prossimo giro
  189.     FOR V = Bari TO Nazionale ' per tutte le ruote
  190.         COLOR 15, 0
  191.         'posiziona il cursore
  192.         LOCATE (V * 2) - 1, y
  193.         ' scrive il numero estratto
  194.         PRINT (MID$(a, (V - 1) * 10 + 5 + ((x - 1) * 2) + (f - 1), Cifra)); " ";
  195.         A1 = A1 + (MID$(a, (V - 1) * 10 + 5 + ((x - 1) * 2) + (f - 1), Cifra))
  196.     NEXT V
  197.     y = POS(0)
  198. ' indica il termine della SUBroutine MostraEstratti
  199. ' e RITORNA alla riga di codice successiva al salto GOSUB
  200.  
  201.  
  202. ' essendo la distanza30 orizzontale e la distanza30 verticale due condizioni
  203. ' particolari della distanza 30 diagonale allora bastera' calcolare questa ultima
  204. ' per calcolare anche le altre...questo trasforma la ricerca da 1 vs 1 con una
  205. ' specifica condizione (stessa riga o stessa colonna) in 1 vs 1 in cui il secondo
  206. ' appartiene al sottoinsieme ruota in esame (v) to nazionale e 1 to 5 estratti (x)
  207. ' quindi dopo aver mostrato le estrazioni va chiamata la subroutine per cercare
  208. ' un ambo con 2 numeri della terzina simmetrica con passo 30
  209. cerca30:
  210. FOR x1 = 1 TO 5 STEP 1
  211.     FOR v1 = Bari TO Venezia STEP 1
  212.         ' estraggo  il numero dall'elenco
  213.         num = VAL(MID$(a, (v1 - 1) * 10 + 5 + ((x1 - 1) * 2) + (b - 1), Cifra))
  214.         ' calcolo il numero precedente e successivo al numero estratto
  215.         IF num < 30 THEN prev = num - 30 + 90 ELSE prev = num - 30
  216.         IF num > 60 THEN succ = num + 30 - 90 ELSE succ = num + 30
  217.         FOR x2 = x1 TO 5
  218.             FOR v2 = v1 TO Nazionale 'per le restanti ruote
  219.                 num2 = VAL(MID$(a, (v2 - 1) * 10 + 5 + ((x2 - 1) * 2) + (b - 1), Cifra))
  220.                 IF num2 = prev OR num2 = succ THEN GOSUB AmboIsotopi
  221.             NEXT v2
  222.         NEXT x2
  223.     NEXT v1
  224. NEXT x1
  225.  
  226.  
  227. AmboIsotopi:
  228. 'cerca nell'intervallo della coppia trovata
  229.  
  230. IF x1 <> x2 THEN
  231.     ' i 2 numeri sono su 2 colonne diverse
  232.     IF v1 <> v2 THEN
  233.         ' i 2 numeri sono su due righe diverse
  234.         ' quindi i 2 numeri sono in diagonale
  235.         num3 = VAL(MID$(a, (v1 - 1) * 10 + 5 + ((x2 - 1) * 2) + (b - 1), Cifra))
  236.         num4 = VAL(MID$(a, (v2 - 1) * 10 + 5 + ((x1 - 1) * 2) + (b - 1), Cifra))
  237.         IF num3 < 30 THEN prev1 = num3 - 30 + 90 ELSE prev1 = num3 - 30
  238.         IF num3 > 60 THEN succ1 = num3 + 30 - 90 ELSE succ1 = num3 + 30
  239.         'se hanno distanza 30 abbiamo trovato un   Ambo Isotopo
  240.         IF num4 = prev1 OR num4 = succ1 THEN GOSUB AmboOk
  241.     ELSE
  242.         ' v1 = v2  i 2 numeri sono sulla stessa riga
  243.         FOR v3 = v1 + 1 TO v2 STEP 1
  244.             num3 = VAL(MID$(a, (v3 - 1) * 10 + 5 + ((x1 - 1) * 2) + (b - 1), Cifra))
  245.             num4 = VAL(MID$(a, (v3 - 1) * 10 + 5 + ((x2 - 1) * 2) + (b - 1), Cifra))
  246.             IF num3 < 30 THEN prev1 = num3 - 30 + 90 ELSE prev1 = num3 - 30
  247.             IF num3 > 60 THEN succ1 = num3 + 30 - 90 ELSE succ1 = num3 + 30
  248.             'se hanno distanza 30 abbiamo trovato un   Ambo Isotopo
  249.             IF num4 = prev1 OR num4 = succ1 THEN GOSUB AmboOk
  250.         NEXT v3
  251.         v3 = 0
  252.     END IF
  253.     ' x1 = x2    i 2 numeri sono sulla stessa colonna
  254.     IF v1 <> v2 THEN
  255.         ' i 2 numeri sono su diverse righe
  256.         FOR x3 = x1 + 1 TO x2 STEP 1
  257.             num3 = VAL(MID$(a, (v1 - 1) * 10 + 5 + ((x3 - 1) * 2) + (b - 1), Cifra))
  258.             num4 = VAL(MID$(a, (v2 - 1) * 10 + 5 + ((x3 - 1) * 2) + (b - 1), Cifra))
  259.             IF num3 < 30 THEN prev1 = num3 - 30 + 90 ELSE prev1 = num3 - 30
  260.             IF num3 > 60 THEN succ1 = num3 + 30 - 90 ELSE succ1 = num3 + 30
  261.             'se hanno distanza 30 abbiamo trovato un   Ambo Isotopo
  262.             IF num4 = prev1 OR num4 = succ1 THEN GOSUB AmboOk
  263.         NEXT x3
  264.         x3 = 0
  265.     ELSE
  266.         ' i 2 numeri sono sulla stessa riga
  267.         ' v1 = v2
  268.         ' e' il caso impossibile perche' i due numeri coincidono con uno solo
  269.     END IF
  270.  
  271.  
  272. AmboOk:
  273. ' evidenzia sulla tabella estrattiva di sinistra i numeri trovati e
  274. ' scrive al centro i numeri mancanti della terzina simmetrica
  275. IF riga < 4 THEN riga = 4 ELSE riga = riga + 2
  276. k = 11
  277. 'posiziona il cursore
  278. LOCATE (v1 * 2) - 1, k + (x1 * 3) - 2
  279. ' scrive il numero estratto
  280. PRINT (MID$(a, (v1 - 1) * 10 + 5 + ((x1 - 1) * 2) + (b - 1), Cifra));
  281. 'posiziona il cursore
  282. LOCATE (v2 * 2) - 1, k + (x2 * 3) - 2
  283. ' scrive il numero estratto
  284. PRINT (MID$(a, (v2 - 1) * 10 + 5 + ((x2 - 1) * 2) + (b - 1), Cifra));
  285. IF x1 <> x2 THEN
  286.     IF v1 <> v2 THEN
  287.         'posiziona il cursore
  288.         LOCATE (v1 * 2) - 1, (x2 * 3) + k - 2
  289.         ' scrive il numero estratto
  290.         PRINT (MID$(a, (v1 - 1) * 10 + 5 + ((x2 - 1) * 2) + (b - 1), Cifra));
  291.  
  292.         'posiziona il cursore
  293.         LOCATE (v2 * 2) - 1, (x1 * 3) - 2 + k
  294.         ' scrive il numero estratto
  295.         PRINT (MID$(a, (v2 - 1) * 10 + 5 + ((x1 - 1) * 2) + (b - 1), Cifra));
  296.     ELSE
  297.         'v1 = v2
  298.         'posiziona il cursore
  299.         LOCATE (v3 * 2) - 1, (x1 * 3) - 2 + k
  300.         ' scrive il numero estratto
  301.         PRINT (MID$(a, (v3 - 1) * 10 + 5 + ((x1 - 1) * 2) + (b - 1), Cifra));
  302.  
  303.         'posiziona il cursore
  304.         LOCATE (v3 * 2) - 1, (x2 * 3) - 2 + k
  305.         ' scrive il numero estratto
  306.         PRINT (MID$(a, (v3 - 1) * 10 + 5 + ((x2 - 1) * 2) + (b - 1), Cifra));
  307.     END IF
  308.     ' x1 = x2
  309.  
  310.     IF v1 <> v2 THEN
  311.         'posiziona il cursore
  312.         LOCATE (v3 * 2) - 1, ((x1 - 1) * 3) - 2 + k
  313.         ' scrive il numero estratto
  314.         PRINT (MID$(a, (v1 - 1) * 10 + 5 + ((x3 - 1) * 2) + (b - 1), Cifra));
  315.  
  316.         'posiziona il cursore
  317.         LOCATE (v3 * 2) - 1, ((x2 - 1) * 3) - 2 + k
  318.         ' scrive il numero estratto
  319.         PRINT (MID$(a, (v2 - 1) * 10 + 5 + ((x3 - 1) * 2) + (b - 1), Cifra));
  320.     ELSE
  321.         ' v1 = v2 e' il caso impossibile
  322.     END IF
  323. LOCATE riga, 35:
  324. IF num2 = prev THEN PRINT succ; ELSE PRINT prev;
  325. PRINT "--";
  326. IF num4 = prev1 THEN PRINT succ1; ELSE PRINT prev1;
  327.  
  328. COLOR 15, 0
  329.  
  330.  
che come hai osservato ha un'organizzazione della Cabala.
Per completare il programma sulle specifica di Kiara87 è necessario incollare la funzione della data fatta da Bplus.

grazie @TempodiBasic  è questo quello che intendevo di fare
il modo e questo molto difficile ancora per me solamente vedere il codice
ho provato per pochi secondi il programma
è  cerca i numeri come chiedevo nel post
adesso però
devo mettere la data sopra alle estrazioni è  se sposto il cursore per mettere le estrazioni partendo
dalla linea 2 e mettere la data delle estrazioni nella linea 1  sarà una vera lotta perchè non vanno mai nel posto giusto
forse bplus per questo ha usato una istruzione di SMcNeill che  mi sembra questa WHILE _MOUSEINPUT: WEND
    mb = _MOUSEBUTTON(1): mx = _MOUSEX: my = _MOUSEY

poi devo inserire nel centro dove stampa la previsione
insieme ai due numeri che già compaiono i numeri
devo far stampare anche le ruote dove si e verificata la previsione
e poi cercare i numeri nella estrazione di destra

faccio un riepilogo
anche per farmi una idea di come devo finirlo
1)spostare le due estrazioni di una riga più sotto per inserire la data del estrazione nella prima riga
2)stampami nel mezzo delle due estrazioni dove hai stampato la previsione anche le ruote dove si è verificata la condizione
3) cercami i numeri della condizione nella estrazione di destra e colorali di altro colore
se avessi solo un'ora per salvare il mondo, passerei 55 minuti per definire bene il problema e 5 a trovare la soluzione