Novità

combinazioni quartine in decina naturale

  • Creatore Discussione Creatore Discussione genios
  • Data di inizio Data di inizio

genios

Advanced Member >PLATINUM PLUS<
E possibile fare uno script in cui una decina naturale su ruota viene scomposta in tutte le 30 combinazioni di quartine possibili e che per ciascuna quartina mi stampi in uscita il ritardo max raggiunto e il ritardo attuale per la sorte di ambo .


Ciao Eugenio
 
E possibile fare uno script in cui una decina naturale su ruota viene scomposta in tutte le 30 combinazioni di quartine possibili e che per ciascuna quartina mi stampi in uscita il ritardo max raggiunto e il ritardo attuale per la sorte di ambo .


Ciao Eugenio

Ciao Eugenio.

Si è possibile.

Ma devi imparare a farti da solo queste cose.

Ti assicuro, che avrai, anche la soddisfazione di esserci riuscito... Con il "fai da te".

Ti consiglio di guardare a "sviluppointegrale" negli esempi dovrebbe esserci qualcosa di già fatto.

:)
 
Ciao Eugenio.

Si è possibile.

Ma devi imparare a farti da solo queste cose.

Ti assicuro, che avrai, anche la soddisfazione di esserci riuscito... Con il "fai da te".

Ti consiglio di guardare a "sviluppointegrale" negli esempi dovrebbe esserci qualcosa di già fatto.

:)

Joe91 ma dove si trova " sviluppo integrale ? "
 
Joe91 potresti spiegarmi cosa fanno i 2 cicli for nidificati ?


For k = 1 To UBound(Colonne)
sColonna = ""
For j = 1 To classe
sColonna = sColonna & Format2(Colonne(k,j)) & " "
Next
Call Scrivi(sColonna)
Next
 
Joe91 potresti spiegarmi cosa fanno i 2 cicli for nidificati ?


For k = 1 To UBound(Colonne)
sColonna = ""
For j = 1 To classe
sColonna = sColonna & Format2(Colonne(k,j)) & " "
Next
Call Scrivi(sColonna)
Next

La prima parte del programma che devi capire è questa:
Codice:
Sub Main
Dim numeri(10)
	For k = 1 To 10
		numeri(k) = k
	Next
	Scrivi StringaNumeri (numeri)
End Sub

Quindi eseguendo questa avrai "caricato" e poi scritto ... 10 numeri in un vettore (da 10 posti).

Ora si tratterebbe di SCOMPORRE il "VETTORE-DECINA" in QUARTINE.

Per fare questo occorrono tanti indici quanti sono gli indirizzi necessari.

Ovvero :

2 variabili se si dovesse indirizzare un Ambo

3 se fosse un Terno .... dunque

4 perchè si tratta di "Quartine".

Cioè DEVO poter indirizzare/disporre/prelevare "4 Posizioni" (del Vettore-Decina) contemporaneamente.

Ognuno di questi, indirizzi, è l'indice di un ciclo "For-Next" ...

For .... "A" / "B" / "C" / "D" .... Next / Next / Next / Next.

Per i quali ... il limite (numerico) massimo per essi è la lunghezza della decina.

Cioè "10" che deve essere raggiunto solo dal quarto indice.

Come vedi per essi ho usato (ed uso) le prime 4 lettere dell' Alfabeto e ...

una volta ottimizzato, pronto per essere incollato sotto il precedente ed eseguito,

i 4 cicli nidificati ... e la linea per formare lo sviluppo sono:

Codice:
For A = 1 To 7
 For B = A + 1 To 8 
  For C = B + 1 To 9 
   For D = C + 1 To 10 

     Scrivi A & "." & B & "." & C & "." & D

   Next
  Next
 Next
Next


Quindi, eseguendo il tutto ....

vedi elencati tutti gli "indici" (attento sono ANCORA gli indici) per puntare ad ogni posizione della lunghetta.

