Novità

Per tutti gli scriptisti

Ho provato lo script di I Leggend ed è troppo bello, nel senso che se a me i 5 numeri servirebbero solo per farli apparire sarebbe l'ideale, ma a me i 5 numeri servono separati, cioè ad ogni numero la sua variabile e poi se si sceglie esempio 90 come primo numero il risultato deve essere 90 primo numero non ultimo, lo sò che I Leggend con questo script mi ha regalato una mercedes, ma per quello che devo fare io mi serve un mulo, adesso provo a modificare lo script di I Leggend e spero che non mi scoppi il computer.

Ciao!
 
Ultima modifica:
ciao salvo mi spiace , sono stato superficiale ,non ho letto lo script vcompleto mi sono fermato a risolvere quello che ti serviva per eliminare i 5 inputbox, e non dover gestire numeri diversi dalla figura 9.
con la sub che ti ho scritto puoi anche fare altro non solo scriverli, praticamente i numeri scelti li carichi in una matrice che scorri e li utilizzi uno per uno con il ciclo for,
per quanto concerne la scelta casuale e non ordinata non saprei.
mi viene in mente di inserire una stringa ed estrabolarla con un ciclo for ma non saprei gestire l'errore,di un numero diverso da fig 9
Do while se si usa erroneamente tende ad incasinare il computer :) almeno il mio .quando lo uso starnutisce:)
Spero che Luigi ci mostri l'utilizzo migliore della funzione che ci ha regalato,
Ciao un saluto a tutti:)
 
Ciao salvo prova con questa funzione
Codice:
Option Explicit
Sub Main
Dim a,b,c,d,e
a=fig9
b=fig9
c=fig9
d=fig9
e=fig9
Scrivi a
Scrivi b
Scrivi c
Scrivi d
Scrivi e    
End Sub

Function fig9
Dim aNum,Ris,Ris1
  aNum=Array("09","18","27","36","45","54","63","72","81","90")
  Ris=ScegliOpzioneMenu(aNum,0,"Seleziona un Numero")
  Ris1=(Ris*9)+9
  fig9=Ris1
End Function
stesso codice con ciclo do per evitare di inserire valori simili
sono curioso di capire come ottimizzarlo
Codice:
Option Explicit
Sub Main
    Dim a,b,c,d,e
    a = fig9
    b = fig9
    Do While a = b
        MsgBox" b=a,riscrivi"
        b = fig9
    Loop
    c = fig9
    Do While c = b Or c = a
        MsgBox" c=a Or c=b, riscrivi"
        c = fig9
    Loop
    d = fig9
    Do While d = c Or d = b Or d = a
        MsgBox" d=c Or d=b Or d=a, riscrivi"
        d = fig9
    Loop
    e = fig9
    Do While e = d Or e = c Or e = b Or e = a
        MsgBox" e=d Or e=c Or e=b Or e=a, riscrivi"
        e = fig9
    Loop
    Scrivi a
    Scrivi b
    Scrivi c
    Scrivi d
    Scrivi e
End Sub
Function fig9
    Dim aNum,Ris,Ris1
    aNum = Array("09","18","27","36","45","54","63","72","81","90")
    Ris = ScegliOpzioneMenu(aNum,0,"Seleziona un Numero")
    Ris1 =(Ris*9) + 9
    fig9 = Ris1
End Function
notte:)
 
Ultima modifica:
Ciao I Leggend!

Li ho provati tutti e due e sono ottimi, perfetti, stavolta mi hai letto nel pensiero, ti ringrazio di cuore, anche a Mike58.
 
Ciao salvo ,è un piacere aiutare. Mike e Joe e Luigi e pfca e Miguelma mi hanno aiutato tantissimo a imparare quel po che so...:)
per quanto riguarda il ciclo do che ti mandava in tilt il pc credo che cosi sia corretto:
Codice:
Option Explicit
Sub Main
    Dim a,b,c,d,e
    a = CInt(InputBox("Num1","Fig_)"))
    Do While Figura(a) <> 9
        MsgBox"Il numero inserito non appartiene alla figura 9"
        a = CInt(InputBox("Num1","Fig_9"))
    Loop
    b = CInt(InputBox("Num2","Fig9"))
    Do While Figura(b) <> 9
        MsgBox"Il numero inserito non appartiene alla figura 9"
        b = CInt(InputBox("Num2","Fig_9"))
    Loop
    c = CInt(InputBox("Num3","Fig_)"))
    Do While Figura(c) <> 9
        MsgBox"Il numero inserito non appartiene alla figura 9"
        c = CInt(InputBox("Num3","Fig_9"))
    Loop
    d = CInt(InputBox("Num4","Fig9"))
    Do While Figura(d) <> 9
        MsgBox"Il numero inserito non appartiene alla figura 9"
        d = CInt(InputBox("Num4","Fig_9"))
    Loop
    e = CInt(InputBox("Num5","Fig_)"))
    Do While Figura(e) <> 9
        MsgBox"Il numero inserito non appartiene alla figura 9"
        e = CInt(InputBox("Num5","Fig_9"))
    Loop
    Scrivi a & " " & b & " " & c & " " & d & " " & e
