Newsgroup: it.comp.lang.visual-basic
Titolo: Problemino con Rnd

Ciao a tutti,
ho un piccolo problemino devo memorizzare in una array (da 0 a 6) 7 numeri
casuali scelti in un intervallo che va da 0 a 27.
Uso X= Int(1+rnd) * 27 e fin qui non ci sono problemi.
Il problema ce l'ho quando voglio fare la stessa cosa su una seconda array
(da 0 a 6) dove devo memorizzare sempre 7 numeri casuali scelti nello stesso
intervallo di prima, ma i numeri non devono essere gli stessi che ci sono
nella prima array.
Sto scrivendo un piccola procedura che mi cicla e contralla l'array, però
visto che in totale le array sono 6 volevo sapere se c'era un modo più
veloce per fare ciò per esempio un ranomize che non crea numeri uguali.
Premetto che ho già visto sulla guida e non ho trovato niente
d'interessante.
Grazie a tutti
 
--------------------------------
Inviato via 
http://usenet.libero.it

 d'interessante.
Possibile? Hai provato Randomize(Timer)?

 Uso X= Int(1+rnd) * 27 e fin qui non ci sono problemi.
Pensa che io invece i problemi li avrei già qui.
A meno che tu non voglia mettere sette volte 27.
Ciao
Alberto

 A meno che tu non voglia mettere sette volte 27.
Albe alias OcchioDiLince ;-)


  LoL


 d'interessante.
1) Crei un array con i numeri da 0 a 27
2) Lo "mischi"
3) Estrai i numeri dall'array uno dopo l'altro.
Tipo:
Dim temp(27) As Integer
Dim n(27) As Integer
1)
For i = 0 To 27
    temp(i)=i
Next i
2)
ultimo = 27
For i = 0 To 27
    Caso = Int(Rnd * ultimo)
    n(i) = temp(Caso)
    temp(Caso) = temp(ultimo)
    ultimo = ultimo - 1
Next i
3)
j=0
For i = 0 To 6
    arr1(i) = n(j)
    j = j + 1
Next i
For i = 0 To 6
    arr2(i) = n(j)
    j = j + 1
Next i
..
--
Ciao, Silv:o)

 d'interessante.
 Cmq, prova questo :
  Dim iVal as Integer
  Randomize Timer
  iVal = Int(28 * Rnd)
 
Ciao


 d'interessante.
Ti conviene utilizzare un vettore con i numeri da 0 a 27 e poi scartarli via 
via che vengono inseriti negli array.
Potresti utilizzare una collection che contiene i numeri compresi tra 0 e 27 
e poi prenderli a caso per riempire i vettori.
Ti faccio un esempio:
-----------------------------
Dim Coll as collection
Dim Vettore1(6) as integer
Dim Vettore2(6) as integer
Dim Posizione as long 
Dim k as long
Sub Form_Load
        set coll=new collection
        'Riempie la collezione
        for k=0 to 27   
                call coll.add(k)
        next k
        for k=0 to 6 
                'Riempie via via le posizioni del primo vettore
                posizione=int(rnd*coll.count)+1
                vettore1(k)=coll(posizione)
                call coll.remove(posizione)
                'Riempie via via le posizioni del secondo vettore
                posizione=int(rnd*coll.count)+1
                vettore2(k)=coll(posizione)
                call coll.remove(posizione)
        next k
        'Scarica la collezione
        set coll=nothing
End Sub
-----------------------------
Oppure la stessa cosa la potresti fare con tre vettori, e viene più o meno 
quello che ho scritto usando la collection; con la collection mi risparmio 
il ridimensionamento del vettore dei numeri.
-----------------------------
Dim VettoreNumeri() as integer
Dim Vettore1(6) as integer
Dim Vettore2(6) as integer
Dim Posizione as long 
Dim k as long
Sub Form_Load
        redim VettoreNumeri(27)
        'Riempie il vettore dei numeri
        for k=0 to 27   
                VettoreNumeri(k)=k
        next k
        for k=0 to 6 
                'Riempie via via le posizioni del primo vettore
                posizione=int(rnd*(ubound(vettorenumeri)+1))
                vettore1(k)=VettoreNumeri(posizione)
                VettoreNumeri(posizione)=VettoreNumeri(ubound(VettoreNumeri))
                redim preserve VettoreNumeri(ubound(vettoreNumeri)-1)
                'Riempie via via le posizioni del secondo vettore
                posizione=int(rnd*(ubound(vettorenumeri)+1))
                vettore2(k)=coll(posizione)
                VettoreNumeri(posizione)=VettoreNumeri(ubound(VettoreNumeri))
                redim preserve VettoreNumeri(ubound(vettoreNumeri)-1)
        next k
End Sub
-----------------------------
Come vedi sono molto simili.
Ciao,
        Fabrizio

 in totale le array sono 6
Vediamo: 6 array da 7 numeri l'uno = 42 numeri in totale.
Come fai a scegliere 42 numeri differenti in un intervallo
di 28 numeri? (0-27)?
Lokar
-- 
Sito Comune: 
http://www.it-lang-vb.net/
Manifesto: 
http://www.it-lang-vb.net/docs/Manifesto.txt
UGIdotNET - 
http://www.ugidotnet.org

 Fabrizio


 random sono sempre gli stessi?
Secondo te nel post di nk6310i quel "randomize timer" a cosa serviva?
Ciao
Alberto

 Secondo te nel post di nk6310i quel "randomize timer" a cosa serviva?
A introdurre un ritardo nell'applicazione?
Salutoni
Sergio
NB: è ovvio (spero) che sto scherzando


Scusami hai ragione ho sbagliato a scrivere int(rnd*27)+1
Scusa


 Scusami hai ragione ho sbagliato a scrivere int(rnd*27)+1
sě, questo si era capito.
Ma sempre 27 restano.
Salutoni
Sergio


Adesso che mo lo hai detto lo so a cosa serve randomize timer :-)
PS: er ovvio che scherzavi :-) grazie e tanti tnk


 Scusa
Fantastico...
Alberto

 Fantastico...
LOL!
Lokar.ma.che.ho.scritto.a.fa


 PS: er ovvio che scherzavi :-) grazie e tanti tnk
'azz, me lo merito, sono stato plonkato da 3 in una volta sola :-(


  Forse intende che la sequenza ( di 7 numeri ) debba essere diversa...mah..io
l'ho interpretata cosi!
 
Ciao


 Ciao
esatto a seconda degli elementi selezionati il numero diminuisce:
es.: 2 elementi solo 2 vettori 7 numeri casuali
     3 elementi solo 3 vettori 5 numeri casuali
     4 elementi solo 4 vettori 4 numeri casuali
     5 elementi solo 5 vettori 2 numeri casuali
     6 elementi solo 6 vettori 1 numeri casuali
così penso che sia più chiaro
scusatemi ma questa mattina ero un po rimba....
cmq ho risolto grazie a tutti
