Newsgroup: it.comp.lang.visual-basic
Titolo: Creare 10000 elementi random e recuperarne i primi 100

Salve,
E' estremamente probabile che sono io a non
conoscere bene la funzione Rnd e Randomize, ma
non riesco a generare dieci mila numeri casuali.
Qualcuno mi può mostrare il codice corretto( non
vorrei finire nel bestiario del NG, quindi esito a
postare il mio codice... :-P )?
Grazie infinite,
Andrea

 Qualcuno mi può mostrare il codice corretto
dim i as integer
randomize timer
for i = 1 to 10000
    debug.print rnd
next i
non è proprio casuale, ma questo lo sai già :-)
--
Salutoni
Sergio

 non è proprio casuale, ma questo lo sai già :-)
Non ho detto "casuali" ma "random" apposta... :-)
Cmq ho dimenticato di dire che devo metterli in una
collection e poi recuperarli dalla stessa collection.
Mi daresti ancora una mano per favore?
Siccome li inserisco usando come indice CStr( ValoreRandom ),
dopo circa 100 valori( anche meno, a come gli gira ) mi dice che
l'indice esiste già, creandomi - evidentemente - un problema :-)
Un'ultima cosa: i numeri dovrebbero variare da 1 a 10000.
Ciao
Andrea

 Un'ultima cosa: i numeri dovrebbero variare da 1 a 10000.
Function RandomInt(ByVal Min As Integer, Max As Integer) As Integer
'queto puoi ometterlo, basta che tu lo chiami ad inizio serie
Randomize
'preso pari pari dalla guida...
RandomInt = Int((Max - Min + 1) * Rnd + Min)
End Function
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 Un'ultima cosa: i numeri dovrebbero variare da 1 a 10000.
Per favore: questo sull'help c'è!
(in realtà l'ho appena visto su quello di vba per access)
però, leggendo il tuo post.....
vuoi generare 10000 numeri casuali, valore minimo 1, valore massimo 10000, e
univoci?
Più che un generatore di numeri random devi trovare un algoritmo di
"mescolamento".
Se ne era parlato tempo fa, prova a cercare in questa direzione.
--
Salutoni
Sergio

Ecco il codice, che ti fa vedere quello che intendo...
Option Explicit
Private FNumColl As New Collection
Dim Num_Index As Integer
Dim CurNum As Long
Private Sub Command1_Click()
    'On Error Resume Next
    For Num_Index = 1 To 100
        CurNum = CLng((((20000 * Rnd) + 1) + (10 * Rnd)))
        FNumColl.Add CurNum, CStr(CurNum)
    Next Num_Index
    MsgBox "Finito", , "Test"
End Sub
Private Sub Command2_Click()
    For Num_Index = 1 To 100
        CurNum = CInt(FNumColl.Item(CStr(Num_Index)))
    Next Num_Index
    MsgBox "Finito", , "Test"
End Sub
Private Sub Form_Load()
    Randomize Now
End Sub
Che cacchio sto facendo di male?
N.B. non va  a runtime

 Se ne era parlato tempo fa, prova a cercare in questa direzione.
http://groups.google.com/groups?threadm=84vl2o%24q32%241%40serv1.albacom.net
Bye, G.

Il 3/5/2003 4:27 PM, The DeerBear scrisse:

Visto che devi mettere in disordine i numeri da 1 a 10000, non ti 
conviene riempire una matrice numeri(1 to 10000) e poi usare una 
funzione che la mette in disordine?
Prova a vedere qui:
http://www.visualbasicforum.com/t7332.html
ciao
	maxx
-- 
NOSPAM: Rimuovere i trattini dallo username!
Cut hyphens from my username!

 funzione che la mette in disordine?
Della serie "facciamo e disfiamo"? ;-)

 Che cacchio sto facendo di male?
Se CurNum è stato già estratto, non può essere usato come chiave per la
collection, perché la chiave deve essere univoca. Ecco perché ti da
l'errore.
Ignazio

 
http://groups.google.com/groups?threadm=84vl2o%24q32%241%40serv1.albacom.net
ricordavo qualcosa di più recente, ma direi che è quello il concetto
--
Salutoni
Sergio

 Ignazio
