Questo è un codice in ANSI C che ho scritto per generare un numero casuale, intero, in un intervallo a scelta:
Codice:
#include <stdio.h>
#include <stdlib.h>
/*#include <unistd.h>*/
#include <time.h>
int main(void){
int M,m;
printf("Questo programma genera un numero intero pseudo-casuale in un intervallo scelto.\n(estremi compresi)\n\nInserisci l'estremo inferiore dell'intervallo: ");
scanf("%d",&m);
printf("Inserisci l'estremo superiore: ");
scanf("%d",&M);
if(M<=m){
printf("Hai visto bene che razza di estremi mi hai dato? °è_è\n");
return 2;
}
/* printf("Rullo di tamburi...\n");
sleep(3);*/
srand((unsigned int)time(NULL));
printf("... %d !\n",(int)(((double)rand()/(RAND_MAX+1.0))*(double)((M+1)-m))+m);
return 0;
}
IWBY
raga, la funzione rand() inizializzata con srand(time(0)) è una possibile soluzione... però è troppo condizionata dai secondi correnti. nn so se mi spiego. ad esempio se uno deve effettuare delle estrazioni casuali, nello stesso istante... gli uscirà lo stesso numero per ogni estrazione: questo perchè srand(time(0)) se nn sbaglio inizializza rand() al secondo corrente e quindi se le estrazioni (supponiamo 3 estrazioni) sono effettuate nello stesso istante, è chiaro che verrà estratto lo stesso numero! [...]
Forse non ho capito, ma se ho capito non è così; srand() decide solo l'ordine in cui usciranno i numeri nella distribuzione uniforme di rand(), quindi se dopo aver usato srand() una volta viene eseguita la funzione rand() mille volte in un miliardesimo di secondo (o un intervallo di tempo piccolo a piacere), usciranno mille numeri diversi.