Newsgroup: it.comp.lang.visual-basic
Titolo: Sequenza numeri casuale

Ciao a tutti. Scusate l'ignoranza ma sono un po' nuovo di Visual Basic.
Devo generare una sequenza di numeri in modo casuale da 1 a 10 ma senza che 
questi vengano ripetuti.
Vorrei utilizzare una sola variabile che cambia valore (da 1 a 10) dopo 
averla utilizzata.
Qualche consiglio?
Grazie. Ciao.
Andrea. 

Ciao Andrea,

VB o VB.Net?
.m
-- 
Mauro Servienti
{C67C0157-5D98-4733-A75E-93CAEE4BADC8}
Microsoft MVP - Visual C# / MCTS
http://mvp.support.microsoft.com
blog @ 
http://milestone.topics.it
whynot [ at ] topics [ dot ] it

 ha scritto nel messaggio 
news:4c7a776b$0$18987$4faf...@reader5.news.tin.it...

Istruzioni RANDOMIZE  e RAND
crei un array di 10 elementi e li setti a 0
fai uscire il primo numero e setti l'elemento
dell'array del numero uscito a 1.
Fai uscire gli altri numeri e se l'elemento del'array
e a 0 accetti il numero casuale 


Utilizzo la versione espress 2010
Ciao. 

 ha scritto nel messaggio 
news:i5e1id$804$1...@news.eternal-september.org...

Penso di aver capito. Forse.
Ma in questo modo, non potrei avere due elementi con lo stesso numero? In 
che modo verifico che il numero non sia gia' uscito?
Ciao. 

 Ciao.


 ha scritto nel messaggio 
news:4c7a9177$0$18658$4faf...@reader3.news.tin.it...

Fai  un
Dim  controllo(10) as integer
dim flag,numero as integer
flag=0
do
            Randomize()
            numero = Format(Int((10) * Rnd()), "00")    ' numero a caso
            if controllo(numero)=0 then
             controllo(numero)=1
             flag=flag+1
            end if
             if flag = 10 then exit loop   ' se sono usciti tutti e 10 esce
loop 

 ha scritto nel messaggio 
news:i5e45j$jh9$1...@news.eternal-september.org...

Questo forse è sbagliato !
numero = Format(Int((10) * Rnd()), "00")    ' numero a caso
cosi' dovrebbe andare
numero = Int((10) * Rnd() 

 Utilizzo la versione espress 2010
Puoi fare una cosa tipo:
       Dim usciti As New List(Of Integer)
         Dim cas As New Random
         Do Until usciti.Count = 10
             Dim n As Integer = cas.Next(1, 11)
             If usciti.IndexOf(n) = -1 Then
                 usciti.Add(n)
             End If
         Loop
in questo modo nella lista "usciti" ti rovi la sequenza di numeri estratti.
Se ad esempio vuoi visualizzarli in un RichTextBox:
  For Each num As Integer In usciti
     RichTextBox1.AppendText(Environment.NewLine & num)
  Next
Controlla che sia corretto, perché l'ho scritto di getto.
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Scarica "OpenOffice.org 3: Soluzioni a raccolta", molto più di semplici 
FAQ! 
http://it.openoffice.org/doc/manuali/

 Controlla che sia corretto, perché l'ho scritto di getto.
Va stra-bene!
Come ho scritto non sono una cima in vb, mi puoi spiegare in parole umane 
che cosa fa la procedura?
Grazie. Ciao.
Andrea. 

>           Loop
Fine del ciclo. Lo ripete fino a quando le condizione (10 elementi) non 
è verificata


 wrote:
...
la domanda è ciclica in qualsiasi ng di qualsiasi linguaggio
la risposta quindi viaggia in automatico!
Solo che non sempre la risposta "operativa" coincide con la risposta
matematica!
Ovvio che te ne può non fregare nulla ed usare una versione
"operativa".
Se vuoi fare una cosa matematica ti scontri con 2 (DUE) problemi:
1) Del pc: i numeri random sono (nei lingauggi standard) PSEUDO-
casuali.C'è un algoritmo che nelle MEDESIME condizioni ti propone i
soliti risultati. Vieppiù: i risultati sono una sequenza grande ma
LIMITATA e RICONOSCIBILE dei numeri rappresentabili.
Quindi va benissimo per simulare il collegamento di client, per la
scopa, la briscola, MENO per calcoli statistici.
Soluzioni attualmente possibili? SW NESSUNA!!! HW una soltanto: esiste
un generatore che utilizza un fotone ed un effetto quantico per cui se
conosci lo spin non conosci la posizione del fotone e viceversa: lo
comnmercializza una ditta americano e non costa neppure tanto....solo
che ho perso il link e non te lo posso fornire! Allo stato delle
tecnologia attuale è l'unico sistema per avere una sequenza di bit
davvero casuale.
2) Un limite dell'algoritmo:
tu vuoi una sequenza di 10 numeri! COME LA VUOI?
Indipendentemente dalle estrazioni...va bene TUTTO quello che ti hanno
detto!
MA
vuoi simulare il lotto? NON VA BENE UN CAZ...ops...NULLA!
Ragiona:
1 tentativo) 90 numeri in un sacco...estrazione random....1 numero
estratto
2 tentativo? 90 numeri in un sacco? NO! 89 in un sacco!!!! se lo fai
su 90 numeri e vuoi calcolare qualcosa di statistico sballa tutto!
Ho fatto a suo tempo un algoritmo che teneva conto di ciò e non è
affatto semplice!
in sintesi:
1)prendi una matrice e riempila random di numeri
2)estrai un numero fra limite min e limite max della matrice
3)cancella il numero dalla matrice e fanne una nuova UGUALE SENZA IL
BUCO del numero estratto
4) ritorna al punto 2 e loop per quanti numeri vuoi estrarre
Vedrai che alla prima estrazione estrai un numero fra 90 numeri poi
fra 89 poi fra 88 e così via...come se fosse il sacco della tombola!
Ovvio che questa cosa(o una cosa simile) la fai solo se sei
interessato ad alcuni tipi di simulazioni (ad esempio super enalotto
per andare sul volgare!) o ad alcune figure statistiche!
In sintesi: avere una sequenza di 10 numeri con 100 tentativi e
diverso assai che averla con 10 tentativi! Sballa tutto in alcuni
ambiti!
Tanto per far riflettere che spesso si usano cose che son più
complesse di un apparentemente semplice System.Rand !!!

 diverso assai che averla con 10 tentativi!
Ma alla fine cosa cambia? Se hai un certo numero si sequenze di 10 
numeri differenti sei in grado di capire quali sono state generate con 
un metodo e quali con un altro? Anche solo di dare una probabilità 
diversa dal 50%?
Se esiste un qualsiasi metodo matematico/statistico che ti permette di 
riconoscerle (anche con approssimazione) va bene quello che dici tu, 
mentre se non esiste è inutile simulare "il sacchetto della tombola". 
Esiste? :-)


 Il 30/08/2010 9.12, Wodka40[Google] ha scritto:
Se simuli un evento negativo che può capitare in 90 tentaivi per te è
uguale simularlo in 900???
Se una simulazione prevede un "mescolamento" ed una generazione
istantanea perchè farla in più ripetuti passaggi?
Se vogliamo volgarizzare
se usiamo una tombola ogni estrazione è un "mondo a sè"...con un mondo
in divenire...90----89---88---87 e così via
Se te sprechi 3 tentativi per fare l'88 colpo sprechi 3 "mondi"...non
è la solita cosa! Anche filosoficamente!
Non sono un matematico e non le ricordo...ma feci una discussione
tanto tempo fà con un matematico e esistono formule matematiche che
tengono conto di cio che impropriamente esprimo!

 wrote:> Il 30/08/2010 9.12, Wodka40[Google] ha scritto:
non so se ho centrato il problema.....sigh avere 5 a metematica al
liceo si fà sentire!
http://it.wikipedia.org/wiki/Disposizione

 tengono conto di cio che impropriamente esprimo!
Mi piacerebbe saperne di più su queste formule...
Il mio ragionamento è semplice. Ammettiamo che io ho 100 sequenze di 10 
numeri, e so a priori che sono state ottenute con due metodi diversi.
50 sequenze sono state ottenute col "metodo della tombola", mentre le 
altre 50 sono state ottenute pescando ogni volta tra tutti i numeri 
disponibili e poi scartando quelli già usciti.
Esiste un sistema matematico qualsiasi che mi permetta di dividere le 
serie in due gruppi di 50 e dire una cosa tipo: ogni serie del primo 
gruppo ha una probabilità del 51% di essere stata generata col metodo 
della tombola.
Se una cosa del genere si può fare (diciamo se c'è un teorema con 
relativa dimostrazione che dice di sì) allora ha senso quello che dici, 
altrimenti non ha senso.
Visto che io sono un chimico e non un matematico, non lo so... se devo 
andare a logica e istinto io direi che non di può fare, ma magari 
sbaglio clamorosamente :-)


 Esiste? :-)