End Sub
la variabile la scrivi fuori dal ciclo do altrimenti l:):)ppa all'infinito.
Cmq credo che la soluzione migliore sia quella della funzione scritta alla bisogna:)
Ciao
 
Ciao I Leggend!

Ma vuoi vedere che sei LuigiB con un altro nickname, scherzo naturalmente, ho provato anche questo e va bene per quello che serve a me, adesso devo decidere quale usare degli ultimi tre che hai postato.
 
Ultima modifica:
Buon Giorno a tutte/i.

Apporto un pizzico di mio ... a quanto avevo scritto ed a come si sono evolute le cose.

Con la premessa che al messaggio # 32 salvo aveva proposto :

c1 = InputBox("Inserisci primo numero di fig. 9)",c1)
c2 = InputBox("Inserisci secondo numero di fig. 9)",c2)
c3 = InputBox("Inserisci terzo numero di fig. 9)",c3)
c4 = InputBox("Inserisci quarto numero di fig. 9)",c4)
c5 = InputBox("Inserisci quinto numero di fig. 9)",c5)

Sono 5 inputbox praticamente identici in 5 linee di script.

Se scrivessimo:

For N = 1 to 5
C(N) = Inputbox (....)
Next

Avremmo molto meno codice ed i 5 input in 5 variabili diverse ed indicizzate.

Ritengo sia un doppio vantaggio.

E ... mi fermo, per ora, a questa prima parte della "rivoluzione" sperando di fare cosa gradita,

nell'approfondire e stravolgere ... alcuni aspetti di queste varie soluzioni tutte differenti ed a loro modo valide.

:) Cordiali saluti.
 
Possiamo dunque considerare che gli input possano essere 2 / 3 / 4 / 5 / 6 .... 10 ... 1000

e noi ... ne scriviamo sempre solo UNO. Ed è un terzo vantaggio.

Inoltre possiamo modificare subito o successivamente da 5 a 6 ... o 3 o 9 e lo script rimane sempre lo stesso.

Non c'è (quasi) nulla da modificare. Ed è un quarto vantaggio.

Ora possiamo trasformarlo ... semplicemente adattando il for-next-definito

ad un numero indefinito di input che DIPENDE da quanti input VALIDI saranno inseriti.

Dapprima diventa :

While N < 5
TMP = Fuori90 (Inputbox ("","",9))
IF FIGURA (TMP) = 9 Then
N = N + 1
REDIM PRESERVE C(N)
C(N) = Tmp
End IF
Wend
 
Ultima modifica:
Lo script ... del messaggio precedente, funziona ma ha ancora difetti.

Ovvero ACCETTA anche numeri di Figura 9 ... RIPETUTI.

Quindi dobbiamo convalidare e permettere solo quelli che non sono ancora stati inseriti ...

Per ogni nuovo input ... la validità del numero inserito viene resa falsa ... SE esso era già stato inserito precedentemente.

E quindi il codice diventa :

Codice:
Sub Main
	ReDim C(0)
	While N < 5
		TMP = Fuori90(InputBox("","",9))
		If Figura(TMP) = 9 Then
			Valido = True
			'convalida dell'input
			For X = 0 To UBound(C)
				If C(X) = TMP Then Valido = False
			Next
			If Valido = True Then 
				N = N + 1
				ReDim Preserve C(N)
				C(N) = Tmp
			End If
		End If
	Wend
	Scrivi StringaNumeri(C)
End Sub
 
Ciao Joe!

Allora li ho provati tutti e due il primo ho provato questa sequenza di numeri 66-77-81-45-45-78-18-64-27 e a questo punto ancora non finiva quindi ho aggiunto ancora il numero 9 e dopo esce e va in errore, ti posto l'immagine dell'errore, pero a parte l'errore non va male perchè non sempre non accetta i numeri doppi, perchè se fosse così doveva uscire già quando ho fatto il numero 27, poi ho fatto una sequenza di tutti 9 ed al sesto 9 in questo caso ha accettato i numeri uguali ed è uscito sempre dando lo stesso errore, con il secondo ho provato la stessa sequenza e anche questo mi da l'uscita quando faccio il numero 9, con questo ho fatto anche parecchie sequenze strambe ma se non gli dò 5 numeri validi non dà l'uscita quindi va bene, per quanto riguarda, le variabili diverse per ogni numero penso che posso fare come ho fatto con con lo script postatomi da LuigiB quando mi ha fatto la scelta dei numeri in modo casuale, approfitto di questo post per chiederti spiegazioni su tre parole nuove per me, apparse in questi script. PER JOE.jpg

