Está en la página 1de 2

6.4.

Números aleatorios
Los números aleatorios tienen mucha aplicación sobre todo en juegos, simulaciones y para
probar algoritmos. Vamos a revisar brevemente las funciones útiles en la generación de
números aleatorios.

La función básica de generación de aleatorios es la función rand() de la biblioteca


stdlib.h. Esta función genera un número semialeatorio en el intervalo entre 0 y 32767.
El hecho de que sea semialeatorio indica que los valores que se generan son siempre
siguiendo la misma secuencia que depende de una semilla. La semilla puede cambiarse
mediante la función srand(semilla). Esta función establece la nueva semilla de
números aleatorios.

Si se desea generar números aleatorios en un intervalo diferente se debe tomar el módulo


del valor generado y quizás sumarle un valor constante. Por ejemplo si deseamos números
aleatorios entre 0 y 9, inclusive, se deberá escribir

rand() % 10

Para simular el tiro de un dado debemos generar números entre 1 y 6. Esto lo hacemos con
la expresión:

1 + rand() % 6

Podemos manejar estas expresiones dentro de funciones. Por ejemplo: la función que
genere un tiro de un dado sería:

double tiroDado(){
return 1 + rand()%6;
}
Con la función rand() podemos generar números aleatorios de doble precisión en algún
intervalo definiendo una función apropiada como la siguiente:

double randDoble(){
return (double)(rand()/32767.0);
}

Note que la división se hace entre el número flotante 32767.0 no entre el entero 32767 ya
que se al dividir entre un entero obtendríamos siempre cero de resultado. La función
anterior genera números aleatorios en el intervalo de 0.0 a 1.0. Para probar la función
escriba la siguiente función main y ejecútela.

main(){
for(int i=0; i<20;i++)
printf(“%f”,randDoble());
getch();

105
}

Note que siempre que se ejecuta el programa se genera la misma secuencia de números
aleatorios. Para secuencias distintas debemos modificar la semilla de los números
aleatorios. Una forma práctica y que es muy difícil que se repita es tomar la hora del día
para establecer dicha semilla. La función time(0) de la biblioteca time.h nos da la
hora actual. Si pasamos esta hora como argumento a la función srand estableceremos
siempre una semilla diferente. En la función main del programa debemos poner

srand(time(0));

Una forma de obtener números aleatorios entre dos límites cualesquiera es mediante la
expresión:

valor = limite_inferior + rand()*(limite_superior –


limite_inferior);

Esta expresión podemos usarla en una función para obtener números aleatorios entre dos
límites:

int aleatorio(int limite_inferior, int limite_superior){


return limite_inferior + rand()%(limite_superior –
limite_inferior);
}

Como un ejemplo de números aleatorios consideremos un juego en el que jugador trata de


adivinar un número elegido por la computadora en seis intentos. El jugador elige un
número entre 1 y un límite máximo. La computadora responde indicando si el número es
mayor o menor que el número elegido por ella, o si es igual, indicando que el jugador gano.
Este proceso se repite seis veces, si al final de los seis intentos el jugador no ha adivinado,
el jugador pierde, sino, gana. El algoritmo es el siguiente:

Algoritmo Juego de Adivinanza.


1. La computadora elige número aleatorio.
2. Repetir 6 veces
3. leer siguiente intento
4. si los números son iguales, jugador ganó y termina
5. sino si el elegido es mayor
6. informar que el elegido es mayor
7. sino
6. informar que el elegido es menor
5. fin de ciclo
6. Computadora ganó.

106

También podría gustarte