PDA

View Full Version : [C] funzione srand!


nicod83
14-01-2008, 14:09
ciao ragazzi!
in un piccolo esercizio in c devo usare una funzione che genera casualmente
0 e 1...
non riesco a trovare la sintassi corretta..
qualcuno ha sottomano questa funzione?

grazie!
ciao!

banryu79
14-01-2008, 14:50
Due buone fonti di informazione:

-> post (http://www.hwupgrade.it/forum/showthread.php?t=940103)in questo Forum
-> link (http://www.pierotofy.it/pages/guide_tutorials/C/Generazione_di_numeri_casuali/)esterno

Ciao :)

nicod83
14-01-2008, 18:25
x=rand() % 10 ;

così riesco a generare numeri da 0 a 9!!
come posso fare per avere solo 0 o 1 ?

nicod83
14-01-2008, 18:54
x=rand() % 10

ecco mi genera 0 e 1....
però mi da sempre gli stessi valori....devo inserire la funzione 'time' ?

marko.fatto
14-01-2008, 19:01
quello più semplice ma non efficace è :
srand(time(NULL));
x=rand();

nicod83
14-01-2008, 22:18
quello più semplice ma non efficace è :
srand(time(NULL));
x=rand();

non va molto bene.... mi ritorna tutti 0 o tutti 1...

marko.fatto
14-01-2008, 22:36
srand(time(NULL));
x=rand()%100;
x/=100;
:stordita:

Ziosilvio
15-01-2008, 09:30
x=rand() % 10 ;

così riesco a generare numeri da 0 a 9!!
come posso fare per avere solo 0 o 1 ?
A parte che sulla generazione pseudorandom in C c'è una mia guida nella sottosezione apposita, che adesso non ho voglia di cercare...

Usare una congruenza modulare con una funzione pseudorandom di cui non si conoscono i dettagli è rischioso per alcuni motivi di cui parlavo nella guida segnalata poc'anzi.
Per sfruttare al meglio le proprietà di pseudocasualità di un generatore di valori interi, di solito conviene convertire il valore restituito in un numero in virgola mobile compreso tra 0 incluso e 1 escluso, e usare il nuovo valore per generare la sequenza richiesta.
Ad esempio, partendo da rand (che restituisce int) puoi creare frand (che restituisce double):
double frand()
{
return (double)rand()%(RAND_MAX+1.0);
}
e poi creare una funzione bern (distribuzione di Bernoulli con parametro p) ponendo:
int bern(double p)
{
return (frand() < p);
}