UBOUND
CALL
WEND

Grazie!
 
Ultima modifica:
E ... per finire ...

con un solo inputbox, si possono usare parametri variabili

utili ed interattivi per aiutare nella fase di input:

Codice:
Option Explicit 'Script By Joe
Sub Main
	Dim Q,F,N,Prop,Tmp,X,Valido
	Q = 5 : F = 9 : ReDim C(0)
	While N < Q
		Prop = " Inserisci ancora ...  " &(Q - N) & " Numeri. " & Chr(13) & Chr(13) & "Già inesriti : " & StringaNumeri(C)
		Tmp = Fuori90(InputBox(Prop,"INSERISCI (uno ad uno) " & Q - N & "NUMERI DI FIGURA " & F,F))
		If Figura(Tmp) = 9 Then
			Valido = True
			'convalida dell'input
			For X = 0 To UBound(C)
				If C(X) = Tmp Then Valido = False
			Next
			If Valido = True Then
				N = N + 1
				ReDim Preserve C(N)
				C(N) = Tmp
			End If
		End If
	Wend
	Scrivi "Hai Inserito :",1
	For N = 1 To UBound(C)
		Scrivi Format2(C(N)) & " ",1,0
	Next
	Scrivi
End Sub

:) Buona Giornata a tutte/i.
 
Ciao Joe!

Allora li ho provati tutti e due il primo ho provato questa sequenza di numeri 66-77-81-45-45-78-18-64-27 e a questo punto ancora non finiva quindi ho aggiunto ancora il numero 9 e dopo esce e va in errore, ti posto l'immagine dell'errore, pero a parte l'errore non va male perchè non sempre non accetta i numeri doppi, perchè se fosse così doveva uscire già quando ho fatto il numero 27, poi ho fatto una sequenza di tutti 9 ed al sesto 9 in questo caso ha accettato i numeri uguali ed è uscito sempre dando lo stesso errore, con il secondo ho provato la stessa sequenza e anche questo mi da l'uscita quando faccio il numero 9, con questo ho fatto anche parecchie sequenze strambe ma se non gli dò 5 numeri validi non dà l'uscita quindi va bene, per quanto riguarda, le variabili diverse per ogni numero penso che posso fare come ho fatto con con lo script postatomi da LuigiB quando mi ha fatto la scelta dei numeri in modo casuale, approfitto di questo post per chiederti spiegazioni su tre parole nuove per me, apparse in questi script. Vedi l'allegato 14422

UBOUND
CALL
WEND

Grazie!

Ciao Salvo ...

i primi ... "sono introduttivi" e più che altro di spiegazione passo-passo ... per le scelte adottate.

Forse funzionano ma in ogni caso devono essere inseriti tra "Sub main" ed "End Sub"

Call ... è la chiamata ad una "Istruzione" o "Funzione" o "Subroutine" con ... tra parentesi (dati,parametri ... opzioni)

... ad esempio: Call Scrivi ("Pippo")

Ubound è il numero letto da un "contatore-interno" ed è il "di quanti" elementi è composto un elenco.

Nel caso specifico noi abbiamo "N" e potremmo usare questo N ... oppure anche "Q" da cui N discende.

Ma come vedi Ubound ... lo sa da sè ... quanti numeri abbiamo inserito ...

ed a volte ... noi per contro non sappiamo quanti numeri ci sono in ballo! (Ovvero dovremmo contarli per saperlo)

While-Wend ... non l'usa nessuno. Wend funziona ... come Fine-del-While (While END).

:)
 
Ultima modifica:
Ciao!

Mii non mi sono accorto che nel primo mancavano sub main e end sub, che figura di m...a come dice qualcuno.

Comunque grazie di tutto.
 
Ultima modifica:
Ciao Salvo.

No anzi, sono gli Errori banali ... quelli che

a volte impegnano ... non poco a farsi trovare.

Poi del resto è colpa mia, comer script ... avrebbe dovuto avere ...

:)
 
Ciao, Complimenti e Grazie a Joe per la bella soluzione, e utile anche a me.