Fin qui ci sei ?

:)
 
Ultima modifica:
Quindi la riga scrivi StringaNumeri scrive i numeri da 1 a 10 di cui vogliamo le combinazioni a 4 a 4 nel Vettore numeri(10) cioe' numeri (1)=1 numeri (2)=2 e cosi via . poi gli altri cilci for a b c d sviluppono le combinazioni .
 
Ok bene!

scrivi StringaNumeri scrive i numeri ...

... i cilci for a b c d sviluppono le combinazioni .

Abbiamo detto e dobbiamo ricordare che il lungo elenco è di "INDIRIZZI" dove:

1=Primo / 2=Secondo / 3=Terzo / 4=Quarto

... fino a ...

7=Settimo / 8=Ottavo / 9=Nono / 10=Decimo.

MA ... abbiamo sviluppato TUTTO. INTEGRALMENTE. Da:

1.2.3.4
1.2.3.5

... fino a ...

6.8.9.10
7.8.9.10

Elencando tutte le possibili QUARTINE di indirizzi.

....

Ecco dunque cosa significa "sviluppointegrale".

che può essere svolto dalla'istruzione dedicata ... o ...

evidentemente col "fai da te".

:) ... segue
 
Ora ...

avrai notato che la prima parte dello script ... genera una decina ...

intesa come la prima decina, ovvero i numeri da 1 a 10.

A noi servono le decine naturali in genere. TUTTE.

Quindi di tutti i 90 numeri, che ci sono, dobbiamo mettere nel Vettore/Array ...

solo i 10 che di volta in volta, ci interessano.

Diciamo: quelli che appertengono alla DecinaNaturale ... "DN" che scegliamo noi.

Quindi SE un numero appartiene alla DN (supponiamo = 5) lo scegliamo ... altrimenti NO.

Codice:
Option Explicit
Sub Main
	Dim DN,K 
	DN = 5
	For K = 1 To 90 
		If DecinaNaturale(K) = DN Then
			Scrivi K
		End If
	Next
End Sub

:) E così facendo ... possiamo "selezionare" i numeri della decina che desideriamo.
 
Ultima modifica:
Dobbiamo dunque

avvicinarci allo script dell'esempio inserendo i vari numeri trovati in un Array.

Quindi aggiungiamo DIMENSIONANDO "un contenitore" per i nostri Numeri da 10 posti (sono decine!) con:

Dim Numeri (10) ed una variabile P per stabilirne e conteggiarne la posizione e/o il "posto" da loro occupato che dir si voglia.

Quindi il primo che troveremo dovrà andare nel primo posto.

Pertanto scriviamo: P = 1

Codice:
Option Explicit
Sub Main
Dim DN,K,P,Numeri(10) 
	DN = 5 
	P = 1
	For K = 1 To 90
		If DecinaNaturale(K) = DN Then
			Numeri(P) = K
			P = P + 1
		End If
	Next
	Scrivi StringaNumeri(numeri)

End Sub

Nello script ... "rifatto" (in tutta la sua prima parte) rimane solo da sottolineare:

P=P+1

Significa: Dopo che ho assegnato il Numero (della decina) ... ad un Posto ...

il prossimo lo dovrò indirizzare al Posto SUCCESSIVO.

So che era "P=1" ...

... quello dopo ... sarà indirizzato ed indicizzato con il valore di: "P+1"

E' equivalente a dire che:

1+1=2

Ovvero che "il posto" che segue (con ordine) il primo, è il secondo.

:)
 
Ultima modifica:
spiegato il perchè delle scelte adottate,

Si possono dunque ricomporre le parti dello script nelle sue componenti principali.

Codice:
Option Explicit

Sub Main

Dim DN,K,P,Numeri(10) 
Dim A,B,C,D

DN = 5 
P = 1
For K = 1 To 90
	If DecinaNaturale(K) = DN Then
		Numeri(P) = K
		P = P + 1
	End If
