PDA

Visualizza la versione completa : [C] Come funzionano i numeri casuali?


64less
08-03-2011, 21:19
Il seguente programma serve ad indovinare il numero casuale che genera il computer


#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int numero_casuale;
int c;
do
{
printf("\n Pensa ad un numero da 0 a 100 [0 per uscire]: ");
scanf(" %d", &c);
fflush(stdin);
numero_casuale=random()%100;
if ( c == numero_casuale ) printf("Bravo! Il numero pensato %d", numero_casuale);
else printf(" Spiacente, riprova! Il numero %d",numero_casuale);
}
while(c!=0);

return 0;
}

Vorrei sapere in che modo vengono generati i numeri casuali? Esiste un'array che qualcuno ha inserito nel processore?
Grazie

MItaly
08-03-2011, 21:42
No, in genere un banale generatore lineare congruenziale (http://en.wikipedia.org/wiki/Linear_congruential_generator), nel caso della random di glibc la spiegazione nel dettaglio si trova qui (http://www.mscs.dal.ca/~selinger/random/). In ogni caso non sono veri numeri casuali, semplicemente una successione generata da un algoritmo a partire da un certo valore iniziale (seed).

Per inciso, la random non standard, dovresti usare la rand invece; inoltre nel tuo codice non inizializzi il seed del generatore di numeri casuali, per cui ad ogni avvio del programma riottieni la stessa sequenza di numeri casuali (derivante dal seed di default 1). Per evitare questo inconveniente, in genere si usa come seed il tempo corrente (ottenuto tramite time(NULL)).

Il tuo programma dovr quindi essere:


#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
int numero_casuale;
int c;
srand(time(NULL));
do
{
printf("\n Pensa ad un numero da 0 a 100 [0 per uscire]: ");
scanf(" %d", &c);
fflush(stdin);
numero_casuale=rand()%100;
if ( c == numero_casuale ) printf("Bravo! Il numero pensato %d", numero_casuale);
else printf(" Spiacente, riprova! Il numero %d",numero_casuale);
} while(c!=0);
return 0;
}

lolide
08-03-2011, 21:46
In realt non un vero e proprio numero casuale. Cio per generare un numero casuale una CPU dovrebbe generare un numero casuale per generare un numero casuale, e questo all'infinito, perch ovviamente una CPU non pu "non sapere" quello che f e fare una cosa "casualmente".

Per questo motivo credo abbia un numero stabilito (perch non lo pu generare casualmente, deve sempre avere un numero base) e su di esso faccia delle operazioni secondo un algoritmo, che lo renda il pi "diverso" possibile da quello di partenza.

64less
08-03-2011, 22:16
Perfetto quello che volevo sapere, non un numero casuale ma un algoritmo specifico che genera dei numeri.
Grazie a tutti e due.

MItaly
08-03-2011, 23:16
:ciauz:

Loading