Generar números aleatorios en C
En algunas ocasiones necesitamos una función que nos genere números aleatorios, C dispone de rand(), que al ser llamada retorna un numero comprendido entre 0 y 32767.
Esta función no resuelve nuestro problema si lo que queremos es un numero aleatorio cullo valor se encuentre entre, por ejemplo, 20 y 70, por lo que a continuación muestro el código de la función rand() sobrecargada para que se pueda establecer el mínimo y máximo, frand() que genera numeros en coma flotante entre 0 y 1 y un ejemplo para poner a prueba estas funciones.
#include<iostream> using namespace std; // retorna un numero del intervalo [min,max] int rand(int min, int max) { return rand() % (max-min+1) + min; } // retorna un numero del intervalo [0,1] float frand() { return float(rand())/32767.0; } // retorna un numero del intervalo [min,max] int myrand(int min, int max) { return rand()*(max-min+1)/RAND_MAX + min; } int main () { cout << "-------- Random Funtion Test --------" << endl; cout << "Minimo y Maximo: "; int min, max, iter; cin >> min >> max; cout << endl << "Numero de iteraciones: "; cin >> iter; cout << endl; unsigned int range = max - min + 1; unsigned int * f = new unsigned int [range]; memset (f,0,range*4); int rmax = min, rmin = max; for (int i=0; i<iter; i++) { int x = myrand(min,max); f[x-min]++; if (x<rmin) rmin = x; else if (x>rmax) rmax = x; } cout << " -> Min: " << rmin << " , Max: " << rmax << endl; cout << "TABLA DE FRECUENCIAS" << endl; for (int i=0; i<range; i++) cout << i+min << '\t' << f[i] << endl; cout << endl; return 0; }
Comentarios
Publicar un comentario