c++ - repetir - randomize en c
rand() devuelve el mismo nĂºmero cada vez que se ejecuta el programa (6)
Funciones aleatorias como Borland complier
using namespace std;
int sys_random(int min, int max) {
return (rand() % (max - min+1) + min);
}
void sys_randomize() {
srand(time(0));
}
En este fragmento de código de C ++ bastante básico que implica la generación de números aleatorios:
include <iostream>
using namespace std;
int main() {
cout << (rand() % 100);
return 0;
}
¿Por qué siempre obtengo una salida de 41? Estoy tratando de hacer que salga un número aleatorio entre 0 y 100. ¿Tal vez no entiendo algo sobre cómo funciona la función rand?
Necesitas "sembrar" el generador. Echa un vistazo a este video corto, se aclarará las cosas.
Necesitas cambiar la seed .
int main() {
srand(time(NULL));
cout << (rand() % 101);
return 0;
}
La cosa sembrada de srand
es cierta también para un código de lenguaje c
.
Véase también: http://xkcd.com/221/
No estás sembrando el número.
Utilizar esta:
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
srand(static_cast<unsigned int>(time(0)));
cout << (rand() % 100) << endl;
return 0;
}
Aunque solo necesitas sembrarlo una vez. Básicamente no lo pongas en números aleatorios.
Por lo que vale, también está generando números entre 0 y 99 (inclusive). Si quisieras generar valores entre 0 y 100 necesitarías.
rand() % 101
además de llamar a srand () como han mencionado otros.
srand()
siembra el generador de números aleatorios. Sin una semilla, el generador no puede generar los números que está buscando. Siempre que la necesidad de números aleatorios no sea crítica para la seguridad (por ejemplo, cualquier tipo de criptografía), la práctica común es usar la hora del sistema como una semilla utilizando la función time()
de la biblioteca <ctime>
como tal: srand(time(0))
. De este modo, el generador de números aleatorios generará la hora del sistema expresada como una marca de tiempo de Unix (es decir, el número de segundos desde la fecha 1/1/1970). Luego puede usar rand()
para generar un número pseudoaleatorio.
Aquí hay una cita de una pregunta duplicada :
La razón es que un número aleatorio generado a partir de la función rand () no es realmente aleatorio. Simplemente es una transformación. Wikipedia ofrece una mejor explicación del significado del generador de números pseudoaleatorios: generador de bits aleatorio determinista. Cada vez que llama a rand () toma la semilla y / o los últimos números aleatorios generados (el estándar C no especifica el algoritmo utilizado, aunque C ++ 11 tiene facilidades para especificar algunos algoritmos populares), ejecuta un Operación matemática en esos números, y devuelve el resultado. Entonces, si el estado inicial es el mismo cada vez (como lo es si no llamas a srand con un número verdaderamente aleatorio), siempre obtendrás los mismos números "aleatorios".
Si quieres saber más, puedes leer lo siguiente:
http://www.dreamincode.net/forums/topic/24225-random-number-generation-102/
http://www.dreamincode.net/forums/topic/29294-making-pseudo-random-number-generators-more-random/