We :)
Credo che Wodka voglia intendere che la casualità del generatore interno 
è predefinita e limitata. Questo è un ossimoro perché un generatore di 
sequenze numeriche che ripeta i propri schemi non si può definire 
casuale: la funzione di randomizzazione ha n combinazioni ed alla n+1 
generazione gli schemi si ripetono.
Anche con pochi numeri la probabilità di incorrere in schemi già 
utilizzati è alta. I simulatori di giochi, per quanto perfetti, non 
riescono ad ottenere risultati statistici di distribuzione che si 
avvicinino a quelli reali.
Se nel caso del solitario di uindos la cosa è ininfluente, in altri 
campi applicativi questo può rappresentare un problema.
Ciao cia`
-- 
-> GbC|
www.gbcdepot.com
www.chiappori.com
 

 
http://it.wikipedia.org/wiki/Disposizione
Va bene, posso sapere quante sono le disposizioni possibili di k 
elementi estratti da un gruppo di n, questo è chiaro. Qui però nulla mi 
dice sul come sono state ottenute queste disposizioni, e ogni 
disposizione ha esattamente la stessa probabilità di tutte le altre.


 è predefinita e limitata.
Questo lo ha dello nel punto 1, e sono perfettamente d'accordo con lui. 
Io però stavo discutendo il punto 2 :-)


 Io però stavo discutendo il punto 2
Cioè, mi sembrava di essere stato chiaro su quale è il punto, ma 
probabilmente non lo sono stato.
Wodka40 dice che non è la stessa cosa ottenere le sequenze con un metodo 
o con un altro. Io dico: se ti do delle sequenze, tu riesci a capire 
quali sono state prodotte con un metodo e quali con l'altro? Se ci 
riesci non è la stessa cosa, se non ci riesci è la stessa cosa e 
l'algoritmo che le ha generate è ininfluente :-)


 l'algoritmo che le ha generate è ininfluente :-)
A me non sembra affatto!
se per ottenere 3 27 44 io lancio 3 volte l'algoritmo o 30 o 300...per
te è uguale?
La sequenza è irriconoscibile...ma a me non sembra affatto uguale il
procedimento per ottenerla!
Poniamo un caso frequente con il solo RAND:
il generatore di numeri estrae:
 il 3
poi il 27....poi il 27....poi il 27....poi il 27....poi il 44
tu sprechi 3 colpi che nella realtà sarebbero invece 3 numeri
lecitamente estratti
In realtà tu fai 6 estrazioni per avere 3 numeri!
A me non sembra uguale....ai guru della matematica concettualizzare!
Ovvio che le probabilità rimandono le medesime (anche se usando rand
bari perchè non hai delle sequenze davvero casuali)...chi ha detto il
contrario?Imho però la statistica cambia ...hai il 50% di errore
nell'algoritmo!alias il 50% del tempo sprecato!

 l'algoritmo che le ha generate è ininfluente :-)
Hoy...
In una quantità sufficentemente ampia di estrazioni è possibile rilevare 
pattern analoghi se non si utilizzano accorgimenti particolari negli 
algoritmi di estrazione. Quindi dovrebbe essere possibile rilevare la 
differenza tra una estrazione e l'altra. Diciamo che si potrebbero 
generare n sequenze fino a trovare quella che si cerca. E siccome il 
generatore non casualizza un bel nulla prima o poi la trovi.
Il problema non è nelle operazioni che si fanno con i numeri generati, 
ma il fatto che la generazione delle sequenze si basa su pattern 
ripetitivi.
Come diceva Wodka tutto va bene per estrarre un nome in una lista, non è 
sufficente per scopi statistici.
-- 
-> GbC|
www.gbcweb.com
www.chiappori.com
 

3 è Rand
= 3 Wodka
Anche se non è verissimo....può accadere che rand per una volta
azzecchi tutti e 3 i numeri diversi!...se aumenti i numeri
estratti.....la probabiltà di coincidenza Wodka=Rand diminuisce e il
limite a cui tende per infinito è Wodka!
:o)

 procedimento per ottenerla!
Non ho detto che il procedimento è uguale, ho detto che secondo me 
(aspetto prove contrarie) i due procedimenti producono risultati 
indistinguibili.
Sei tu che hai detto (estrapolo) "se lo fai su 90 numeri e vuoi 
calcolare qualcosa di statistico sballa tutto!". Io ho chiesto, cosa 
sballa? In entrambi i casi ho una sequenza di numeri che non si ripetono 
e, se come credo, le sequenze non sono riconoscibili, allora i due 
metodi sono equivalenti.


 se mi fornisci anche i tenativi dell'algoritmo si!
Ma a me interessa il risultato che produce. Lo sappiamo che l'algoritmo 
č diverso, non occorre dimostralo quello :-)
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Scarica "OpenOffice.org 3: Soluzioni a raccolta", molto piů di semplici 
FAQ! 
http://it.openoffice.org/doc/manuali/

 wrote:> Il 30/08/2010 10.04, VITRIOL ha scritto:
in pratica caro Vitriol e avventurandosi in visioni poetiche:
RAND fà scomparire la materia Wodka la conserva
Nella realtà nel sacchetto ci sono 90 palline...Wodka per estrarne 90
compie 90 tentativi
RAND in un caso particolare ne fa 90...statisticamente ne fà di più!
E la materia dove finisce? Smaterializzazione? Teletrasporto? o uso
improprio di RAND senza pensare a cosa si vuol fare?
eh eh eh :oD



 in pratica caro Vitriol e avventurandosi in visioni poetiche
A me interessano le cose pratiche :-)
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Scarica "OpenOffice.org 3: Soluzioni a raccolta", molto più di semplici 
FAQ! 
http://it.openoffice.org/doc/manuali/

 è diverso, non occorre dimostralo quello :-)
il risultato deve essre anche finalizzato al problema!
Se simuli qualcosa occhio che con rand gli indici statistici cambiano
perche DOVRESTI tener conto dei tentativi che fai per ottenere quella
sequenza!
un esempio....in una stanza c'è un bimbo con gli occhi uno verde ed
uno azzurro gli altri 9 no!
tu argomenti: 1/10 ha gli occhi così!
Ma sei hai trombato 100 mamme per farne uno così o solo 10 cambia
alquanto l'incidenza di occhi "strani".....(ovvio che tu ed io
preferiremmo trombare 100 mamme!...ma è un altro discorso)
Saluti!

 wrote:
non banalizzando....
è l'approccio sbagliato che fanno molte case farmaceutiche per
propinarci nuovi (costosi) farmaci....
trial su campioni piccoli scartando le "prove" dannose o ininfluenti
Da focus a le Scienze ne parlano tutti i giornali sciiientifici (il
50% e più dei farmaci sono inutili)

 sequenza!
Non ti capisco... coma me ne frega del numero di tentativi? Io voglio 
una sequenza di numeri casuali che non si ripetono, punto. Come la 
ottengo è ininfluente.
Devo estrarre 5 numeri del lotto.
Metodo 1: Li prendo dal sacchetto e ne poso sul tavolo 5.
Metodo 2: Ne tiro fuori uno, scrivo in numero su un foglio, e poi lo 
rimetto nel sacchetto. Ne prendo un altro; se non è uscito lo scrivo sul 
foglio, altrimenti non lo scrivo. Lo rimetto dentro e così via, fino a 
quando non è ho scritti 5 sul foglio.
Che differenza c'è tra le due sequenze estratte? IMHO nessuna, sono 
entrambe valide.
Quale metodo è meglio usare? Se lo devo fare a mano sicuramente il 
metodo 1. Se uso il 2 sono scemo.
Se lo devo fare col PC invece io scelgo il metodo 2, perché è molto più 
semplice da implementare e il PC è veloce.
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Scarica "OpenOffice.org 3: Soluzioni a raccolta", molto più di semplici 
FAQ! 
http://it.openoffice.org/doc/manuali/

 trial su campioni piccoli scartando le "prove" dannose o ininfluenti
Ma che c'entra? :-)
Ti faccio un esempio più appropriato...
Tu sai che il principio attivo di un farmaco è una certa molecola. 
Questa molecola la puoi estrarre da una pianta, oppure la puoi 
sintetizzare il dieci modi diversi partendo da reagenti diversi con 
processi diversi.
Alla fine ottieni sempre la stessa molecola, e non è possibile 
distinguere come è stata prodotta con nessun tipo di prova di 
laboratorio o in vivo. A te cosa te ne frega? Ti farà sempre lo stesso 
effetto qualunque sia stato il procedimento per ottenerla.
Quale procedimento seguire allora? Il più semplice e economico.
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Scarica "OpenOffice.org 3: Soluzioni a raccolta", molto più di semplici 
FAQ! 
http://it.openoffice.org/doc/manuali/

 wrote:
zac
Cambia la statistica!
e di molto
...non hai strategia
...non hai ottimizzazione
provi a caso a risolvere un problema...mentre la realtà non ha caso in
questo frangente: 5 colpi 5 estratti non c'è spazio per l'incertezza
Io moltiplico l'alea per 5 istanti...tu per quanto? Non lo sai ti
affidi ad una black box!Io ho 5 possibilità temporali di
sbagliare...tu manco lo sai!
Certo in un continuum dove il tempo è ininfluente tu semplifichi e
dici "famo finta che sia lo stesso".
Ma se tu devi riempire un camion con varie merci di varie dimensioni
che fai? vai a caso o cerchi una strategia?
Ed anche concettualmente tu che fai?
Ti affidi ad un algoritmo che su 10 numeri può darsi ti faccia
aspettare 5 millisecondi come 2 minuti come infinitamente.
Io invece sono razionalmente nel certo se anche mi proponesse per 10
volte il solito numero uscirebbero 10 numeri diversi.
Più lento su una sequenza ? sicuramente
su 10? si!
su 1.000.000 mmmm si!
su un miliardo? eh beh discutiamone bello
....oltre?   vinco io!
Dovresti cominciare a tenere traccia di quante estrazioni butta
via...per renderti conto dello spreco!

 aspettare 5 millisecondi come 2 minuti come infinitamente.
Stai cambiando rotta. Prima dicevi che il risultato non era equivalente, 
ora che non è ottimizzato.
C'è un abisso tra le due affermazioni :-)


 più semplice da implementare e il PC è veloce.
Mmmm...
Secondo me parti dall'effetto e non dalla causa.
I casi descritti non sono identici, anche se potrebbe sembrarlo.
Caso (1)
Metti la mano e ne prendi 5 uno per uno. Si potrebbe discutere di dove 
stanno i numeri, di come è fatto il bussolotto di quanto è lungo il 
braccio... Ma diciamo che la casualità è rispettata.
Caso (2)
Come fai?
Perché il 'come' cambia tutto.
Per ogni randomize n generi una sequenza che è identica per ogni n 
utilizzato, quindi rnd ti riporta la stessa sequenza di numeri. Che fai? 
Generi n in modo casuale? :D Mi pare di vedere la coda del gatto che 
sanguina a forza di mordersela... Allora, come da manuale, usi la 
funzione timer o qualche pastrocchietto per randomizzare le sequenze... 
Ed ecco che la quantità di casi è finita e puoi incorrere in doppioni, 
cioè sequenze identiche, che è quello che non vuoi.
Praticamente nel caso (2) ad ogni randomize è come se mettessi lo stesso 
bussolotto nella stessa posizione, con lo stesso braccio che prende la 
stessa pallina col numero. Le combinazioni sono tante, ma non infinite 
come nel caso (1). Da qui la necessità di generare i numeri in modo più 
rigoroso ed il proliferare di discussioni come questa ed algoritmi più o 
meno potenti per la generazione di numeri random.
Capisci? Non è questione di 'funziona o non funziona' ma è una faccenda 
puramente concettuale.
Nel 99% delle richieste che possono capitarci il randomize timer è 
assolutamente sufficente.
Se non ricordo male esistono dei servizi web che forniscono numeri 
casuali proprio per superare questo problema.
Ciao cia`
-- 
-> GbC|
www.gbcweb.com
www.chiappori.com
 

 assolutamente sufficente.
