Newsgroup: it.comp.lang.c
Titolo: numero casuale diverso ad ogni iterazione di un ciclo

Ciao a tutti,
so che la questione sulla generazione di numeri casuali è  già stata
trattata abbondantemente su questo NG, ma anche cercando su 
www.deja.com
non ho trovato nulla che facesse al caso mio.
La domanda che vi pongo è:
Come posso generare un numero casuale (per il range me la vedo poi io
con l'operatore %) che sia DIVERSO non ad ogni lancio del programma (non
mi basta!) ma AD OGNI ITERAZIONE DI UN CICLO FOR?
Forse è un problema banale, comunque vi sarò molto grata se
risponderete!
   Silvia
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

    Silvia
Una tecnica (non so quanto portabile) e' quella di inserire un dato letto da
una locazione il cui valore continua a variare come ad esempio l'orologio o
il timer di refresh delle ram.
Ciao
Giuseppe

 
ma non va bene così ?
srand( time(NULL));
for(i=0; i<10; i++)
{
 rnd = rand();
 ..
 ..
}

 }
Ahimč no! Non va bene!
E' proprio ciň che faccio, ma il numero che salta fuori č sempre lo
stesso.
Qualche altra idea?
Comunque grazie


 mi basta!) ma AD OGNI ITERAZIONE DI UN CICLO FOR?
la  funzione rand()  serve appunto  per  creare una  sequenza di  numeri
_pseudocasuali_,  con  periodo  estremamente elevato,  tale  da  rendere
trascurabile (con  le dovute eccezioni)  il rischio di incorrere  in una
ripetizione della stessa sequenza.
Con  un RNG  molto semplice  (cerca linear  congruetial generator[1])  e
scegliendo opportunamente  i parametri,  il periodo  e` pari  modulo del
generatore. Nel ISO C, il modulo e` RAND_MAX (che e` _almeno_ 32767). La
funzione  rand(), dunque,  puo`  fornirti una  serie  di _almeno_  32767
numeri, prima di ripertesi. Supponendo che  il tuo ambiente usi interi a
32bit, allora RAND_MAX dovrebbe salire a 
2147483647
.
[1] I(j+1) = (a * I(j) + c) mod m
dove 'a'  e` il  moltiplicatore, 'c'  l'incremento e  'd' il  modulo del
generatore.
Se   vuoi  approfondire   l'argomento  puoi   guardare  il   capitolo  7
di   "Numerical   Recipes   in   C",   scaricabile   liberamente   qui`:
http://www.nr.com/
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Ci sono due cose che l'uomo non puo` nascondere:
essere ubriaco ed essere innamorato.

 stesso.
Hai inizializzato il generatore con srand()? Ricorda che la sequenza non
e` casuale, ma generata in maniera deterministica a partire da un valore
iniziale. Nell'esempio indicato il valore iniziale e` dato dall'orologio
del  sistema, ma  se non  lo fornisci  esplicitamente verra`  utilizzato
sempre il valore 1.
L'altra ipotesi  che mi  viene in  mente e` che  tu stia  utilizzando un
modulo molto piccolo ed un generatore pessimo.
Prova a postare il tuo codice.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
"Ci sono le balle , le megaballe e le statistiche".
 Mark Twain

Scusate, scusate...
Il mio programmino in realtà funzionava bene; la sciocchina ero io che
in pratica gli chiedevo di cercare un numero casuale tra 0 e 50 finchè
non ne trovava uno uguale al precedente...
Insomma... credo non ci sia altro da aggiungere.
In ogni caso vi ringrazio tutti quanti per la disponibilità; credo che
mi permetterò di disturbarvi qualche altra volta... ma non prima di un
esame più attento delle mie castronerie!
Buona serata


 ITERAZIONE DI UN CICLO FOR?
Una volta si usava impostare il seed con un valore letto dall'orologio:
       time(&ltime);
       srand(ltime);
Maurizio.

        srand(ltime);
Io ho sempre fatto srand(time(NULL)), penso che il risultato sia lo
stesso..
-- 
 Ciao, Bianco.
 Reply to luca.bianco (at) 
tiscali.it