Generare un numero random in c

Messaggioda enigmagame » 12/06/2006, 16:06

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...
enigmagame
Average Member
Average Member
 
Messaggio: 140 di 729
Iscritto il: 22/07/2005, 16:27
Località: Mantova

Messaggioda luca.barletta » 12/06/2006, 18:17

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)
Frivolous Theorem of Arithmetic:
Almost all natural numbers are very, very, very large.
Avatar utente
luca.barletta
Moderatore globale
Moderatore globale
 
Messaggio: 174 di 4341
Iscritto il: 21/10/2002, 20:09

Messaggioda eugenio.amitrano » 14/06/2006, 13:30

@ 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:
Codice:
int intRand(int, int);


funzione:
Codice:
int intRand(int iMin, int iMax)
{
   int iResult;

   iResult = iMin + rand() % (iMax - iMin + 1)
   return iResult;
}


esempio:
Codice:
   ...
   int iVal;
   ...
   randomize();
   ...
   iVal = intRand(6, 12); // genera un valore intero casuale compreso tra 6 e 12



A presto,
Eugenio
Avatar utente
eugenio.amitrano
Senior Member
Senior Member
 
Messaggio: 283 di 1375
Iscritto il: 15/02/2006, 16:16

Messaggioda groucho » 27/06/2006, 23:07

io l'avrei scritta così:

prototipo:
Codice:
int intRand(int, int);


funzione:
Codice:
int intRand(int iMin, int iMax)
{
   return iMin + rand() % (iMax - iMin + 1)
}


esempio:
Codice:
   ...
   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:
Avatar utente
groucho
Starting Member
Starting Member
 
Messaggio: 3 di 16
Iscritto il: 27/06/2006, 22:17

Messaggioda eugenio.amitrano » 28/06/2006, 13:49

La funzione randomize e' implementata nella libreria <stdlib.h> 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
Avatar utente
eugenio.amitrano
Senior Member
Senior Member
 
Messaggio: 335 di 1375
Iscritto il: 15/02/2006, 16:16

Messaggioda groucho » 28/06/2006, 17:42

perfect! molto chiaro grazie :-D

mi ha sempre affascinato questa cosa dei seed per la generazione di numeri casuali! :D
Avatar utente
groucho
Starting Member
Starting Member
 
Messaggio: 5 di 16
Iscritto il: 27/06/2006, 22:17

Messaggioda eugenio.amitrano » 28/06/2006, 20:14

Grazie a te, devi essere molto ingamba.

Eugenio
Avatar utente
eugenio.amitrano
Senior Member
Senior Member
 
Messaggio: 337 di 1375
Iscritto il: 15/02/2006, 16:16

Messaggioda groucho » 29/06/2006, 13:16

naaaaaa.... :oops:
Avatar utente
groucho
Starting Member
Starting Member
 
Messaggio: 6 di 16
Iscritto il: 27/06/2006, 22:17


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite