Generare un numero random in c

enigmagame
Ciao a tutti! :-D
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
_luca.barletta
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)

eugenio.amitrano
@ 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:
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

groucho1
io l'avrei scritta così:

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 :-D ) 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! :lol:

eugenio.amitrano
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

groucho1
perfect! molto chiaro grazie :-D

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

eugenio.amitrano
Grazie a te, devi essere molto ingamba.

Eugenio

groucho1
naaaaaa.... :oops:

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.