ciao a tutti, come faccio a fare una funzione che restituisca un numero casuale compreso fra un minimo e un massimo?![]()
![]()
ciao a tutti, come faccio a fare una funzione che restituisca un numero casuale compreso fra un minimo e un massimo?![]()
![]()
Farti una rierchina nel forum![]()
Io in passato ho usato sempre un'istruzione simile:
dove min e max sono appunto rispettivamente il valore minimo e il valore massimo dell'intervallo che ti interessa ( RAND_MAX è invece la variabile definita in stdlib.h equivalente a 32767, massimo valore ottenibile con rand() ).codice:num = min + (max-min) * rand() / RAND_MAX;
Dovrebbe funzionare sempre, anche per i numeri negativi.
Ho scritto a volo un main:
Fammi sapere se hai problemicodice:#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { short min, max, num; printf("Immettere il valore minimo dell'intervallo: "); scanf("%hd%*c", &min); printf("Immettere il valore massimo dell'intervallo: "); scanf("%hd%*c", &max); srand( (unsigned int)time(NULL) ); num = min + (max-min) * rand() / RAND_MAX; printf("\nIl numero generato e': %hd\n", num); getchar(); return 0; }![]()
prova la tua funzione con numero minimo = 2 e numero massimo = 5, viene sempre 2!VVoVe:
Perchè è sbagliata.
Manca srand() ...
come devo mettere quindi?![]()
Ragionare un po'Originariamente inviato da Lucked
come devo mettere quindi?![]()
![]()
http://www.cppreference.com/stdother/srand.html
ok...ma non mi convince tanto una formula giusta, per trovare il mio numero casuale..uff..
Veramente la srand() c'è, e come argomento ha il valore restituito da time() che quindi è sempre variabile.
Il problema è di distribuzione di numeri, infatti se si sceglie un intervallo ampio (come 1 - 1000) si ottengono valori diversi, anche se di pochissime unità.
Basta cambiare formula: sostituisci quella con
num = min + rand()%(max+1);
una volta spiegai proprio su questo forum la differenza tra questa formula e l'altra... in effetti pur conoscendo la differenza in teoria, non avevo mai avuto la possibilità di coglierla in pratica. Ora mi rendo conto dell'importanza della differenza
Comunque usa questa formula che ti ho scritto e non avrai problemi (anche con 2 - 5 vengono valori diversi).
forse ce l'ho fatta, mi date un occhiata?
codice:#include <stdio.h> #include <stdlib.h> #include <time.h> #define MIN_VAL 2 #define MAX_VAL 5 int main(void) { srand( time(NULL) ); int num = (rand () % (MAX_VAL-1))+MIN_VAL; printf("%d \n", num); }