La conservo per utilizzi futuri.

Bravo Joe sempre efficiente ed esaustivo
 
Bravo anche da me Joe specie per la tua chiara opera di insegnamento.
Do anche io il mio apporto modificando un pochino il tuo script.
Se l'utente tutto ad un tratto non vuole piu esegiore lo script dopo che ormai ha premuto ok e quindi in fase di inserimento
numeri preme il tasto annulla succede che lo script continua lo stesso e imperituro ci richiede un nuovo numero.
Quindi va gestito il tasto annulla , tu hai giustamente usato un ciclo per richiedere una precisa
quantita di numeri , il fatto che while wend non lo usi nessuno dipende anche dal fatto che in quel tipo
di ciclo non si puo uscire nemmeno volendo specie in vbscript dove non è ammessa l'istruzione go to.
Do loop è piu versatile , dato che noi abbiamo bisogno di poter uscire usiamo questo tipo di ciclo iterativo.
Per prova esegui lo script tuo e tenta di premere annulla .. vedi se non ti fa arrabbiare :-)

ecco le piccole correzioni

Codice:
Option Explicit 'Script By Joe
Sub Main
	Dim Q,F,N,Prop,Tmp,X,Valido,Num
	Q = 5 : F = 9 : ReDim C(0)
	Do While N < Q
		Prop = " Inserisci ancora ...  " &(Q - N) & " Numeri. " & Chr(13) & Chr(13) & "Già inesriti : " & StringaNumeri(C)
		Num = InputBox(Prop,"INSERISCI (uno ad uno) " & Q - N & "NUMERI DI FIGURA " & F,F)
		If Not isNumeroValidoLotto(Num)  Then Exit Do
		Tmp = Fuori90(Num)
		
		If Figura(Tmp) = 9 Then
			Valido = True
			'convalida dell'input
			For X = 0 To UBound(C)
				If C(X) = Tmp Then Valido = False
			Next
			If Valido = True Then
				N = N + 1
				ReDim Preserve C(N)
				C(N) = Tmp
			End If
		End If
	Loop
	Scrivi "Hai Inserito :",1
	For N = 1 To UBound(C)
		Scrivi Format2(C(N)) & " ",1,0
	Next
	Scrivi
End Sub
 
tante volte è necessario come abbiamo visto anche in questo thread generare dei numeri casuli senza ripetizioni non che sia difficile implemtarlo nello script ma ho pensato di inserire istruzioni apposite che saranno disponbili dalla prossima versione al fine di rendere sempre piu compatto il codice degli script

Codice:
Option Explicit
Sub Main
	Dim k
	
	' inizializza il generatore con i valori di default 1-90
	Call InitGenNumUnivoci
	' genera 10 numeri casuali senza ripetizioni nel range di default 1-90
	For k = 1 To 10
		Call Scrivi("Numero casuale : " & GetNumeroUnivoco)
	Next
	
	
	Call Scrivi
	
	
	' inizializza il generatore con i valori a piacimento
	Call InitGenNumUnivoci(50,1500)
	' genera 10 numeri casuali senza ripetizioni nel range di 50-1500 (è solo un esempio !)
	For k = 1 To 10
		Call Scrivi("Numero casuale : " & GetNumeroUnivoco)
	Next
End Sub
 
Ciao LuigiB!
In quello dei 5 num. fig.9, ho fatto stop ma non mi fa uscire se non gli dò i 5 numeri giusti, ho la versione 1.5.4

in quello dei numeri casuali mi dà errore, ti allego l'immagine.

per Luigi.jpg
 
Ciao , non so se hai letto bene ma io dicevo che quello script funzionera dalla prossima versione in poi.
Riguardo lo script di Joe che io ho ripostato funziona benissimo , lo scopo è uscire dal ciclo do se si preme ANNULLA nell'inputbox dei numeri in figura
 

Ultima estrazione Lotto

  • Estrazione del lotto
    venerdì 22 novembre 2024
    Bari
    27
    45
    81
    17
    55
    Cagliari
    78
    66
    45
    03
    14
    Firenze
    14
    90
    72
    88
    55
    Genova
    33
    23
    82
    81
    24
    Milano
    25
    79
    13
    42
    15
    Napoli
    39
    35
    65
    01
    14
    Palermo
    25
    83
    69
    50
    36
    Roma
    25
    71
    22
    10
    55
    Torino
    59
    30
    43
    74
    49
    Venezia
    39
    90
    77
    05
    35
    Nazionale
    82
    60
    62
    65
    59
    Estrazione Simbolotto
    Torino
    44
    12
    32
    06
    13
Indietro
Alto