Newsgroup: it.comp.lang.c
Titolo: Aiuto sulla generazione di un numero con rand ();

Salve a tutti, dunque ho un problema con la funzione rand ();
infatti ho letto che essa dovrebbe generare un numero casuale,
ho fatto alcune prove nel codice:
int random_number;
random_number=1+(int) (10.0*rand()/(RAND_MAX+1.0));  /* dovrebbe
generare un numero casuale compreso tra 1 e 10 */
printf("random number : %d\n",random_number);
be' il risultato e' che il numero generato e' sempre 9
ho provato anche semplicemente
random_number = rand ();
printf("random number : %d\n",random_number);
anche qui il numero generato e' sempre lo stesso: 1804289383
Come mai accade cio' ?
Grazie.
--
+ 
g.gab...@europe.com
 ---------------+
|                               Linux  |
+---------------- the free philosophy -+

 wrote in message
388EFE5A...@tiscalinet.it...


 anche qui il numero generato e' sempre lo stesso: 1804289383
Il problema è che ad ogni lancio del programma il seme è sempre lo
stesso. Devi impostarlo con srand(), magari utilizzando il timer di
sistema.
EMG


ulteriori informazioni  ;)
Eh eh grazie per la risposta, cmq potreste farmi un esempio
con srand ?
Grazias,
G.Gabriele


 con srand ?
Qualcosa tipo
srand( time() );
EMG

La funzione rand, per generare il numero pseudo-casuale che ti ritorna,
utilizza un algoritmo di generazione di numeri pseudo-casuali. Di questi
algoritmi ce ne sono moltissimi, e non ci è dato sapere quale esattamente
viene utilizzato (tra l'altro, ogni compilatore può usarne un diverso).
Comunque a noi non interessa sapere *quale* particolare algoritmo viene
utilizzato. A noi interessa sapere che *tutti* questi algoritmi hanno delle
caratteristiche in particolare, che sono:
-il generatore di numeri pseudo-casuali può essere visto come una funzione
ad una variabile:
    r = Funzione(s)
dove r è il numero pseudo-casuale ritornato ed s è il seme, cioè il valore
di partenza da cui l'algoritmo parte per calcolare r. Dopo che è stato
calcolato r, s viene modificato in funzione di r.
Quindi il programma
int main()
{
    random_number = rand ();
    printf("random number : %d\n",random_number);
}
ti genera sempre lo stesso numero: 1804289383
mentre
int main()
{
    srand(10)
    random_number = rand ();
    printf("random number : %d\n",random_number);
}
mentre
ti genera sempre lo stesso numero: 43987534848975 (a caso)
mentre
int main()
{
    srand(10)
    random_number = rand ();
    printf("random number : %d\n",random_number);
    random_number = rand ();
    printf("random number : %d\n",random_number);
}
ti genera sempre gli stessi due numeri: 43567349875 e 
7345893475
 (tirato a
caso) ma diversi tra loro
mentre
int main()
{
    srand(time())
    random_number = rand ();
    printf("random number : %d\n",random_number);
}
ti genera sempre un numero diverso, in quanto il seme cambia sempre.
In generale, x generale n numeri pseudo-casuali diversi, fai:
int main()
{
    int i, n;
    n=100; // numeri pseudo-casuali da generare
    srand(time())
    for (i=0;i<n;i++)
    {
        random_number = rand ();
        printf("random number : %d\n",random_number);
    }
}
nota che ho usato il termine pseudo-casuale e non casuale, perchè in realtà
casuali questi numeri non sono, ma nascono da una funzione r = Funzione(s)
che è una funzione matematica che genera dei numeri "come se" fossero
casuali.
ciao.
guapo.

 guapo.
Grazie mille guapo ;) mi hai perfettamente chiarito le cose.....
cmq per quanto riguarda :
 srand(time () );
 il mio compilatore (gcc ) richiede che time abbia un argomento:
 srand(time(0));
Grazie MILLE ;),


 
In genere si usa srand(time(NULL)); ma penso che sia la stessa cosa...
--
 Ciao, Luca.
 Reply to 
luca....@tiscalinet.it