¿Por qué el número que me genera el rand() siempre es el mismo?

Iniciado por Diesan Romero, 20 Marzo 2018, 03:23 AM

0 Miembros y 1 Visitante están viendo este tema.

Diesan Romero

Estoy usando la librería stdlib de c++ para generar un número aleatorio con la función rand() pero resulta que cada vez que compilo me sale 41:

Código (cpp) [Seleccionar]
#include <iostream>   
#include <stdlib.h>   
using namespace std;

int main() {

    int a = rand();
    cout<<a<<endl;

    system("pause");
    return 0;
}

Estoy aprendiendo C++ ahora y no sé que hago mal.

srWhiteSkull

#1
En primer lugar no existen los números aleatorios en computación sino números pseudoaletorios y estos para generarlos dependen de una semilla, un número.

La forma común es designar el tiempo actual en milisegundos como semilla aleatoria usando la función srand(). Así:

srand (time(NULL));

Muchos juegos usan esta forma de inicializar la semilla, y si ajustas la hora y la fecha siempre con el mismo valor para empezar un juego podrás observar como los eventos que supuestamente son aleatorios se repiten en el mismo momento.

PD no te olvides de incluir la cabecera time.

Diesan Romero

Me dieron una explicación parecida, pero no logro entender esto de inicializar la semila.


MAFUS

rand funciona así:
Se tiene un número, al que se llama semilla y sobre este número se le aplica una fórmula matemática para modificarlo, y a la vez darnos un entero.

La fórmula siempre es la misma, así que ante una semilla idéntica siempre devuelve el mismo valor. Al iniciar el programa la semilla tiene un valor definido por la librería, así que siempre se inicia con el mismo. Para solucionar esto se proporciona srand, que cambia la semilla al valor que se le pasa como argumento.