erreesse (Normal User)
Newbie
Messaggi: 6
Iscritto: 02/08/2010
|
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
|
|
Alfonso (Ex-Member)
Guru
Messaggi: 688
Iscritto: 30/09/2009
|
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.
|
|
Ultimo (Member)
Guru
Messaggi: 877
Iscritto: 22/05/2010
|
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
|
|
erreesse (Normal User)
Newbie
Messaggi: 6
Iscritto: 02/08/2010
|
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.
|
|
Alfonso (Ex-Member)
Guru
Messaggi: 688
Iscritto: 30/09/2009
|
Ti consiglio questo semplice algoritmo che in sei passaggi estrae random i 6 numeri senza ripetizioni.
Codice sorgente - presumibilmente VB.NET |
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 il 23/08/2010 alle 23:29 |
|
erreesse (Normal User)
Newbie
Messaggi: 6
Iscritto: 02/08/2010
|
Postato originariamente da Alfonso:
Ti consiglio questo semplice algoritmo che in sei passaggi estrae random i 6 numeri senza ripetizioni.
Codice sorgente - presumibilmente VB.NET |
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
|
|
Grazie Alfonso provo il codice e ti faccio sapere. |
|
erreesse (Normal User)
Newbie
Messaggi: 6
Iscritto: 02/08/2010
|
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.
|
|
Alfonso (Ex-Member)
Guru
Messaggi: 688
Iscritto: 30/09/2009
|
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 il 24/08/2010 alle 14:51 |
|