Números aleatorios avanzados en c
Despues de ver cómo generar números aleatorios en javascript, veremos ahora como generar números aleatorios en c y números aleatorios entre dos números. Para ello contamos con dos funciones en C para su correcto funcionamiento:
void srand(unsigned int semilla); int rand(void); void srand48(long int semilla); double drand48(void);
En realidad son cuatro funciones, son análogas, srand y rand son para el manejo de enteros y srand48 y drand48 para el manejo de números reales.
La función rand genera un número aleatorio, pero si hacemos un programa que genere por ejemplo diez números aleatorios, cada vez que ejecutemos el programa vamos a obtener los mismos números, ¿por qué? Porque necesitamos definir una semilla para que en cada ejecución del programa se generen números aleatorios distintos. Pues bien, esto lo hacemos con la función srand. Hay que tener cuidado con la semilla que escogemos, puesto que si siempre escogemos la misma semilla pués la función rand generará los mismos números, por lo tanto nuestra semilla debe ser “aleatoria”, así que tomaremos como semilla la hora del sistema (también podemos tener en cuenta el pid del proceso).
Ahora veremos un ejemplo completo:
/**
* Programa:
* Generacion de numeros aleatorios
* Descripcion:
* Programa que genera numeros aleatorios en diferentes rangos
* Archivo: alea.c
* Ejecucion: ./alea
* Compilar: gcc -Wall -o alea alea.c
* Autor:
* Jose Mato
* **/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char **argv)
{
int num = 0;
/* ponemos la semilla para generar numeros aleatorios, la semilla es la hora
actual */
srand((unsigned) time(NULL));
/* generamos un numero aleatorio */
num = rand();
printf("Numero aleatorio: %d\n", num);
/* generamos un numero aleatorio entre 0 y 9 */
num = rand() % 10;
printf("Numero entre 0 y 9: %d\n", num);
/* generamos un numero aleatorio entre 1 y 10 */
num = (rand() % 10) + 1;
printf("Numero entre 1 y 10: %d\n", num);
/* generamos un numero aleatorio entre 10 y 20 */
num = (rand() % 11) + 10;
printf("Numero entre 10 y 20: %d\n", num);
/* semilla para numeros reales */
srand48((unsigned) time(NULL));
/* generamos un numero REAL entre 5 y 10 */
float real = drand48() * (10.0 - 5.0) + 5.0;
printf("Real entre 5 y 10: %f\n", real);
return EXIT_SUCCESS;
}
Descargar: programa alea.c
Ya no tienes excusas para hacer programas como simulación de primitiva, quiniela de fútbol, ahorcado, …… y todo lo que se te ocurra.