sábado, 20 de noviembre de 2010

Generación de Números aleatorios (Puntos extra)

Bueno compañeros , aqui les pongo esta entrada sobre la generación de numeros aleatorios en C.


Primero, lo que tenemos que saber esque hay una función llamada rand en C para la generación de numeros aleatorios. Se encuentra en la libería

A continuación un ejemplo:


Bueno esa es la ejecución de un programa que genera 20 numeros aleatorios, el codigo fuente es este:

Bueno pues ahi como ven en la imagen, está la libería stdlib la cual tiene la función rand (random), en este caso para llamar a la funcion usamos la siguiente función:

rand() % x;

En donde x es el rango hasta el cual se harán los numeros aleatorios.

por ejemplo si uso esto:

rand() % 10;

te generará numeros aleatorios entre el 0 al 10 , y si pongo esto

rand() % 10 + 1;

te generará numeros desde el 1 al 10, como se ve en la imagen de mi codigo.



EL PROBLEMA

El problema de esto , es que el programa "calcula" los numeros, no los genera, ¿que quiero decír con esto? , cada vez que ejecutes el programa anterior que puse , te "calculará" los mismos 20 numeros aleatorios, nunca cambiará , siempre serán los mismos números aleatorios.

LA SOLUCIÓN

La solución se encuentra al utilizar la función srand (se encuentra tambien en stdlib) la cual necesita de una "semilla" para que cada vez que se use la funcion rand genere numeros aleatorios diferentes ,el problema es estar dandole al programa una semilla cada vez que vaya a generar numeros aleatorios. Para esto haremos que se genere una semilla automaticamente cada vez que empiece el programa utilizando una función de la librería "time.h" .

Entonces nos quedará así utilizando el tiempo como una semilla:

srand (time (NULL)); 

eso generará una semilla aleatoriamente, basandose en la hora del sistema, dandole un valor en segundos a srand haciendo que por ejemplo , cada segundo que pase en la computadora sea una semilla diferente.  haciendo que siempre se generen numeros aleatorios automáticos distintos.


Implementando el ejemplo anterior usando srand nos quedaría así:

y bueno ahora si nos generará un numero al azar distintos cada vez que ejecutemos el programa.


PROBABILIDAD

La función rand da la misma probabilidad a todos los numeros que genere, si genera 1000 veces numeros entre el 1 y el 2 la probabilidad es casi la misma, puede que en el numero 1 sean 515 y en el numero 2 sean 485 o cualquier otro resultado, los resultados se aproximan. Para afirmar esto haré el siguiente ejemplo:

Veamos un ejemplo simulando el lanzamiento de un dado 1000 veces y vermos que las probabilidades que cayó son similiares.


El codigo es el siguiente: 


¿PARA QUE TODO ESTO?

La generación de números aleatorios nos puede servir para muchas cosas, una de las cosas que considero en la que es muy util esto ,es en los juegos, o cosas donde se ocupe la probabilidad y ese tipo de cosas.

A continuación y ya para terminar , les dejo un programa que hice el semestre pasado en estructura de datos , era un juego que genera un numero aleatorio entre el 1 y el 1000 y tu le escribes el numero y el programa te dice si está abajo o arriba de ese número hasta que aciertes con el número.



Bueno es todo, si tienen alguna pregunta del como generar numeros escribanla en los comentarios.

Codigos:


3 comentarios:

  1. disculpa, pero como harias para retroceder aplicar
    un aleatorio entre los siguientes
    valores 6, 11, 16.
    Teniendo en cuenta que la probabilidad
    de que salga el 6 es 30%, el 11 es 50% y 16 es 20%.

    de antemano gracias :)

    ResponderEliminar
  2. No puedo abrir los codigos del link :(

    ResponderEliminar