Oppure

Loading
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 10:52
erreesse
Postato originariamente da 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


Grazie Alfonso provo il codice e ti faccio sapere.
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