Appunto, non stiamo discutendo sulla qualità dei generatori 
pseudocasuali, facciamo finta che siano casuali davvero. Stiamo 
discutendo sulla equivalenza di due algoritmi, è un esperimento concettuale.


 Il 30/08/2010 12.06, Wodka40[Google] ha scritto:
siccome c'ho anche altro da fà....da qui a domani butto 2 righe di
codice e vediamo un po!

 discutendo sulla equivalenza di due algoritmi, è un esperimento concettuale.
se fai finta che estrarre un numero e rimetterlo nel bussolotto, anche
per 100 1000 volte, finchè non ne hai 5 diversi  .....è la solita cosa
che estrarre 5 numeri ed averli subito diversi....
MI CHETO...e permettimi allibisco!
...se sostieni questo...parliamo di cose diverse...e (almeno io) mi
cheto!
Perchè di questo (almeno io) ragiono!

Esperimento pratico. Usando l'algoritmo che ho postato ho fatto 5 serie 
di 1000 estrazioni ognuna, e per ogni serie di 1000 estrazioni ho 
calcolato il numero di cicli medio necessario per estrarre 10 numeri 
"tirando a caso" e escludendo a posteriori quelli già usciti.
Questi sono i risultati:
29,42	29,32	29,07	29,41	29,41
Diciamo che in un tempo infinito non è possibile escludere che possa 
arrivare a un certo punto la necessità di un numero di cicli infinito, 
ma nella pratica per estrarre 10 numeri sono necessari poco più di 29 
tentativi :-)
Qui i dati grezzi (per motivi ideologici solo in formato ODS :-P):
http://cid-fb2e35f564c66807.office.live.com/self.aspx/Files/Cicli.ods


 MI CHETO...e permettimi allibisco!
Mi dici perché dovrebbe essere diverso? Stimo sempre parlando di 
risultato finale.
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Scarica "OpenOffice.org 3: Soluzioni a raccolta", molto piů di semplici 
FAQ! 
http://it.openoffice.org/doc/manuali/

 
Scusate, cerco di mettere ordine.
Wodka e GBC hanno ragione in parte nel senso che, avendo un generatore
pseudo-casuale, con schemi conosciuti e ripetuti all'infinito, ci sono
una serie di applicazioni che non possono andar bene:
1° Esempio: devo estrarre 20 numeri da un sacchetto di 50 numeri. Le
prove che il generatore dovrà fare sono molto probabilmente > 20.
Inoltre, poichè i numeri non sono realmente casuali, ci saranno delle
combinazioni di numeri più probabili rispetto ad altre, e questo cambia
di molto su simulazioni di estrazioni numeriche rispetto alla realtà.
Soluzione: L'estrazione da un sacchetto "virtuale" invece funzionerebbe
sicuramente in 20 passaggi. Il sacchetto virtuale potrebbe essere un
array riempito dei numeri che ci servono.
2° Esempio: generazione di una chiave di sicurezza casuale. Alcuni
software (TrueCrypt, PGP ecc...) devono generare una chiave di X cifre
casuali. Ora, se noi andiamo a criptare dei dati con una chiave generata
usando RND, sappiamo che tale chiave non è per nulla sicura.
Un hacker potrebbe semplicemente avere un dizionario di
N-milioni/miliardi di chiavi corrispondenti alle esatte combinazioni
conosciute del generatore. In tal caso il tempo di decodifica di un
certo dato passerebbe da centinaia di migliaia di anni ad una settimana.
Soluzione economica: E' per questo che per aumentare la sicurezza,
questi programmi prendono anche in considerazione i movimenti del mouse
che l'utente deve effettuare (su richiesta del programma) mentre viene
generata la chiave.
Nicola

 una serie di applicazioni che non possono andar bene
Aridaje... è dura ragionare con gli informatici e con gli ingegneri... :-P


 
Ma tu poni di far finta che i numeri siano davvero casuali, invece ciò
non è così, ed io ti ho portato due esempi pratici e reali di come porre
delle premesse sbagliate possa portare ad avere problemi, anche grossi.
Poi, come dice il buon GBC, nel 99% (ma io ti dico il 99,99%) dei casi
non ci poniamo il problema. Però è utile saperlo.
Nicola

 non è così
La mia risposta originale da cui è disceso tutto era rivolta al primo di 
messaggio di Wodka40, che era diviso in due punti ben distinti.
Al primo punto poneva il problema della pseudocasualità, e questo mi 
stava più che bene.
Al secondo punto diceva invece che usare il "metodo della esclusione a 
posteriori" era un errore concettuale, e avrebbe prodotto risultati non 
validi statisticamente. Bisognava invece usare il "metodo della 
tombola", che ben simulava il caso. Non si faceva cenno alla 
pseudocasualità, già nominata prima. Cito:
--------
Un limite dell'algoritmo:
tu vuoi una sequenza di 10 numeri! COME LA VUOI?
Indipendentemente dalle estrazioni...va bene TUTTO quello che ti hanno
detto!
MA
vuoi simulare il lotto? NON VA BENE UN CAZ...ops...NULLA!
---------
se lo fai su 90 numeri e vuoi calcolare qualcosa di statistico sballa tutto!
----------
In sintesi: avere una sequenza di 10 numeri con 100 tentativi e
diverso assai che averla con 10 tentativi! Sballa tutto in alcuni
ambiti!
-----------
Ecco, è questo che io contestavo e chiedevo eventuali informazioni visto 
che non sono un matematico. Queste informazioni non sono arrivate, e io 
rimango convinto che il "metodo della esclusione a posteriori" e quello 
"della tombola" (nomi miei perché, essendo ignorante, non so se hanno un 
nome) sono equivalenti e producono risultati indistinguibili.
Su una cosa mi trovo d'accordo, cioè che il metodo della esclusione può 
portare a un numero di cicli illimitato (per assurdo anche infinito), ma 
nel mondo reale non penso proprio che possa essere un problema. Penso 
che sia più probabile che una fluttuazione quantistica materializzi nel 
mio letto una copia perfetta di Jessica Alba :-P


 ha scritto nel messaggio