Next

Scrivi StringaNumeri(Numeri)

For A = 1 To 7
	For B = A + 1 To 8 
		For C = B + 1 To 9 
			For D = C + 1 To 10 
				Scrivi A & "." & B & "." & C & "." & D
			Next
		Next
	Next
Next

End Sub

Esso è eseguibile e funziona, ma come s'era sottolineato al messaggio #8

le variabili di controllo dei 4 Cicli For ... sono solo INDIRIZZI.

Quindi solo INDIRETTAMENTE rappresentano i numeri reali della nostra decina.

Quindi "lo sviluppo" non è quello voluto.

E' (ancora) quello degli indici e non quello della decina.

Si dovràno sostituire gli "indirizzi" con i corripondenti persenti nella decina.

Nella linea che "Scrive" le nostre formazioni.

Dove si scriveva:

"A" diventa Numeri(A)
"B" diventa Numeri(B)
"C" diventa Numeri(C)
"D" diventa Numeri(D)

E ... come detto, si dimostra che A/B/C/D sono 4 indici per stabilire

da che posto preleveremo i 4 valori della DecinaNaturale precedentemente scelta.

:)
 
Ultima modifica:
Praticamente tutta la fase preparatoria è terminata.

Cioè abbiamo selezionato una DecinaNaturale e l'abbiamo sviluppata

e/o scomposta nelle quartine che da essa scaturiscono.

È evidente che per aderire alla richiesta si "deve" considerare ogni SINGOLA QUARTINA.

Una per volta.

Per fare questo dimensioniamo un vettore (dal contenuto temporaneo)

piu piccolo... naturalmente per 4 numeri, capace di accogliere, le quartine, una ad una.

Nello script a confronto, e per il debug di esso, sono evidenti le due possibilità si "visualizzazione".

Il che è come dire: Si vede tutto "doppio".

Ed in altre parole che ... il contenuto temporaneo del vettore TMP,

IN QUESTO PUNTO DEL PROGRAMMA E' (esattamente corrispondente al)LA QUARTINA CHE CI SERVE.

Codice:
Option Explicit
Sub Main
Dim DN,K,P
Dim A,B,C,D,TMP(4)
	DN = 5
	For K = 1 To 90
		If DecinaNaturale(K) = DN Then
			P = P + 1
			ReDim Preserve Numeri(P)
			Numeri(P) = K
		End If
	Next
	Scrivi StringaNumeri(Numeri)
	

For A = 1 To 7
	For B = A + 1 To 8 
		For C = B + 1 To 9 
			For D = C + 1 To 10 
				
				Scrivi Numeri(A) & "." & Numeri(B) & "." & Numeri(C) & "." & Numeri(D)
				TMP(1)=Numeri(A) : TMP(2)=Numeri(B) : TMP(3)=Numeri(C) : TMP(4)=Numeri(D)
				Scrivi StringaNumeri(TMP) 
				Scrivi
				
			Next
		Next
	Next
Next


End Sub
 
Ultima modifica:
Termino ...

(perchè è opportuno che chi di interesse sviluppi poi da sè ... il resto)

Fomando una Tabella di tutte le Quartine con tutti i Ritardi per Ambo nelle varie Ruote.

ritenendo così di aver introdotto ... "molto" su cui innestare e/o inserire, sviluppi ed altre ricerche.

Quindi vi fornisco per ora una piccola Sub dal nome "Titoli" che è da incollare sotto la "Sub Main" da cui è richiamata due volte.

Così si vede come funziona e come si fa funzionare .... cosa fa.

Codice:
Sub Main()
Titoli
Scrivi "  .. qui sara' la tabella ... "
Titoli
End Sub

Sub Titoli ()
	Dim NR
	Scrivi "| QUARTINA  |",1,0
	For NR = 1 To 10
		Scrivi Space(2) & FormatSpace(NomeRuota(NR),8) & "|",True,False
	Next
	Scrivi