Andrea

Il 3/5/2003 5:10 PM, The DeerBear scrisse:

Tu fai generare dei numeri in maniera casuale. Puo' succedere che lo 
stesso numero venga generato 2 volte e poiche' tu hai utilizzato il 
numero come chiave nella collection, quando assegni una seconda volta 
questa chiave ottieni un errore di chiave non univoca.
ciao
	maxx
P.S. Ma sono le 17, non le 5!!! ;-)


 ha scritto nel messaggio
news:b455kk$1sanhd$1...@ID-170738.news.dfncis.de...

Io una volta ho pensato ad una tecnica per realizzare quanto dici
forse non è la migliore ma ritengo abbia il vantaggio di essere semplice
unico dubbio è che non so se si possa fare con un numero cosi alto (10.000)
se non si potesse spero almeno di fornirti un buono spunto.
Utilizza una listbox nascosta;
Al caricamento del form inserisci, con una semplice iterazione, tutti i
numeri da 1 a 10.000;
e dimensiona una matrice di pari capacità
Con la funzione Rnd genera un numero "random" con minimo pari al primo
indice della listbox (0)
e massimo pari all'ultimo indice della listbox (listbox.listcount-1);
Usa tale numero come indice della listbox (listbox.listindex) per estrarre
il relativo valore (listbox.list(numero)),
inseriscilo nella matrice seguendo un valore sequenziale del relativo indice
(con una iterazione)
e eliminalo dalla listbox (listbox.removeitem(numero));
poni il codice ottenuto in un loop fino ad esaurimento delle registrazione
della listbox (listbox.listcount=0)
al termine avrai il tuo "mescolamento" nella matrice
mi rendo conto che non sono stato molto chiaro, in caso chiedimi
--
Mauro Cerreto
www.cerretosoft.it

 non riesco a generare dieci mila numeri casuali.
Private Sub Command1_Click()
Dim Estratto(10000) As Long
Dim Lista(10000) As Long
Dim ECount As Long
Dim RNum As Long
For ECount = 1 To 10000
 Do While True
  RNum = CLng(1 + Rnd() * 9999)
  If (Estratto(RNum) = 0) Then
    Estratto(RNum) = 1
    Lista(ECount) = RNum
    Exit Do
  End If
 Loop
Next ECount
End Sub
Alla fine in Lista(1)...Lista(10000) ci sono i numeri da 1 a 10000 (tutti
e una sola volta) disposti in ordine random.
Ciao.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 maxx
Ciao
Andrea


non so se hai risolto il problema, comunque
ho provato a eseguire il tuo codice, togliendo il
rem da On Error Resume Next e quello che succede,
in fase di debug, è che viene intercettato solo
il primo errore, ovvero se con le chiavi casuali generi
delle chiavi già usate, solo il primo errore viene gestito
correttamente, gli altri no, il motivo non lo conosco, ma suppongo
sia un "problema" di VB che all'interno dei cicli non riesce a
gestire/intercettare più di un errore.
Per tornare al tuo problema, come ti hanno suggerito, ti conviene
creare un algoritmo di "disordinamento" :-))
--
bye BlackMagic
ICQ# 85485468

[CUT]
in questo post c'è la soluzione, credo, per quell'errore:
http://groups.google.com/groups?hl=it&lr=&ie=UTF-8&threadm=bAuu4.33507%24qv
.
333131%
40news.infostrada.it
&rnum=9&prev=/groups%3Fq%3Don%2Berror%2Bgroup:it.
comp.lang.*%26hl%3Dit%26lr%3D%26ie%3DUTF-8%26selm%3DbAuu4.33507%2524qv.33313
1%
2540news.infostrada.it
%26rnum%3D9


 creare un algoritmo di "disordinamento" :-))
Proverņ le soluzioni postate.
Ciao
Andrea


