Generare un numero random in c
Ciao a tutti!
Secondo voi in C, come posso implementare una funzione che mi genere un numero random tra un intervallo di due valori che decido io? Ad es. tra 6 e 12.
Grazie...

Secondo voi in C, come posso implementare una funzione che mi genere un numero random tra un intervallo di due valori che decido io? Ad es. tra 6 e 12.
Grazie...
Risposte
void main(void)
...
randomize();
float y=casuale();
...
float casuale() [aperta graffa che sul portatile non mi esce bene]
x=6*rand()+6; // rand restituisce un numero casuale uniformemente distribuito tra 0 e 1
return x;
[chiusa graffa per le ragioni di cui sopra]
(codice ansi c borland)
...
randomize();
float y=casuale();
...
float casuale() [aperta graffa che sul portatile non mi esce bene]
x=6*rand()+6; // rand restituisce un numero casuale uniformemente distribuito tra 0 e 1
return x;
[chiusa graffa per le ragioni di cui sopra]
(codice ansi c borland)
@ luca.barletta:
Io possiedo una versione C della Borland (precisamente Borland C++ 3.0) in cui la funzione rand mi restituisce un valore casuale compreso tra 0 e MAX_RAND=32767. Qual'e' la versione che utilizzi ?
@ enigmagame:
Il metodo per generare un valore decimale casuale e' stato fornito gentilmente da luca.
Pero' se le librerie del tuo c ti forniscono una funzione rand che restituisce valori tra 0 e MAX_RAND>1 occorre modificare la riga di calcolo in x=6*rand()/MAX_RAND + 6;
Una funzione carina per generare interi casuali potrebbe essere la segunete.
prototipo:
funzione:
esempio:
A presto,
Eugenio
Io possiedo una versione C della Borland (precisamente Borland C++ 3.0) in cui la funzione rand mi restituisce un valore casuale compreso tra 0 e MAX_RAND=32767. Qual'e' la versione che utilizzi ?
@ enigmagame:
Il metodo per generare un valore decimale casuale e' stato fornito gentilmente da luca.
Pero' se le librerie del tuo c ti forniscono una funzione rand che restituisce valori tra 0 e MAX_RAND>1 occorre modificare la riga di calcolo in x=6*rand()/MAX_RAND + 6;
Una funzione carina per generare interi casuali potrebbe essere la segunete.
prototipo:
int intRand(int, int);
funzione:
int intRand(int iMin, int iMax) { int iResult; iResult = iMin + rand() % (iMax - iMin + 1) return iResult; }
esempio:
... int iVal; ... randomize(); ... iVal = intRand(6, 12); // genera un valore intero casuale compreso tra 6 e 12
A presto,
Eugenio
io l'avrei scritta così:
prototipo:
funzione:
esempio:
sostanzialmente cambia solo la randomize() (a me non funzionava quando l'ho provata, così sono passato alla srand che non mi ha mai abbandonato
) e la funzione, che non dichiara nessuna variabile locale... tutto qui... giusto per togliermi questo sassolino dalla scarpa... che libreria devo richiamare per usare la randomize()??? è una cosa su cui non ho più indagato!
prototipo:
int intRand(int, int);
funzione:
int intRand(int iMin, int iMax) { return iMin + rand() % (iMax - iMin + 1) }
esempio:
... int iVal; ... srand(time(0)); ... iVal = intRand(6, 12); // genera un valore intero casuale compreso tra 6 e 12
sostanzialmente cambia solo la randomize() (a me non funzionava quando l'ho provata, così sono passato alla srand che non mi ha mai abbandonato


La funzione randomize e' implementata nella libreria ed e' una macro che inizializza in maniera casuale la generazione dei numeri casuali. La srand lo fa direttamente in maniera non casuale a meno che il parametro non sia diverso ad ogni esecuzione come nel tuo esempio il timer.
A presto,
Eugenio
A presto,
Eugenio
perfect! molto chiaro grazie
mi ha sempre affascinato questa cosa dei seed per la generazione di numeri casuali!

mi ha sempre affascinato questa cosa dei seed per la generazione di numeri casuali!

Grazie a te, devi essere molto ingamba.
Eugenio
Eugenio
naaaaaa....
