¿Cómo generar números aleatorios en la programación c

Una función matemática en la programación C que es relativamente fácil de entender es la función rand (). Genera números aleatorios. Aunque esto puede parecer una tontería, es la base de casi todos los juegos de ordenador que se ha inventado. Los números aleatorios son un gran problema en la programación.

Una computadora no puede generar números verdaderamente aleatorios. En lugar de ello, se produce lo que se conoce como falso-números aleatorios. Esto se debe a las condiciones dentro de la computadora pueden ser replicados. Por lo tanto, los matemáticos serios se burlan de que cualquier valor de un ordenador llama al azar no es un número verdaderamente aleatorio. ¿Puedes oírlos burla?

¿Cómo generar números aleatorios

La función rand () es la más simple de las funciones de números aleatorios de C. Se requiere que el archivo de cabecera stdlib.h, y tose un valor int que es supuestamente aleatoria. Ahora, eso es aleatorio demuestra código de ejemplo.

Ahora, eso es AZAR

#include #include int main () {int r, a, b-puts ("100 aleatoria Numbers")-for(a=0-alt;20-a++){for(b=0-blt;5-b++){r=rand()-printf("%dt",r)-}putchar('n')-}return(0)-}

Ahora, eso es utiliza un anidado Random bucle for para mostrar 100 valores aleatorios. La función rand () en la línea 13 genera los valores. La función printf () en la línea 14 muestra los valores utilizando el carácter de conversión% d, que muestra valores int.

Ejercicio 1: Crear un nuevo proyecto mediante el código fuente se muestra en Ahora, eso es aleatoria. Genere y ejecute para la vista 100 valores aleatorios.

Ejercicio 2: Modifique el código de manera que todos los valores que se muestran están en el rango de 0 a 20.

He aquí una pista para Ahora, eso es aleatoria: Utilice el operador de asignación de módulo para limitar el rango de los números aleatorios. El formato se parece a esto:

r% =n-

r es el número de regresar de la función rand (). % = Es el operador de asignación de módulo. n es el límite del rango, más 1. Después de la declaración anterior, valores devueltos están en el rango de 0 a n-1. Así que si usted desea generar valores entre 1 y 100, se utiliza la siguiente fórmula:

valor = (r% 100) + 1-

¿Cómo aumentar la aleatoriedad de numbersin programación C

Sólo para dar un poco de crédito a los matemáticos presumidas que dicen que las computadoras generan números pseudo-aleatorios, ejecute el programa que ha generado a partir de Ejercicio 2. Observe la salida. Ejecute el programa de nuevo. Ver nada familiar?

La función rand () es bueno en la generación de una serie de valores aleatorios, pero son valores predecibles. Para hacer la salida menos predecible, es necesario semilla el generador de números aleatorios. Eso se hace mediante el uso de la función srand ().

Al igual que la función rand (), la función srand () requiere la cabecera stdlib.h, se muestra a la línea 2 en Aún Más aleatoriedad. La función requiere un valor entero sin signo, de semillas, que se declaró en la línea 6. La función scanf () en la línea 10 se lee en el valor sin signo utilizando el marcador de posición% u. Entonces la función srand () utiliza el valor de la semilla en la línea 11.

AÚN MÁS ALEATORIEDAD

#include #include int main () {unsigned int semilla-r, a, b-printf ("Introduzca una semilla de aleatorización: ")-scanf("%u",seed)-srand(seed)-for(a=0-alt;20-a++){for(b=0-blt;5-b++){r=rand()-printf("%dt",r)-}putchar('n')-}return(0)-}

La función rand () se utiliza en la línea 16, aunque los resultados se basan ahora en la semilla, que se establece cuando el programa se ejecuta.

Ejercicio 3: Crear un nuevo proyecto con el código fuente se muestra en la aún más aleatoriedad. Constrúyelo. Ejecute el programa un par de veces, tratando diferentes valores de semillas. La salida es diferente cada vez.

Por desgracia, los valores aleatorios que se generan siguen siendo predecible cuando se escribe el mismo número de semillas. De hecho, cuando el valor de 1 se utiliza como la semilla, se ve la misma " al azar " valores que viste en el Ejercicio 1, cuando ni siquiera usar srand ()!

Tiene que haber una mejor manera.

La mejor manera de escribir un generador de números aleatorios no es pedir al usuario que escriba una semilla, sino más bien a buscar una semilla de otros lugares. En Más Truly Random que nunca, el valor de la semilla se extrae del reloj del sistema mediante el uso de la función time ().

MÁS DE VERDAD AL AZAR QUE NUNCA

#include #include #include int main () {int r,a,b-srand((unsigned)time(NULL))-for(a=0-alt;20-a++){for(b=0-blt;5-b++){r=rand()-printf("%dt",r)-}putchar('n')-}return(0)-}

La función time () devuelve información acerca de la hora actual del día, un valor que está en constante cambio. El argumento NULL ayuda a resolver algunos problemas, pero el tiempo () devuelve un valor constante cambio.

La parte de la declaración (sin firmar) asegura que el valor devuelto por la función time () es un entero sin signo. Eso es una técnica conocida como encasillamiento.

La conclusión es que la función srand () se pasa un valor de semilla, por cortesía de la función time (), y el resultado es que la función rand () genera valores que están más al azar que se obtendría de otra manera.

Ejercicio 4: Escriba el código fuente de Más Truly Random que nunca y construir el proyecto. Ejecutar un par de veces para asegurarse de que los números son tan al azar como la computadora puede conseguirlos.




» » » » ¿Cómo generar números aleatorios en la programación c