news:bec437e3-fd83-4c3d...@t2g2000yqe.googlegroups.com...

Mi inserisco provando a fare ulteriore chiarezza (non è detto che ci riesca,
eh!).
Ragioniamo in termini teorici, considerando il generatore di numeri random
veramente casuale.
I due algoritmi di estrazione, perfettamente descritti da Wodka, sono
effettivamente la modellazione di 2 diversi "processi stocastici" (spero di
non aver cannato il termine).
Ma (ed è questo che secondo me intende Vitriol) entrambi danno origine alla
stessa distribuzione di probabilità delle possibili sequenze estratte.
Infatti non sembra esistere alcuna ragione per cui una determinata sequenza
possa risultare più frequente (più probabile) utilizzando un algoritmo
piuttosto che un altro.
Di questo assunto probabilmente si riesce a dare una dimostrazione
matematica (e nemmeno troppo complicata, direi ad intuito).
Bye
Raf 

 stessa distribuzione di probabilità delle possibili sequenze estratte.
e...satto! ;-)


 fra 89 poi fra 88 e così via...come se fosse il sacco della tombola!
Tempo fa ho fatto una cosa simile... proprio con i 90 numeri.
Invece di usare una matrice da riempire random, ho usato qualcosa di
molto simile... ho usato una "collection" riempiendola di numeri da 1 a
90 ma inserendoli casualmente all'inizio o alla fine dell'ultimo numero,
in questo modo avevo tutti i numeri ma in modo casuale all'interno del
sacchetto.
Facendo l'estrazione poi estraevo casualmente vale che corrispondeva
all'indice del numero del sacchetto... ovviamente da 1 a n=numero di
"palline" disponibili
Ovviamente prima di ogni generazione del numero casuale ho sempre
eseguito il comando "Randomize" per inizializzare generatori di semi con
il Timer... lo so sempre "pseudocasuale" ma sempre meglio di nulla.
-- 
Daniele Pinna  (leva oops. per rispondere)
Utente Skype: dapinna
Sito Web: 
http://www.dapinna.com
	<-- Nuovo Sito... ora in Joomla
Il Docfa in Pillole:  
http://www.ildocfainpillole.it
-----
Now Powered by Linux KUbuntu 10.04 "Lucid Lynx"

 sacchetto.
Non mi è chiaro, vuoi dire che in pratica ciascun numero da 1 a 90 viene 
inserito in testa o in coda alla collection a seconda del numero random 
estratto?
O è diverso? 

 wrote:
scusa eh
faccio 5 tentativi per estrarre 5 numeri
La probabilità è salva se sono 1/90 1/89 1/88 1/87 1/86 1/85 tali
rimangono!
L'indice statistico no!
io ci metto un errore di generazione dello 0%...tu non lo sai!
io ci metto un tempo "noto"...tu non lo sai!
Ora visto che sei chimico quindi sciiiiienziato nulla è da aborrire
più nella scienza che l'intervento divino: perchè non spiega nulla e
fai un atto di fede!
Quando produci qualcosa non è importante SOLO quello che produci ma
anche COME lo produci. Spesso errori grossolani (per fare prima) si
sono propagati per secoli inducendo teorie errate!
cmq
lo ripeto...
se mi dai anche il numero di tenativi del generatore sò riconoscere
una sequenza mia da una tua (con buona approssimazione
STATISTICA)...ma NON INFALLIBILMENTE!...non sono Dio!
:)


No... faccio un ciclo for da 1 a 90, lineare e non casuale.
per ogni numero da inserire nella collection genero un numero casuale da
1 a 2. Se esce 1 lo metto prima, se esce 2 lo metto dopo.
In questo modo ho i 90 numeri nella collection in modo abbastanza mischiato.
A questo punto inizio l'estrazione.
Ho dimenticato di dire prima che, dopo aver estratto un numero da 1 "n"
(dove "n" è il numero dei numeri rimasti nel sacchetto"), uso quel
numero come *indice* della collection per:
- leggere il numero associato a quell'indice
- cancellare quell'indice dal sacchetto
la prima estrazione avviene su 90 numeri
la seconda su 89
la terza su 88
etc.
In questo modo è più simile a quella reale.
Tra le altre cose, dato che volevo un pò più di casualità (ma so
benissimo che non serve a nulla), facevo in modo che prima di ogni
estrazione, non solo venisse reinizializzato il seme, ma l'estrazione di
ogni numero (e la suddetta reinizializzazione) doveva essere preceduta
da una pausa casuale da 1 a 10 secondi.
In pratica è imprevedibile quando l'inizializzazione dei numeri random
(che viene fatta usando il contenuto del valore "timer") è ancora più
causale.


 causale.
Ho capito: in pratica crei una collection con i numeri in disordine e poi li 
peschi a caso... per "aggiungere casualità".
 

 STATISTICA)...ma NON INFALLIBILMENTE!...non sono Dio!
Ma il numero di tentativi non fa parte del risultato. E' come se ti 
dicessi "se mi dai il codice che hai usato io so dirti il metodo che hai 
usato". Grazie tante :-)
Io so solo che le sequenze generate dal "mio" metodo fino a prova 
contraria sono buone quanto le sequenze generate dal "tuo". Hai una 
dimostrazione che non è così? Se ce l'hai ti dico hai ragione, l'ho 
detto dall'inizio che aspettavo informazioni in proposito.
Poi non è che devo per forza fare il difensore del metodo a esclusione, 
è solo la cosa più semplice che mi è venuta in mente :-)


 29,42	29,32	29,07	29,41	29,41
Qualche curiosità. Su 5000 estrazioni il numero minimo di tentativi è 
stato 10 (il minimo possibile) verificatosi 3 volte. Il massimo 94 :-)
La media già detta, 29.3


 wrote:
Credo di poter mettere un punto fermo:
1) le sequenze tue sono buone come le mie...ma tu valuti il
RISULTATO...io valuto il metodo per generare il risultato!
2)Le tue sequenze se mi dai il numero di tentativi sono in ottima
approssimazione riconoscibili dalle mie
3) Ho buttato giu in po di codice...si può sempre opinare ed obiettare
il metodo scelto e quindi tutto è migliorabile.
Il metodo "brute force" però da miei test è da pochi a svariati ordini
di grandezza PIU' LENTO! Quindi non conveniente!
se ti interessa metto on line il codice per dimostarlo

 se ti interessa metto on line il codice per dimostarlo
Se lo hai già fatto certo, mi interessa. Però non cambia di una virgola 
quello si è detto fino ad ora, visto che si parlava di validità 
statistica delle estrazioni (quindi dei risultati) non di efficienza 
prestazionale dell'algoritmo.


 solo la cosa più semplice che mi è venuta in mente :-)
