sábado, 9 de octubre de 2010

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;
}

Comparte o puntua esta publicación ▼

0 comentarios:

Publicar un comentario