Newsgroup: it.comp.lang.visual-basic
Titolo: randomize - tombola (visto che il periodo e quello giusto :-D )

Ciao a tutti!!
intanto BUON NATALE!!
e visto che siamo in tema ..........per il periodo di natale voglio fare una
tombola "casalinga" automatica (e magari con voce)
premetto che (purtroppo) conosco ancora poco VB. Ho provato a fare varie
ricerche su intenet ma con scarsi risultati.
Forse pechè non utilizzavo le parole giuste per la ricerca.
allora:
mi sono gia creato tabellone con numeri ed ecc....
per eseguire l'estrazione automatica ho utilizzato il metodo Randomize e
cioè:
esempio:
private function prova()
randomize timer
prova = int((rnd * 90)+1)
end function
text1.text = prova
il problema (come forse avete già immaginato) e che i numeri vengono
ripetuti spesso prima che venga completato il ciclo da 1 a 90.
Qualcuno a qualche idea da darmi su come risolvere il problema per i
ripetuti? o qualche parola chiave di ricerca o indirizzo internet??
Siate buoni! :-(   E' natale! aiutatemi.....
grazie di cuore
saluti
antonio

 ripetuti? o qualche parola chiave di ricerca o indirizzo internet??
Ma senza conoscere se cè qualche funzioncina per farlo potersti mettere
i numeri già estratti in un vettore, e controllarli prima di sbatterli a
video...
MIk

 ripetuti? o qualche parola chiave di ricerca o indirizzo internet??
Un array di boolean con 90 elementi da controllare prima di rendere il
numero "definitivo".
Nel caso il numero risulti già uscito ripeti l'esteazione.
private function prova() as integer
static bUsciti (0 to 90) as boolean
dim nTemp as integer
do
    randomize timer
    nTemp = int((rnd * 90)+1)
    if bUsciti(Ntemp) = false then
       bUsciti(Ntem)=true
        Prova=nTemp
        exit do
    end if
loop
end function
Chiedo venia per le imprecisioni ma è solo un po' di righe buttate giù a
memo fuori dall'ide senza l'intellisense....
ciao
-- 
Le persone non sono il proprio comportamento: devi sempre andare oltre,
essere flessibile, capire il punto di vista degli altri, interpretarne i
comportamenti ed intuirne le esigenze.
Per rispondere in privato elimina
dall'indirizzo "togliquesto"
MasterDavidex
David Ruscelli

 ripetuti? o qualche parola chiave di ricerca o indirizzo internet??
metti 90 numeri in un vettore, anche in fila, poi applichi l'algoritmo by
termopilucco:
http://makeashorterlink.com/?B2E413FD6
--
Salutoni
Sergio
per rispondere... togli il group dall'indirizzo

Uhao !!! :oD   cavoli ragazzi!!!
Grazie Millissime per le vostre veloci ed esaurienti risposte !!
Lo sapevo che potevo contare su di voi !!!
Grazie di nuovo infinite e vi rinnovo delle splendide e serene feste !! (non
come me che lavoro :'(   uhaaa.. )
Saluti
Antonio

 ripetuti? o qualche parola chiave di ricerca o indirizzo internet??
Se usi l'algoritmo "riprova sairai più fortunato" potresti cadere in un loop
teoricamente infinito, o comunque molto lungo (su 90 numeri forse no, ma
teoricamente...)
Se vai su groups.google e cerchi "rnd algoritmo ripetizioni" troverai
parecchi spunti interessanti.
Ciao
--
Math Parser : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

 Ciao
Ok, grazie ;-) stamane ci provo.... comqunue il problema del Loop lo risolvo
mettendogli un controllino.... è cioè verifico che quando tutti i numeri
sono usciti allora blocca il loop..

 sono usciti allora blocca il loop..
Non credo proprio :)
Non è questo il problema.


 per eseguire l'estrazione automatica ho utilizzato il metodo Randomize e
<quoting>
ho letto i vostri post. Io consiglio o l'algoritmo di termoPilucco che è
bello e soprattutto funziona....
Altrimenti basterebbe una collection di 90 elementi, tutti Integer. Ad ogni
estrazione si tira a caso un numero tra 1 e Collezione.Count e poi lo si
rimuove dalla collection.
Al passaggio successiva, l'estrazione avverrà sempre tra 1 e
Collezione.Count, che però sarà stata decrementata da 1 e così via.....
good coding!!!
-- 
Alletun
Sorry, ask me if you want to get my e-mail!

 e poi lo si rimuove dalla collection.
che è una perfetta metafora per l'estrazione del numero dal sacchetto...
del resto, quando giochi a tombola, i numeri estratti non li rimetti nel
sacchettino.