Solo per la cronaca, il metodo computazionalmente ottimale per produrre
"rimescolamenti casuali" a partire da un insieme di numeri dovrebbe essere
questo:
http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle
Ciao
Raf
 

 siamo nel NG più adatto...
Ormai siamo in ballo... se hai voglia e tempo potrebbe essere istruttivo.


 wrote:
prendete un qualsiasi VB.net
prendete una winForm
Schiaffateci 3 textbox la prima multiline
aggiungete una listbox
aggiungete un button che chiamerete Estrai
Copiate e incollate questo codice
'INIZIO
Imports System.Collections.Generic
Imports System.Text
Public Class Form1
    Dim sacco As New List(Of Integer)
    Dim NumeriDesiderati As Integer = 6
    Dim NumeriSacco As Integer = 90
    Private Sub Estrai_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Estrai.Click
        Dim t(), v() As Integer
        'pulizie di ferragosto!!!
        TextBox1.Text = ""
        TextBox2.Text = ""
        TextBox3.Text = ""
        GeneraSacco(NumeriSacco)
        t = EstraiSacco(NumeriSacco, NumeriDesiderati)
        v = EstraiRandom(NumeriSacco, NumeriDesiderati)
        'stampa
        For Each h As Integer In t
            TextBox2.Text += (h.ToString + " - ")
        Next
        For Each h As Integer In v
            TextBox3.Text += (h.ToString + " - ")
        Next
    End Sub
    Private Sub GeneraSacco(ByVal elementiSacco As Integer)
        sacco.Clear()
        For n = 1 To elementiSacco
            sacco.Add(n)
            Me.TextBox1.Text += (n.ToString + " ")
        Next
    End Sub
    Private Function EstraiSacco(ByVal NumeriNelSacco As Integer,
ByVal NumeridaEstrarre As Integer) As Integer()
        'MISURA PRESTAZIONI
        Dim t As New Stopwatch
        t.Start()
        '****
        Dim estrazione As New System.Random()
        Dim valore
        Dim limite As Integer
        limite = NumeriNelSacco + 1
        Dim estratto As Integer = 0
        Dim Estratti(NumeridaEstrarre - 1) As Integer
        Do
            valore = (estrazione.Next(1, limite)) - 1
            Estratti(estratto) = sacco(valore)
            sacco.RemoveAt(valore)
            limite -= 1
            estratto += 1
        Loop Until estratto = NumeridaEstrarre
        'STAMPA PRESTAZIONI
        t.Stop()
        ListBox1.Items.Add("Sacco: " + t.ElapsedTicks.ToString)
        Return Estratti
    End Function
    Private Function EstraiRandom(ByVal NumeriNelSacco As Integer,
ByVal NumeriDaEstrarre As Integer) As Integer()
        'MISURA PRESTAZIONI
        Dim t As New Stopwatch
        t.Start()
        '****
        Dim estrazione As New System.Random()
        Dim Estratti(NumeriDaEstrarre - 1) As Integer
        Dim conta As Integer = 0
        Dim valore As Integer
        Dim limitesup As Integer = NumeriNelSacco + 1
        Do
            valore = estrazione.Next(1, limitesup)
            If Not Estratti.Contains(valore) Then
                Estratti(conta) = valore
                conta += 1
            End If
        Loop Until conta = NumeriDaEstrarre
        'STAMPA PRESTAZIONI
        t.Stop()
        ListBox1.Items.Add("RANDOM: " + t.ElapsedTicks.ToString)
         Return Estratti
    End Function
End Class
'FINE
Tengo a precisare che sono tutti integer perchè una CPU non a 64 bit
ottimizza per integer e non per long (almeno a me hanno insegnato
così)
Il conteggio dei tick avviene SOLO nell'algoritmo e non negli orpelli
di sovrastruttura per dare un minimo di interfaccia.
Ho parametrizzato il più possibile
Risultati
Sacco è l'algoritmo della tombola ...Random è un RAND!
PER SEQUENZA DI 6 NUMERI (in ticks)
Sacco: 324
RANDOM: 7333 (qui probabilmente non lo considerare...forse crea ed
inizializza qualche array...o è un errore mio boh!)
Sacco: 82
RANDOM: 166
Sacco: 90
RANDOM: 131
Sacco: 89
RANDOM: 217
Sacco: 92
RANDOM: 191
Sacco: 77
RANDOM: 139
Sacco: 76
RANDOM: 139
Sacco: 78
RANDOM: 150
MA se raddoppi e cerchi sequenze di 12 numeri ...va che roba...
Sacco: 304
RANDOM: 3334
Sacco: 96
RANDOM: 277
Sacco: 80
RANDOM: 206
Sacco: 154
RANDOM: 319
Sacco: 79
RANDOM: 192
Sacco: 80
RANDOM: 183
Sacco: 80
RANDOM: 191
Sacco: 78
RANDOM: 204
probabilmente sarà tutto ottimizzabile...se vuoi generare byte ad
esempio rand di net ha già una funzione precostituita...ma se vuoi
degli integer anche secondo msdn devi fare estrazioni ripetute e
controllare che non sià già uscito
...a questo punto con un po di generics.....mi sembra che il lume
valga la candela!
p.s.
per copiare dalla listbox alla clipboard ho usato:
'inizio
    Private Sub ListBox1_KeyUp(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles ListBox1.KeyUp
        If e.KeyCode = Keys.Insert Then
            My.Computer.Clipboard.Clear()
            For Each s As String In Me.ListBox1.Items
 
My.Computer.Clipboard.SetText(My.Computer.Clipboard.GetText &
vbNewLine & s)
            Next
        End If
    End Sub
'fine
l'ho associato al tasto insert!
p.p.s.
Potevo tracciare con un else quanti tentativi a vuoto faceva il metodo
random. Ma avrebbe inevitabilmente appesantito l'algoritmo rendendolo
ancora più lento! Siccome non voglio sparare sulla croce rossa non
l'ho fatto!
Ultimate p.p.p.s
Spero di aver dimostrato come un metodo brute force giunga al medesimo
risultato...ma non ottimizzando un piffero!
Se poi volete usare un "brute force" per craccare un file RSA...fate
voi!
Sempre e soltanto per dare i miei 2cents (anzi 1 che c'è crisi) alla
discussione!....e posso anche sbagliarmi!

 discussione!
Bene, grazie del contributo. Alla fine mi pare che questo thread sia 
diventato la riposta piů esaustiva a questa questione, che si ripresenta 
ciclicamente :-)
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Scarica "OpenOffice.org 3: Soluzioni a raccolta", molto piů di semplici 
FAQ! 
http://it.openoffice.org/doc/manuali/

 wrote:
zac
mi interessa perchè per me...che non ho fatto statistica....
PROBLEMA: estrarre 5 numeri diversi tra n numeri
RISOLUZIONE:
fare 10 estrazioni per trovare 5 numeri diversi
OPPURE
farne 5 per trovare 5 numeri diversi
per me è diverso....cosa non te lo sò dire...sicuramente il tempo per
arrivare alla soluzione! La probabilità rimarra la solita....ma
Vitriol è sempre a generare...ed io sono già in ricevitoria!!! E se
sulla schedina ha appuntato anche le iterazioni per generarla so
riconoscere la sua sequenza da una mia....con buona approssimazione!

 ma Vitriol è sempre a generare...ed io sono già in ricevitoria
ROTFL
Il fatto è che io non ho mai giocato una schedina, e intendo continuare 
così. Come diceva Cavour, il gioco d'azzardo è la tassa sugli imbecilli :-)


 inizializza qualche array...o è un errore mio boh!)