End Sub
 
Ultima modifica:
Si tratta appunto di riempire la tabella.

La prima colonna ... contiene ad una ad una le quartine ...

In tutte le altre colonne le celle sono uguali.

Variano in funzione della ruota e della quartina. Lo vedremo poi.

Per riempire la prima colonna ...abbiamo gia detto che possiamo usare: Scrivi StringaNumeri(TMP).

Usiamo questa soluzione alternativa a scrivi Numeri(A)&"."&Numeri(B) ...

Vedremo presto il perchè di questa scelta

Dunque lo script che completa la prima colonna della tabella ... adattata ai titoli è:

Codice:
Option Explicit
Sub Main
	Dim DN,K,P
	Dim A,B,C,D,TMP(4)

	DN = 5
	
	For K = 1 To 90
		If DecinaNaturale(K) = DN Then
			P = P + 1
			ReDim Preserve Numeri(P)
			Numeri(P) = K
		End If
	Next
	Scrivi StringaNumeri(Numeri)
	
Titoli 
For A = 1 To 7
	For B = A + 1 To 8 
		For C = B + 1 To 9 
			For D = C + 1 To 10
			TMP(1) = Numeri(A) : TMP(2) = Numeri(B) : TMP(3) = Numeri(C) : TMP(4) = Numeri(D)
			Scrivi "|" & StringaNumeri(TMP) & "|",True,False
			Scrivi 
			Next
		Next
	Next
Next
Titoli

End Sub
Sub Titoli
	Dim NR
	Scrivi "| QUARTINA  |",1,0
	For NR = 1 To 10
		Scrivi Space(2) & FormatSpace(NomeRuota(NR),8) & "|",True,False
	Next
	Scrivi
End Sub

:)
 
Ultima modifica:
Eccoci al perchè ...

sostituendo ... la DecinaNaturale ... da 5 a "Zero" ... e rieseguendo lo script ...

Con "DN = 0" si nota che la presenza di numeretti (di un solo carattere)

alternata a numeri "10" che occupano 2 caratteri ... scompiglia la larghezza di codesta colonna.

Questo il problema ... e la ragione della scelta.

Scrivi StringaNumeri (di Spaziometria) accetta un parametro per la formattazione dei numeri.

Quindi aggiungendo e/o correggendo in:

Scrivi "|" & StringaNumeri(TMP,,True) & "|",True,False

Eseguendo lo script si nota che con il parametro "True" che abbiamo aggiunto

la larghezza della colonna "rimane apposto".

Ovvero a tutti i numeretti ... viene aggiunto lo zero necessario.

Il secondo parametro "True" significa che deve essere scritto in grassetto ...

Mentre l'ultimo parametro "False", che lo segue, è si traduce in: "senza andare -a capo-"

Questo perchè ... nella parte della linea (ancora da scrivere) si devono ancora inserire tutti i ritardi.

Quelli dell' Ambo in quartina, in tutte le ruote.

:)
 
Ultima modifica:
Grazie joe91 mi occorre un po' di tempo per assimilare . Studio le tue spiegazioni .

Ciao Eugenio
 
Per riempire il corpo della tabella ...

si devono calcolare TUTTI i ritardi.

L'istruzione preposta a questo è "SerieRitardo".

Ci vogliono naturalmente dei "parametri" che sono neccessari per far corrispondere i "valori" calcolati da SerieRitardo

al periodo / ai numeri / alle ruote e per il tipo di sorte ... di cui essi sono sintesi di conteggio.

Dimensioniamo le variabili per contenere i valori e gli array necessari.

Il periodo "Inizia" e "Finisce" con un determinato "numero" di Estrazioni.