se ti fidi della gestione degli errori puoi usare il modo che stavi
seguendo,
magari con un "Do Loop" invece di un "For Next" per essere sicuro di
generare
tutti i numeri che vuoi.


 ha scritto

cosa, che si generi due volte lo stesso numero ?

 cosa, che si generi due volte lo stesso numero ?
Si, proprio cosě.
Andrea

 Si, proprio così.
No, Andrea, la casualità non ha una logica, per definizione.

 E' SBAGLIATO se succede.
?
Alberto

 Si, proprio cosě.
avrei detto che in una sequenza casuale, teoricamente, puoi ottenere anche
solo lo stesso numero, infinite volte. che poi rnd non sia casuale davvero,
non so come possa influire su questa condizione. ma se togli questa
condizione, la sequenza di certo _non_ e' casuale, e' vincolata.
e comunque con 10k chiamate su un pool di 10k, e' quasi certo che becchi
piu' di un'occorrenza degli stessi numeri per varie chiamate. 10k sono
pochissimi. altra cosa se facessi 10k chiamate su un pool infinito, e cio'
nonostante ne potrebbero tornare lo stesso.
schematizza: pensa al lotto o alla roulette... nel primo, perche' non
ricapiti il 36 nella stessa serie, devi togliere la pallina dal sacchetto:
infatti nella seconda ti puo' capitare n volte di seguito. improbabile, ma
possibile. perche' non ti tornino, devi man mano svuotare il pool togliendo
gli estratti.
ciao

 E' SBAGLIATO se succede.
imho ASSOLUTAMENTE NO! Un sequenza "infinita" di numeri "casuali"
equidistribuiti in un certo intervallo prevede che nella stessa sequenza un
numero possa non solo venir ripetuto ma anche anche che possa uscire più
volte  consecutivamente: ad esempio una sequenza casuale con valori compresi
tra 1 e 10 potrebbe essere benissimo 1,2,3,5,5,7,8,1,6,6,6,2,8,7,2,3,5,...
ecc... (ovviamente non è equidistribuita questa) ammettendo che l'algoritmo
di generazione dei numeri non sia sbilanciato ogni valore da 1 a 10 possiede
possiede una probabilità di uscita di 1/10 ad ogni tiro... la probabilità
che due numeri uguali escano consecutivamente dovrebbe essere 1/100 (potrei
dire vaccate)  ma per un numero sufficientemente grande di lanci dovrebbe
verificarsi... idem 3 consecutive ecc...

 Un sequenza "infinita" di numeri "casuali" equidistribuiti in un certo
intervallo
[sega mentale ON]
Aggiungo che anche la distribuzione omogenea all'interno dell'intervallo è
un fatto tutt'altro che certo.
Ovviamente, su un numero sufficientemente grande di accadimenti, la
differenza fra il numero di accadimenti inferiori a metà intervallo e il
numero di accadimenti superiori tende a divenire statisticamente
irrilevante.
Ma se noi esigiamo che la distribuzione sia EQUA, teoricamente dovremmo
imporre qualcosa di non casuale.
Esempio:
Random fra 0 e 99
I: 45,3
II: 21,8
III: 5,0
e fin qua è tutto regolare, giusto?
Però, se vogliamo che la distribuzione sia equa, sul 4° lancio dovremmo
'pretendere' una maggior probabilità per numeri più vicini al 99, il che è
contrario al concetto di casualità.
Ma niente vieta che esca 1,3.
Allora, sul quinto lancio, vorremmo a maggior ragione un numero alto, e così
via...
[sega mentale OFF]
Ciao
Alberto

[Albe V財 scrisse:
(snippone)
ma tu stai affermando che in una sequenza casuale il valore dell'elemento
successivo non dipende in alcun modo dagli elementi precedenti!
e allora come la mettiamo con tutti i programmini per la previsione delle
estrazioni del lotto?
(pregasi notare lo stile paradossale del post :-) )
--
Salutoni
Sergio

 delle estrazioni del lotto?