zac
O forse consideralo davvero!...qui ci vuole un MVP(Maurooooooo!!!!) e
forse un altro "3ad"...
ho letto su qualche "Ugidotnet"...che i generics vengono ottimizzati e
compilati in maniera enormemente più efficente di un "volgare" array o
matrice che dir si voglia!

 così. Come diceva Cavour, il gioco d'azzardo è la tassa sugli imbecilli :-)
Vabbè
Chi visse sperando ...morì cacand<biiiiip>
Ma è anche stato detto:
Ma la vita è un sogno o i sogni aiutano a vivere meglio? (G. Marzullo)
LOL!

 Ormai siamo in ballo... se hai voglia e tempo potrebbe essere istruttivo.
Disclaimer: mi scuso coi matematici di professione (o comunque con quelli 
che hanno la materia più fresca di me) per eventuali imprecisioni 
notazionali.
Problema: da un insieme A = {a[1], a[2], ..., a[n]} si deve estrarre un 
sottoinsieme X di m<=n elementi {x[1],...,x[m]}
Metodo 1 (alias "sacchetto" alias "wodka")
- per determinare ciascun elemento del sottoinsieme, si estrae casualmente 
un elemento da A rimuovendolo da esso ed inserendolo nel sottoinsieme 
parziale
Metodo 2 (alias "foglietto" alias "vitriol")
- per determinare ciascun elemento del sottoinsieme, si estrae casualmente 
un elemento da A senza rimuoverlo, e lo si aggiunge al sottoinsieme parziale 
solo se non ancora presente in esso, ripetendo eventualmente l'estrazione 
per un numero indefinito di tentativi
Perché i due metodi siano statisticamente equivalenti occorre che la 
probabilità di ciascuna sequenza X sia uguale in entrambi i casi.
In generale P(X) = probabilità di estrarre una certa sequenza 
X={x[1],...,x[m]}
Si ha P(X) = P1 * P2 * ... * Pm
dove con Pk in generale indico la probabilità che il valore della k-esima 
estrazione sia x[k].
A questo punto è sufficiente dimostrare che Pk sia lo stesso nei due casi.
Con il metodo 1 è facile vedere che P1=1/n, P2=1/(n-1), P3=1/(n-2),...
In generale Pk=1/(n-k+1) visto che ad ogni estrazione il numero di 
possibilità decresce di 1.
Col metodo 2 la cosa è leggermente più complicata, perché un certo elemento 
può venire estratto anche utilizzando più tentativi, per cui le probabilità 
si compongono.
Pk = P(estrarre x[k] al 1° tentativo)
    + P(estrarre x[k] al 2° tentativo) * P(estrarre un numero già in X al 1° 
tentativo)
    + P(estrarre x[k] al 3° tentativo) * P(estrarre numeri già in X al 1° e 
al 2° tentativo) + ...
Dato che la probabilità di estrarre x[k] è sempre 1/n, qualunque sia il 
numero di tentativi che occorrono, e che invece la probabilità di estrarre 
un numero già presente nella sequenza parziale {x[1],...,x[k-1]} è (k-1)/n 
elevato al numero di tentativi successivi, si ha:
Pk = 1/n + 1/n * (k-1)/n + 1/n * [(k-1)/n]² + 1/n * [(k-1)/n]³ + ...
il cui valore è 1/n * la somma di una serie geometrica di ragione (k-1)/n 
(che quindi la fa convergere essendo strettamente <1)
Pk = 1/n * (∑i=0..∞ [(k-1)/n]^i) = 1/n * (1/(1-(k-1)/n))
e quindi
Pk = 1/(n-k+1) come nel caso precedente.
Voilà!
Ciao
Raf
 

 Ciao
Ma non avevi meglio di nulla da fare? :))

 notazionali.
Grazie!


"Andrea [Work]" <andrea.isw...@gmail.invalid> ha scritto nel 
messaggio news:mothkd9qiz9p.1l641an5ad7ld$.dlg@40tude.net...

Haha... in effetti... però mi intrigava parecchio la cosa!
Ciao
Raf 

 Ma non avevi meglio di nulla da fare?
Perché? Tanto di capello. E' sempre un investimento per tutti imparare 
qualcosa, e se riesci a formalizzarlo personalmente è pure una 
soddisfazione personale.


 soddisfazione personale.
Non hai quotato le faccine

 Non hai quotato le faccine
Concorso di colpa col metodo di quote della selezione di Thunderbird :-)


 (che quindi la fa convergere essendo strettamente <1)
zac
ma che può anche non convergere...odio queste cose da matematici!
Se la levi dal sacchetto...sei sicuro che non la riprendi!
Se ce la lasci in barba (anzi IN VIRTU') della probabilità e del fatto
che i numeri non hanno memoria può uscire il solito numero per un
mese!
Mi sembra di capire che in un numero sufficientemente (congruo?
boh)alto di estrazioni....si equivalgono i risultati.
Ma se non ho tutto questo tempo?
te la "servo" da un altro punto di vista
...se i 2 algoritmi girano su 2 core diversi ed ad un certo punto
devono unire i risultati...tu indifferentemente usi l'uno per l'altro?
Il rafunk che conosco dal ng ero sicuro mi rispondesse di no...ma ora
non lo sono più! ghghgh! :P
OVVIO che la probabilità è rispettata....
ma la statistica mi dice che per trovare 6 numeri diversi ho fatto 70
estrazioni (ad esempio)....mentre l'omino del superenalotto ha
soltanto schiacciato per 6 volte un bottone!
Conterà qualcosa?Sarà un campanello che sto facendo una "simulazione"
palesemente errata???
Se mi danno un problema....estrare una sequenza di numeri...perchè
devo usare metodi ridondanti "brute-force"?Anzi "brutal-force"!...che
poi non sono nemmeno tanto "force" ???

 poi non sono nemmeno tanto "force" ???
<maligno mode="on">
Risposta del 90% dei partecipanti al NG:
"Perchè su San Google c'è il codice con RAND e il copia ed incolla sò
farlo funzionare bene!"
</maligno>
eh eh eh eh!

 poi li peschi a caso... per "aggiungere casualità".
Esatto :-)
-- 
Daniele Pinna
DAPINNA.COM
(leva oops per rispondere)
www.dapinna.com
www.ildocfainpillole.it

 poi non sono nemmeno tanto "force" ???