Ehm.....ok... allora sicuramente ho capito male cosa volevi
intendere...chiedo venia...
comuque in pratica io ho scritto cosě...... (lo so che il codice che ho
scritto č una skifezza !! datemi il tempo di imparare...non mi spezzate le
braccine..):
Private Function MyValue() As Integer
if avvia = true then
Static NumUsciti(1 To 90) As Boolean
Dim nTemp As Integer
Do
    Randomize Timer
    nTemp = Int((Rnd * 90) + 1)
    If  NumUsciti(nTemp) = False Then
       NumUsciti(nTemp) = True
        MyValue = nTemp
        Exit Do
    End If
If  numeri = tuttiusciti then
Exit Do
avvia = false
End If
Loop
.... a me funziona.....
comunque ora proverň anche il metodo di TermoPilucco
Grazie !!!


Uhm.....mi piace!
del tipo:
Dim prova As New Collection
Dim N
  For N = 1 To Prova.Count
      Prova.Remove etc..
 Next
Giusto?
Grazie !

 comuque in pratica io ho scritto così......
Anche se funziona a livello teorico non è detto che funzioni sempre, in
pratica non credo che ci siano problemi.
Comunque si può risolvere facendo in modo che quando viene estratto un
numero guà uscito la funzione invece di estrarne un altro provi con il
successivo e così via fino a quando non ne arriva uno libero.


 Giusto?
occhio che scritta cosě credo dia qualche problema. E' quello che considero
un baco di vb......il Prova.Count viene inizializzato una sola volta, quindi
se all'inizio vale 90, anche facendo un .Remove, il .Count rimane sempre 90.
Perň credo che sia un problema del ciclo for...next, se magari uno fa:
Do While 1=1
    Prova.Remove
    If Prova.Count=0 Then Exit Do
Loop
non dovrebbero esserci problemi!!!!


 good coding!!!
Yeah! Grazie Alletun ! ;-)

 successivo e così via fino a quando non ne arriva uno libero.
.....Ah ! Ok.........farò qualche test per vedere come funziona!
Grazie Frank !

 > successivo e così via fino a quando non ne arriva uno libero.
Mhhh.. perderesti di casualità andando a privilegiare i numeri alti quando
il sacchetto è quasi vuoto.
Cmq ho porvato a lanciare 10000 volte il programma e ha sempre terminato
correttamente senza entrare in cicli nifiniti.
Se i numeri della tombola sono 90 risulta anche abbanza veloce (solo 10
volte più lento del mio :P ), al crescere dei numeri nel sacchetto (10000,
per esempio) è circa 500 volte più lento :)
termoPilucco


...Scusa la domanda.....ma il programma che hai testato è quello di frank ?
cioè quello che ho scritto io 2
post prima?:
Static NumUsciti(1 To 90) As Boolean
Dim nTemp As Integer
Do
    Randomize Timer
    nTemp = Int((Rnd * 90) + 1)
    If  NumUsciti(nTemp) = False Then
       NumUsciti(nTemp) = True
Etc, Etc,
??

        NumUsciti(nTemp) = True
[...]
Sě, con le dovute correzioni, perchč era sbagliato :)
termoPilucco

 il sacchetto è quasi vuoto.
Non se la ricerca del numero non estratto la rendi alternativamente una
volta avanti e l'altro indietro, oppure studi un'altro meccanismo per
rendere il movimento (avanti - indietro) non alternativo ma causale.



 Ah, si? (???)
 eppure a parte l'azzeramento per inizare di nuovo il ciclo (che ho
corretto) tutto il resto a me sembra ok...
Comunque ragazzi grazie veramente di cuore a tutti!
Cavoli! non avevo intenzione di scatenare cosě tante risposte...!
Ari - Grazie !! :-)

 ripetuti? o qualche parola chiave di ricerca o indirizzo internet??
Analisi ...
Un vettore bidimensionale di 10x9 con i numeri da 1 a 90 (come il tabellone)
questa matrice e' il tuo cuore, con una sola matrice statica controlli tutto
le cartelle sono sotto matrici di 5x3 se non ricordo male , pensa ad una
sala bingo ad esempio, dove dai il numero di cartella e la controllano
all'istante,
ora per i ripetuti nessun problema, io che tendo a dividere le cose il +
possibile durante l'analisi , utilizzerei un vettore di 90 numeri e
teoricamente lo ridimensionerei ad ogni Get con redim preserve, questo
vettore in realta' e' la tua sacchetta con i numeri , ad ogni estrazione non
scegli + una pallina tra 90 ma tra 1 e il numero di palline rimaste !
certo devi implementarti altre funzioni di shiftaggio dei numeri ecc.. ma
Teoricamente e' ineccepibile ^_^
-- 
<Gigio2K>
--- 
www.g2kweb.it
 ---
Nokia -> I.T.H.N. -> 
http://www.ithn.it/
VB -> I.C.L.VB -> 
http://www.it-lang-vb.net/