Newsgroup: it.comp.lang.visual-basic
Titolo: Numeri casuali

Salve a tutti,
in questo periodo sto cercando di portare a termine un semplice giochino di
carte.
L'istruzione su cui si basa tutto il programma è la generazione di un numero
casuale compreso tra 0 e 9.
Questo non è un problema perché basta utilizzare la funzione Rnd e la
funzione Int.
Il gioco di carte consta di 10 giocate ed ogni volta deve essere generato un
numero casuale compreso tra 0 e 9.
Il problema è che ad ogni giocata bisognerebbe escludere dall' "estrazione"
tutti i numeri già usciti.
Ad esempio, se alla prima giocata è uscito 8, nella seconda giocata il
programma dovrà estrarre un numero da 0 a 9 esludendo l'8.
Se poi alla terza giocata esce il 3, alla giocata successiva il prg dovrà
escludere l'8 e il 3, e così via.
Come posso ottenere una cosa del genere? Sarei grato a chiunque volesse
darmi una dritta, un suggerimento, del codice...
A presto!

 ha scritto nel messaggio
news:8jfhnt$n33$1...@nslave2.tin.it...


 wrote in message


I valori ottenuti dalla funzione rnd li metti in una stringa. Per ogni
valore risultante da rnd fai un instr per vedere se è gia presente nella
stringa, se lo è ripeti l'estrazione altrimenti l'accetti.
Inutile dire che più diventano i numeri da escludere e più dovrai ripetere
la funz. rnd, quindi...
Ciao Luciano.
P.s. Conosci il calcolo della probabilità? ^__^

Si, è vero che il mio metodo è più complicato e forse non si capisce, ma ha
il vantaggio di essere computabile e di complessità n.
Il metodo di estrarre dei numeri e poi vedere se essi sono già presenti ed
eventualmente scartarli non ha una complessità definita,
per assurdo potrebbe durare anche all'infinito... E' ovvio che per la legge
dei grandi numeri prima o poi avrà termine, ma immaginiamo di
dover estrarre 1.000.000 di numeri tutti diversi, potrebbe metterci ore
mentre con il mio metodo degli indici finirà in qualche secondo...
se semplicemente ho sbagliato a capirvi chiedo scusa e ringrazio per
delucidazioni
  ciao a tutti


Consiglio un vettore di 9 elementi, magari booleano o intero settato a zero.
Quando generi un numero controlli la cella del vettore corrispondente (es.
se esce il 5 controlli vett(5)), se il suo valore č 0 il num. č valido e
setti la cella a 1, cosě se ricapita trova la cella a 1 e non lo considera.
Bye
--
Tango
http://www.halflifeitalia.com
ICQ: 35463931

Mi pare di aver capito che il prblema sta nell'estrazione casuale di una
cifra che può essere o meno valida a seconda del fatto che sia già stata
estratta o meno. Se ho capito bene, continua a leggere :-)
Parto dal presupposto che la probabilità di estrazione sia la stessa per
ogni cifra estratta, ossia che la distribuzione sia uniforme. Con ciò
intendo che, alla prima estrazione, la probabilità di estrarre ogni numero
sarà 1/10, alla seconda 1/9, alla terza 1/8 e così via...
Beh, la cosa più semplice è, per ogni estrazione di una cifra, spaprare una
random che generi un numero da 1 a 100 (diciamo n) , dividere l'intervallo
da 1 a 100 in tanti sottointervalli quanti sono le cifre da estrarre (al
primo tentativo saranno 10, al secondo 9 ...)  e vedere in quale
sottointervallo cade n. Quello sarà la tua cifra esatta. Esempio: Sto
estraendo la sesta cifra, ossia ci sono ancora 5 cifre possibili. Divido 100
per 5 che fa 20 (per eliminare le virgole puoi arrotondare il valore
perdendo un po' in casualità, oppure cambiare di volta in volta il range
della rnd). Se n è tra 1 e 20 allora la cifra estratta sarà la prima delle
cifre ancora disponibili, se tra 21 e 40 la seconda e così via...
Questo è il metodo che si utilizza per estrarre campioni da una
distribuzione qualunque( non necessariamente uniforme) quando si fanno
calcoli di statistica inferenziale.
Se non mi sono spiegato, non esitare a chedere!
Ciao, Brex

 numero casuale compreso tra 0 e 9.
A me sembra più semplice creare un array di 10 elementi del tipo
numeri [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
mischiarlo trami una funzione random
estrarre i numeri partendo da quello di indice 0 fino a 9 o viceversa per
ogni giocata.
Così automaticamente i numeri presi sono casuali, scarti i numeri già presi
e inoltre il codice da scrivere oltre ad essere banale è anche poco.
Goldrake - 
goldr...@hotmail.com




 Come posso ottenere una cosa del genere? 
Semplicemente, prendi due variabili stringa
a$="0123456789"
b$=""
1) Estrai via via un numero compreso tra 1 e len(a$) e mettilo in n$
2) prendi il numero e fai b$=b$ & n$
3) togli il numero da a$ (per esempio, a$=replace(a$,n$,""))
4) continua finche' la len(a$) e' uguale a 0

Grazie Paola, da un'occhiata veloce anche il tuo metodo sembra
interessante!!
Ciao!
"Paola" <a...@def.ghi.jk> ha scritto nel messaggio
news:000630234628.41@manson...