Li batteziamo "Ini" & "Fin" e in essi memorizziamo i valori: Ini =1 : Fin = EstrazioneFin (normalmente l'ultima/più recente)

I numeri sono già contenuti nel vettore TMP (come sappiamo averlo deciso e visto scrivere nella prima colonna)

Mancherebbe ancora il vettore/array/contenitore per UNA singola Ruota (dirò a breve)

La sorte è 2 (dove intuitivamente: 1 = Estratto / 2 = Ambo / 3 = Terno ... ecc )

Dunque per scorrere e memorizzare le ruote DIMensioniamo "R" per scorrerle

e "Ru(1)" che è un Array ... per memorizzare il numero con cui si rappresenta ogni singola "R"uota.

Come abbiamo visto per la piccola routine per scrivere i "Titoli" anche qui

con un ciclo For-Next creiamo un numero, per le 10 ruote. Una ad una.

Codice:
For R = 1 To 10 
Ru(1) = R
  SR = SerieRitardo(Ini,Fin,TMP,Ru,2)
    Scrivi FormatSpace(SR,6,True) & Space(4),False,False
    Scrivi "|",True,False
Next

per ora vi è solo da aggiungere che ho formattato gli spazi affinche ogni cella sia riempita con 6+4 caratteri.

"10 ... caratteri" come era per "i titoli" delle colonne.

Dunque illustrata la tecnica per riempire tutta la tabella ...

Allego lo script ... al punto in cui è ... per poter sottolineare successivamente alcune cosette.

Codice:
Option Explicit
Sub Main
	Dim DN,K,P
	Dim A,B,C,D,TMP(4)
	
	Dim Ini,Fin,R,Ru(1),SR,GR
	
	Ini = 1 
	Fin = EstrazioneFin
	DN = 5
				
	For K = 1 To 90
		If DecinaNaturale(K) = DN Then
			P = P + 1
			ReDim Preserve Numeri(P)
			Numeri(P) = K
		End If
	Next
	Scrivi StringaNumeri(Numeri)
	
Titoli
For A = 1 To 7
	For B = A + 1 To 8
		For C = B + 1 To 9
			For D = C + 1 To 10
			TMP(1) = Numeri(A) : TMP(2) = Numeri(B) : TMP(3) = Numeri(C) : TMP(4) = Numeri(D)
			Scrivi "|" & StringaNumeri(TMP,,True) & "|",True,False
				For R = 1 To 10
				Ru(1) = R
					SR = SerieRitardo(Ini,Fin,TMP,Ru,2)
					If SR > 300 Then ColoreTesto 2 : GR = True
					Scrivi FormatSpace(SR,6,True) & Space(4),GR,False
					ColoreTesto 0 : GR = False
					Scrivi "|",True,False
				Next
			Scrivi
			Next
		Next
	Next
Next
Titoli

End Sub
Sub Titoli
	Dim NR
	Scrivi "| QUARTINA  |",1,0
	For NR = 1 To 10
		Scrivi Space(2) & FormatSpace(NomeRuota(NR),8) & "|",True,False
	Next
	Scrivi
End Sub

:) buon pomeriggio a tutte/i.
 
Ultima modifica:
Quale Differenza

avrete notato che ho memorizzato in SR ... il valore numerico CALCOLATO da Serieritardo.

Questo mi permette di poterlo confrontare con un valore di riferimento prima di scriverlo.

Nel caso ... con 300 ... potendo così decidere di evidenziare alcune "celle" della tabella.

Quindi i numeri contenuti di alcune celle sono scritti in colore "Rosso" ed in "Grassetto"

se il Ritardo di quella Quartina ed in quella Ruota è maggiore di 300.

La formattazione si attiva con: Coloretesto 2 : GR = True

Naturalmente per evitare che questa evidenziazione si reiteri in futuro, erroneamente,

essa DEVE essere disattivata subito dopo aver scritto il contenuto di ogni singola cella.

Si ottiene questo scrivendo:

Coloretesto 0 : GR = False.

Tutto ciò premesso ...