Non posso che darti pienamente ragione.
Se dovessi scegliere un algoritmo performante di sicuro non opterei per uno 
che ha una minima probabilità di non terminare (o meglio, di metterci un 
tempo spropositato, perché termina di sicuro in virtù del fatto che il 
generatore è pseudo-casuale).
Ad esempio l'algoritmo di Fisher-Yates:
http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle
Ciao!
Raf 

 Concorso di colpa col metodo di quote della selezione di Thunderbird :-)
Usa un news reader serio tipo il mio :)

Vecchio vb6
Avendo n=10 arr(10)=numeri da 1 a 10, con 10 estrazioni si ha la serie.
    Do While n > 0
        t = Int(n * Rnd + 1)
        List1.AddItem arrN(t)
        If t <> n Then
            arrN(t) = arrN(n)
        End If
        n = n - 1
    Loop
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/


boh...a parte la sostituzione
arrN(t) = arrN(n) che è tutto fuorchè random
ho provato a farlo per vb.net...e mettere un console.writeline...
simula delle casualità uguali
prova a mettere t= qualche numero...a me escono sequenze con 2 numeri
uguali!
Rimango della mia idea..."togliere la pallina" è la soluzione
migliore!...e anche abbastanza veloce!

    Loop
Manca il   Randomize  che resetta la generazione
pseudocasuale 


Ma questa routine toglie la pallina!
se per esempio il primo numero estratto fosse t=3
utilizzo il numero contenuto in arrN(3)
copio in arrN(3) l'ultimo degli array arrN(10)
diminuisco n di uno, per cui arrN(10) dove ora c'è il numero appena
estratto non sarà più considerato perchè la prossima estrazione sarà tra
1 e 9.
E così via.


 Il 02 Set 2010, 09:43, "Wodka40[Google]"
BOH!
prova a mettere t=4
...perchè mi vengono 2 numeri uguali?

 ha scritto nel messaggio 
news:b8dfa88e-a9e8-4cf3...@l6g2000yqb.googlegroups.com...

Perchè manca l'istruzione RANDOMIZE 

 Perchè manca l'istruzione RANDOMIZE
NO.....leva RAND e metti ad esempio t=4...può succedere che venga
fuori (non è impossibile)....a me escono 2 numeri uguali...
e ciò basta a confutare l'esattezza (non puoi estrarre un numero che
non esiste più nel sacchetto)
è sicuramente un errore di scrittura ....mio forse.....
ma concettualmente rimango della mia idea: io lancio una freccetta su
un piano che gira....perchè poi tipo gioco dell'oca devo saltare ad
una casella?
Ma sono sofismi....

 ha scritto nel messaggio 
news:0fa74e1d-ee93-4200...@f42g2000yqn.googlegroups.com...




Dim  controllo(10) as integer
 dim flag,numero as integer
 flag=0
 do
            Randomize()
            numero = Int((10) * Rnd()    ' numero a caso
            if controllo(numero)=0 then
             controllo(numero)=1
             flag=flag+1
           list1.additem(numero)
            end if
             if flag = 10 then exit loop   ' se sono usciti tutti e 10 esce
 loop

 ha scritto nel uff....ma perchè non leggete TUTTA la discussione???
Mi hai fatto prendere excel e dargli di VBA
Sub Pulsante1_Click()
 Dim controllo(10) As Integer
 Dim flag As Integer
 Dim numero As Integer
 Dim genera As Integer
 genera = 0
 flag = 0
 Debug.Print "START-----------------------------"
 Do
Randomize
            numero = Int((10) * Rnd())   ' numero a caso
            genera = genera + 1
            If controllo(numero) = 0 Then
             controllo(numero) = 1
             flag = flag + 1
             Debug.Print numero
            End If
               If flag = 10 Then Exit Do  ' se sono usciti tutti e 10
esce
  Loop
Debug.Print "Usato: " + CStr(genera) + " RND "
Debug.Print "STOP-----------------------------"
End Sub
Vai e medita!.....TUTTA la discussione NON è su questo!
io faccio 5 colpi e ho 5 numeri diversi
lo script di sopra almeno 2/3 volte tanto come tentativi!
report:
START-----------------------------
 5
 9
 1
 4
 2
 7
 3
 6
 0
 8
Usato: 26 RND
STOP-----------------------------
START-----------------------------
 3
 9
 5
 0
 2
 6
 8
 7
 4
 1
Usato: 17 RND
STOP-----------------------------
START-----------------------------
 9
 2
 3
 1
 6
 8
 4
 7
 5
 0
Usato: 20 RND
STOP-
Ripeto.....astenetevi se non avete capito il senso della
discussione...create altra confusione agli inesperti!

 perchè non leggete TUTTA la discussione???
<Mi hai fatto prendere excel e dargli di VBA
<Sub Pulsante1_Click()
 <Debug.Print "Usato: " + CStr(genera) + " RND "
<Debug.Print "STOP-----------------------------"
<End Sub
<Vai e medita!.....TUTTA la discussione NON è su questo!
<io faccio 5 colpi e ho 5 numeri diversi
<lo script di sopra almeno 2/3 volte tanto come tentativi!
Ma che devo meditare...?
Andrea mica ha chiesto una ottimizzazione del LOOP
Ha chiesto :
1)Devo generare una sequenza di numeri in modo casuale da 1 a 10 ma senza 
che
questi vengano ripetuti.
2)Vorrei utilizzare una sola variabile che cambia valore (da 1 a 10) dopo
averla utilizzata.
Al massimo la differenza sta nel fatto che la variabile viene utilizzata
come Booleana.....
<Ripeto.....astenetevi se non avete capito il senso della
<discussione...create altra confusione agli inesperti!
Mi scusi ...professsore....  io volevo solo dare il mio contributo


Perchè se tu lasci fare alla routine, dopo la prima estrazione con n = 4
dove t = Int(n * Rnd + 1) da come
risultato 4, il numero massimo che potrà essere estratto è 3 e non ci
sarà nessuna ripetizione.
Se tu lasci sempre t=4 è chiaro che ad un certo punto c'è la ripetizione,
in questo caso l'ottava cifra
estratta è uguale alla precedente.


 ha

se per 10 volte esce 4?
L'algoritmo ha un buco!
Può uscire per 10 volte 4?...và a chiederlo a chi gioca alla roulette!
;)