23/08/10 13:23
erreesse
Vorrei porre un quesito
Ringrazio chi mi può aiutare
uso VB 6
Ho questa matrice
dim N (1 to 6) as integer 'matrice di numeri
con questi numeri.
N(1) = 2
N(2) = 19
N(3) = 83
N(4) = 65
N(5) = 11
N(6) = 74
una volta che ho la matrice piena ho creato un random
che prelevi i numeri solo da questa matrice N(), E le vadi a scrivere in uno schema
fatto di 9 Label1(index).
'-------------------------------
Questo è il codice che ho usato
-----------------------------------------------------------------
Dim N(1 To 9) As Integer 'matrice di numeri
Private Sub Command1_Click()
Randomize
N(1) = 2
N(2) = 19
N(3) = 83
N(4) = 65
N(5) = 11
N(6) = 74
' randomizo i numeri da 1 a 9
Dim X As Integer
Dim xx As Boolean
ripeti:
For y = 1 To 9
Label1(y).Caption = ""
Next
For X = 1 To 6
xx = False
ran = Int(9 * Rnd + 1)
Label1(ran).Caption = N(X)
Next X
ss = 1
For a = 1 To 8
For aa = a + 1 To 9
i = Val(Label1(a).Caption)
ii = Val(Label1(aa).Caption)
If i <> 0 And ii <> 0 Then
If i = ii Then GoTo ripeti
End If
Next
Next
End Sub
ho un pulsante e nove label1 con index da 1 a 9
adesso ogni volta che premo sul pulsante TUTTI I 6 numeri si dovrebbero colocare in
modo casuale sui label. Ma questo non accade, qualche volta ne inserisce 4 qualche volta 6
dov'è lo sbaglio?
GRAZIE
aaa
23/08/10 14:12
Alfonso
Mi ci è voluto un po' per capire il tuo ragionamento.
Dunque:
Tu scorri l'array dei tuoi numeri, da 1 a 6, e scegli random l'indice della label a cui attribuire il valore.
Per cui fai 6 attribuzioni.
Poi controlli le label e se ce ne sono uguali ripeti dall'inizio.
Bene che va, cioè sei label diverse in partenza, tutto si ferma.
aaa
23/08/10 15:34
Ultimo
Postato originariamente da erreesse:
Vorrei porre un quesito
Ringrazio chi mi può aiutare
uso VB 6
Ho questa matrice
dim N (1 to 6) as integer 'matrice di numeri
con questi numeri.
N(1) = 2
N(2) = 19
N(3) = 83
N(4) = 65
N(5) = 11
N(6) = 74
una volta che ho la matrice piena ho creato un random
che prelevi i numeri solo da questa matrice N(), E le vadi a scrivere in uno schema
fatto di 9 Label1(index).
'-------------------------------
Questo è il codice che ho usato
-----------------------------------------------------------------
Dim N(1 To 9) As Integer 'matrice di numeri
Private Sub Command1_Click()
Randomize
N(1) = 2
N(2) = 19
N(3) = 83
N(4) = 65
N(5) = 11
N(6) = 74
' randomizo i numeri da 1 a 9
Dim X As Integer
Dim xx As Boolean
ripeti:
For y = 1 To 9
Label1(y).Caption = ""
Next
For X = 1 To 6
xx = False
ran = Int(9 * Rnd + 1)
Label1(ran).Caption = N(X)
Next X
ss = 1
For a = 1 To 8
For aa = a + 1 To 9
i = Val(Label1(a).Caption)
ii = Val(Label1(aa).Caption)
If i <> 0 And ii <> 0 Then
If i = ii Then GoTo ripeti
End If
Next
Next
End Sub
ho un pulsante e nove label1 con index da 1 a 9
adesso ogni volta che premo sul pulsante TUTTI I 6 numeri si dovrebbero colocare in
modo casuale sui label. Ma questo non accade, qualche volta ne inserisce 4 qualche volta 6
dov'è lo sbaglio?
GRAZIE
Il codice che hai scritto non è completo, ss=1 a cosa ti serve, xx=False a cosa ti serve.
If ok Then GOTO Avanza else GOTO Inizia
23/08/10 21:10
erreesse
per Alfonso giusto così. le label sono nove ne dovrebbe lasciare
3 vuote e 6 piene.
Dimenticavo nessun numero deve essere ripetuto.
Per ultimo, invece la xx e s non servono, erano prove fatte in precedenza
ho provato con un paio di codici prelevato anche da questo forum, e da
un sito inglese.
aaa
23/08/10 21:21
Alfonso
Ti consiglio questo semplice algoritmo che in sei passaggi estrae random i 6 numeri senza ripetizioni.
For x = 1 To 9
Label1(x).Caption = ""
Next
n(1) = 2
n(2) = 19
n(3) = 83
n(4) = 65
n(5) = 11
n(6) = 74
i = 6
Do While i > 0
t = Int(i * Rnd + 1) ' estrae il valore tra 1 e i
Label1(i).Caption = n(t)' attribuisce il valore contenuto nell'array n(t)
If t <> i Then ' se non è l'ultimo valore dell'array considerato
n(t) = n(i) ' scambia l'ultimo con quello estratto
End If
i = i - 1 ' non considera più l'ultimo array
Loop
Ultima modifica effettuata da Alfonso 23/08/10 21:29
aaa
24/08/10 11:29
erreesse
Per Alfonso
Ti ringrazio per avermi aiutato a capire il modo di estrarre da un'array
con poco codice. Avevo trovato un sacco di esempi sul web ma niente che mi potesse
essere utile.
Il codice va bene. Solo che leggendo post mi sono accorto di non aver dato le dovute spiegazioni all'inizio. Colpa della fretta. Infatti, facevo il random delle caselle,
perchè non volevo, che i numeri si disponessero nelle label in modo sequenziale..
label1(1), label1(2) ecc. ecc.
Ma anche per questi in modo casuale. Infatti usavo 9 label.
Ho risolto aggiungendo 3 nuovi numeri 0 0 0, senza cambiare il tuo codice
Private Sub Command2_Click()
For X = 1 To 9
Label1(X).Caption = ""
Next
N(1) = 2
N(2) = 19
N(3) = 83
N(4) = 65
N(5) = 11
N(6) = 74
N(7) = 0
N(8) = 0
N(9) = 0
i = 9
Do While i > 0
t = Int(i * Rnd + 1) ' estrae il valore tra 1 e i
Label1(i).Caption = N(t) ' attribuisce il valore contenuto nell'array n(t)
If t <> i Then ' se non è l'ultimo valore dell'array considerato
N(t) = N(i) ' scambia l'ultimo con quello estratto
End If
i = i - 1 ' non considera più l'ultimo array
Loop
End Sub
Ti ringrazio nuovamente.
aaa
24/08/10 12:49
Alfonso
In effetti non ti eri spiegato benissimo!
Il metodo che hai scelto è perfetto.
Il prossimo messaggio che dovesse contenere codice, ricordati di racchiudere il codice tra i tag code.
Ciao
Ultima modifica effettuata da Alfonso 24/08/10 12:51
aaa