... occorreranno solo alcuni piccoli aggiustamenti per rendere più completo e migliore lo script.
 
Ultima modifica:
La versione definitiva dello script,

contiene appunto, alcune migliorie, aggiunte, e soluzioni che non dovrebbero

destare scompiglio tra chi ha seguito tutto lo sviluppo ed i commenti alla

formazione dell'intero algoritmo.

Codice:
Option Explicit
Sub Main
'Script -By Joe- per Eugenio. V.1.0. del 5/3/2015
'http://forum.lottoced.com/f12/combinazioni-quartine-decina-naturale-119060 

	Dim DN,K,P
	
	Dim A,B,C,D,TMP(4)
	
	Dim Ini,Fin,R,Ru(1),SR,GR
	
	Ini = 1 
	Fin = EstrazioneFin
	DN = CInt(InputBox("Quale Decina ?","DECINA NATURALE",5))
	
	Scrivi "DECINA NATURALE : " & DN &  " ",True,True 
	Scrivi
	Scrivi "RITARDI AMBO IN QUARTINA -By Joe-",True
	Scrivi 
	Scrivi "Aggiornato al " & DataEstrazione(Fin),True 			
	Scrivi 
	For K = 1 To 90
		If DecinaNaturale(K) = DN Then
			P = P + 1
			ReDim Preserve Numeri(P)
			Numeri(P) = K
		End If
	Next

Titoli
For A = 1 To 7
	For B = A + 1 To 8
		For C = B + 1 To 9
			For D = C + 1 To 10
			TMP(1) = Numeri(A) : TMP(2) = Numeri(B) : TMP(3) = Numeri(C) : TMP(4) = Numeri(D)
			Scrivi "|" & StringaNumeri(TMP,,True) & "|",True,False
				For R = 1 To 12
				Ru(1) = R
					SR = SerieRitardo(Ini,Fin,TMP,Ru,2)
					If SR > 300 Then ColoreTesto 2 : GR = True
					Scrivi FormatSpace(SR,6,True) & Space(3),GR,False
					ColoreTesto 0 : GR = False
					Scrivi "|",True,False
				Next
			Scrivi
			Next
		Next
	Next
Next
Titoli

End Sub

Sub Titoli
	Dim NR,SP,SD 'NomeRuota' -centrato- con SpaziPrima & SpaziDopo
	Scrivi "| QUARTINA  |",1,0
	For NR = 1 To 12
	SP = Int((10 - Len(NomeRuota(NR)))/2)
	SD = 9 - Len(NomeRuota(NR)) - SP
		Scrivi Space(SP) & UCASE(NomeRuota(NR)) & Space(SD)& "|",True,False
	Next
	Scrivi
End Sub

Tuttavia nel caso sorgessero dubbi ... sono qui!.

Buona Giornata a tutte/i.

:)
 
Ultima modifica:
Sto analizzando passo passo . Grazie Joe91.

For A = 1 To 7
For B = A + 1 To 8
For C = B + 1 To 9
For D = C + 1 To 10

Scrivi A & "." & B & "." & C & "." & D

Next
Next
Next
Nextimg116.jpg
 

Ultima estrazione Lotto

  • Estrazione del lotto
    martedì 23 dicembre 2025
    Bari
    57
    90
    22
    43
    26
    Cagliari
    62
    22
    02
    11
    18
    Firenze
    18
    56
    01
    68
    09
    Genova
    25
    79
    48
    88
    17
    Milano
    49
    10
    56
    83
    01
    Napoli
    09
    63
    67
    07
    50
    Palermo
    10
    82
    42
    78
    09
    Roma
    29
    12
    73
    74
    62
    Torino
    32
    09
    43
    06
    38
    Venezia
    45
    63
    67
    58
    56
    Nazionale
    43
    51
    74
    32
    01
    Estrazione Simbolotto
    Venezia
    44
    20
    27
    40
    12
Indietro
Alto