suma repetir randomize numeros numero generar funcion dev crear arreglo aleatorios aleatorio c++ random

c++ - repetir - Los mismos números aleatorios cada vez que ejecuto el programa



randomize en c (4)

Debes dar una semilla al generador de números randum. Esto se puede hacer tomando la hora actual, ya que es de esperar algún tipo de azar.

#include <cstdlib> #include <ctime> using namespace std; int main() { int r; srand(time(0)); r = rand(); return 0; }

Mis números aleatorios que salen, salen en la misma secuencia cada vez que ejecuto mi juego. ¿Por qué está pasando esto?

yo tengo

#include <cstdlib>

y estoy usando esto para generar los números aleatorios

randomDiceRollComputer = 1 + rand() % 6;


La función rand() se requiere específicamente para producir la misma secuencia de números cuando se siembra con una semilla dada (llamando a srand() ); cada valor de semilla posible especifica una secuencia. Y si nunca llamas a srand() , obtienes la misma secuencia que srand(1) obtenido llamando a srand(1) antes de cualquier llamada a rand() .

(Esto no se aplica en diferentes implementaciones de C o C ++).

Esto puede ser útil para propósitos de prueba. Si hay un error en su programa, por ejemplo, puede reproducirlo volviendo a ejecutarlo con la misma similitud, lo que garantiza que (salvo en caso de otros comportamientos impredecibles) obtendrá la misma secuencia de números pseudoaleatorios.

Llamar a srand(time(NULL)) es la forma habitual recomendada de obtener números pseudoaleatorios más o menos impredecibles. Pero no es perfecto. Si su programa se ejecuta dos veces en el mismo segundo, probablemente obtenga la misma secuencia, porque el time() (típicamente) tiene una resolución de 1 segundo. Y las implementaciones típicas de `rand () no son lo suficientemente buenas para el uso criptográfico; es demasiado fácil para un atacante adivinar qué números obtendrá.

Hay varias otras implementaciones de números aleatorios. Los sistemas Linux tienen dos pseudodispositivos, /dev/random y /dev/urandom , desde los cuales puede leer valores de bytes pseudoaleatorios razonablemente de alta calidad. Algunos sistemas pueden tener funciones como random() , drand48() , y así sucesivamente. Y hay numerosos algoritmos; He oído cosas buenas sobre el Mersenne Twister .

Para algo así como un juego, donde no esperas o te importan los jugadores que intentan engañar, srand(time(NULL)) y rand() probablemente sean lo suficientemente buenos. Para fines más serios, deberías obtener consejos de alguien que sepa más sobre esto que yo.

La sección 13 de las preguntas frecuentes de comp.lang.c contiene información muy buena sobre la generación de números pseudoaleatorios.


Los generadores de números pseudoaleatorios toman un número inicial, o semilla, y luego generan el siguiente número en la secuencia a partir de esto. Es por eso que se llaman pseudoaleatorios, porque si siempre usan el mismo valor de inicio, generarán la misma secuencia de números, como lo hace el generador de liberías C estándar. Esto puede solucionarse dando al generador un valor inicial que cambiará la próxima vez que se ejecute el programa como la hora actual.

De todos modos, el código que está buscando como otros lo han dicho es:

srand(time(0)); //Seed the generator, give it a starting value


Necesitas sembrar tu generador de números aleatorios:

Trate de poner esto al comienzo del programa:

srand ( time(NULL) );

Tenga en cuenta que deberá #include <ctime> .

La idea aquí es sembrar el RNG con un número diferente cada vez que inicie el programa. Al usar el tiempo como semilla, obtienes un número diferente cada vez que inicias el programa.