Accertata l'infallibilità della smorfia napoletana, ritengo che con un buon
software che memorizzi tutte le estrazioni, sia possibile ottenere
indicazioni significative sulla probabilità di uscita di ciascun numero per
la settimana successiva.
Ciao
Alberto

 ciascun numero per la settimana successiva.
questo mi fa venire in mente un vecchio postulato della logica, che spero di
ricordarmi correttamente:
una proposizione falsa giustifica tutte le successive.
--
Salutoni
Sergio

 [Albe V°] scrisse:

un coup de dés jamais n'abolira le hasard ...
questo potrebbe essere curioso, ma non ho voglia di pidieffare:
http://hilbert.dartmouth.edu/~doyle/
ciao

 ha scritto

da quando lavori per l'ente lotto ?

 
http://hilbert.dartmouth.edu/~doyle/
bene, postiamo in francese, inseriamo link in lingua inglese.
A quando il mandarino?
a parte le battute: tra i molti documenti del link, quale (o quali) sarebbe
quello interessante?
--
Salutoni
Sergio

 quello interessante?
tralasciando i rapporti di minoranza, c'era un'area 'chance':
nb: quindi _non_ siamo ot.
di quello parla il tread.
( purtroppo non 'chance the gardener' ...
gugla, gugla pure :)
ciao

 gugla, gugla pure :)
se ti riferisci al film con peter sellers (avrò scritto giusto) non ho bisogno
di guglare, se ti riferisci al testo sul quale eventualmente si basa il film...
sì
Grande film, comunque
--
Salutoni
Sergio

 Grande film, comunque
abbi fede in te stesso, vedi che vai sciolto con le lingue ?
si', uno dei miei capisaldi. e gentile, perdipiu'.
ciao

[a.p] scrisse:

Rispetto al film, e alle lingue: mi hai fatto ricordare che quel film l'ho visto
in lingua originale (sottotitolato, per fortuna) alla televisione.
E' mai possibile che la nostra televisione abbia trasmesso, nella notte dei
tempi, dei film in lingua originale, o ricordo male io?
--
Salutoni
Sergio

 la settimana successiva.
...mi auguro solo che tu stia scherzando anche qui, altrimenti
stai smentendo qualche centinaio di anni di matematica e statistica. :-))
Anch'io a suo tempo ho fatto un programma di ricerche statistiche
sul lotto (a pagamento); ma averlo fatto non significa credere
che serva a qualcosa. :-)
Anzi... forse ci azzecca di più la smorfia ;-))
Un Paperino con sign in tema.
--
Le lotterie statali sono una tassa sull'ignoranza della matematica.

 delle estrazioni del lotto?
Dove li mettiamo vorrai dire... per me sono inutili... tutto dipende
dall'accettare o meno gli assiomi che stanno alla base del calcolo delle
probabilità!

 tempi, dei film in lingua originale, o ricordo male io?
la settimana scorsa rai3 a cose mai viste ne dava in francese, direi.

 Qui sono sicuro che tu stia scherzando...
su cervorsetto o carabirra potrei avere qualche remoto dubbio, visto che mi
sembra sia napoletano verace.
ma se albe v° crede alla smorfia io comincio a credere che il premier esista
:P
ciao
ps- a buon conto l'opuscolo miracolistico devo averlo tenuto.

 esista
Chi?
Il nano più ricco del mondo?
Ciao
Alberto

 la settimana scorsa rai3 a cose mai viste ne dava in francese, direi.
non l'avevo notato.
ormai non guardo più la televisione: in prime time non c'è quasi nulla che valga
la pena, in altri orari mi dedico a studiare il .net
no, non credo che questa sia fatica sprecata.
--
Salutoni
Sergio

 nulla che valga la pena
Veramente lunedì o martedì c'è stato Cobra, con Stallone.
Finito il film, mi sono rinchiuso in studio con ray-ban anni settanta,
stuzzicadente in bocca, fondina e pistola, e davanti allo specchio ho
iniziato a studiare l'espressione da tenere per intimidire i cattivi...
Poi è entrata mia moglie :-(
Ciao
Alberto

 Il nano piů ricco del mondo?
Bill Gates? ;)