Newsgroup: it.comp.lang.visual-basic
Titolo: programmino per estrarrre numeri in modo casuale e non ripetuti ??

devo creare una piccola utility che mi estragga a caso dei numeri interi
compresi in un intervallo che io stabilisco. Inoltre ed è questo importante,
i numeri che estrae non devono mai ripetersi, non solo nella stessa sessione
dell'applicazione, ma sempre, fino (in teoria) all'esaurimento degli stessi.
Sapete consigliarmi o sapete dirmi se esiste un controllo freeware che
realizzi questo comportamento.
grazie.

 wrote in message
1Ct58.281$ia6....@twister2.libero.it...


 ha scritto nel messaggio
news:1Ct58.281$ia6....@twister2.libero.it...


>stessi.
Non ho granchè da aggiungere a quanto gli illustri colleghi
non abbiano già detto :)
Ma ad ogni modo ti consiglio  come già
suggerito di usare
la funzione 
Randomize e poi Rnd (MSDN) 
e di
utilizzare un array di bool di dimensione pari all'intervallo
che a te
interessa 
usa il numero casuale come indice e setta true o false a
seconda che il numero sia uscito o no così ne controlli velocemente
l'esistenza .
Se opti per l'opzione Redim di  ti consiglio di guardare
anche la keyWord Preserve (MSDN)
Tieni in considerazione che più ti
avvicini al termine della serie più controlli dovrai fare perchè:
se per
es hai un intervallo di 10 numeri (1 to 10) una volta che sono usciti i
primi 9 l'utlimo (utilizzando Rnd ) ti puo venir fuori anche dopo 12 ore
(visto che la probabilità in un estrazione con ripetizione è la stessa) e
quindi per gli utlimi numeri ti consiglio ti utlizzare un paio di cili for
sull'array o di ridurre il range di generazione mano a mano che escono
tieni in considerazione anche che la funzione Rnd con randomize ti tira
fuori numeri PSEUDO CASUALI quindi se hai bisogno di un elevato livello di
indeterminazione (per ex.. applicazioni statistiche di alto livello) spesso
viene utilizzato l'oscillatore della scheda Audio 
ma per utlizzarlo devi
scriverti un bel progz in C o ASM. :)
 
Lorenzo
(NoMoreSecrets)
PS: Ci sono volte in cui mi rendo conto che mi piace fare il professore ma
sono solo un  Beeeeeeeeeeeeeeeeeeeeeeeeeeep (Censura) Perdonatemi
--------------------------------
Inviato via 
http://usenet.iol.it
 



Il seguente codice dovrebbe fare al caso tuo:
1) Carica in una collezione tutti i numeri compresi nel range che vuoi
tu.
2) Sceglie a caso un indice della collezione, ne estrae il numero
contenuto e cancella la voce dalla collezione.
In questo modo si fanno tante iterazioni quanti sono i numeri
inseriti.
---------------------------------------------------------------------------
Dim Coll As Collection	'Collezione temporanea
Dim Cont As Long	'Contatore per il caricamento dei numeri
Dim stringa As String 	'Per stampare alla fine una stringa
Dim NumeroIniziale As Long 
Dim NumeroFinale As Long
Private Sub Form_Load()
   'I numeri, in questo caso, sono compresi tra 10 e 20
    NumeroIniziale = 10
    NumeroFinale = 20
    'Imposto la collezione 
    Set Coll = New Collection
    'Inserisco uno alla volta i numeri all'interno della collezione
    For Cont = NumeroIniziale To NumeroFinale
        Call Coll.Add(Cont)
    Next
 
    Randomize
    stringa = ""
    'Fino a quando ci sono elementi nella collezione ...
    Do While Coll.Count > 0
        'Cerco un indice a caso della collezione
        Index = Int(Rnd * Coll.Count) + 1
         'Aggiorno la stringa con il numero contenuto nella voce della
         'collezione
        stringa = stringa & Coll(Index) & Chr(13) & Chr(10)
        'Rimuovo la voce dalla collezione	
        Call Coll.Remove(Index)
    Loop
    'Stampo con un msgbox la stringa di numeri casuali        
    Call MsgBox(stringa)
 
End Sub

 dell'applicazione, ma sempre, fino (in teoria) all'esaurimento degli stessi.
Copio e incollo da un vecchio post di Antonio Donatiello:
____________________________________
1. riempio un vettore di n elementi con i numeri da 1 a n.
2. estraggo x = un numero a sorte da 1 a n.
3. uso il valore v(x).
4. inserisco in v(x) il valore v(n).
5. decremento n di 1
6. vado al punto 2 se n > 0
____________________________________
E' il sistema piů efficiente che conosco.
Bye, G.