elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Por qué el número que me genera el rand() siempre es el mismo?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Por qué el número que me genera el rand() siempre es el mismo?  (Leído 2,603 veces)
Ali Baba


Desconectado Desconectado

Mensajes: 310


Ver Perfil WWW
¿Por qué el número que me genera el rand() siempre es el mismo?
« en: 20 Marzo 2018, 03:23 am »

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
  1. #include <iostream>  
  2. #include <stdlib.h>  
  3. using namespace std;
  4.  
  5. int main() {
  6.  
  7.    int a = rand();
  8.    cout<<a<<endl;
  9.  
  10.    system("pause");
  11.    return 0;
  12. }
  13.  
Estoy aprendiendo C++ ahora y no sé que hago mal.


En línea

srWhiteSkull


Desconectado Desconectado

Mensajes: 443



Ver Perfil WWW
Re: ¿Por qué el número que me genera el rand() siempre es el mismo?
« Respuesta #1 en: 20 Marzo 2018, 03:50 am »

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í:

Código:
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.


« Última modificación: 20 Marzo 2018, 03:53 am por srWhiteSkull » En línea

Ali Baba


Desconectado Desconectado

Mensajes: 310


Ver Perfil WWW
Re: ¿Por qué el número que me genera el rand() siempre es el mismo?
« Respuesta #2 en: 20 Marzo 2018, 03:55 am »

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

srWhiteSkull


Desconectado Desconectado

Mensajes: 443



Ver Perfil WWW
Re: ¿Por qué el número que me genera el rand() siempre es el mismo?
« Respuesta #3 en: 20 Marzo 2018, 03:57 am »

Una buena lectura para entenderlo (lee la versión en inglés):
https://en.wikipedia.org/wiki/Random_number_generation
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.572



Ver Perfil
Re: ¿Por qué el número que me genera el rand() siempre es el mismo?
« Respuesta #4 en: 20 Marzo 2018, 07:09 am »

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.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Siempre me genera una excepcion
Ingeniería Inversa
Ch@CaL 2 1,436 Último mensaje 24 Enero 2007, 15:37 pm
por Ch@CaL
[Perl] Funcion rand (Random:Numero & Caracteres Aleatoreos)
Scripting
OzX 1 11,481 Último mensaje 19 Febrero 2009, 05:17 am
por Spora
Crear numero aleatorio con rand() y convertirlo en su valor ASCII (SOLUCIONADO)
PHP
Littl3 2 2,743 Último mensaje 17 Mayo 2009, 19:45 pm
por Littl3
AYUDA CON SERIAL QUE SE GENERA A PARTIR DEL NUMERO DE LA PC
Ingeniería Inversa
isaiaschiri 1 1,929 Último mensaje 1 Octubre 2010, 09:48 am
por LSL
El Mismo problema de siempre
Programación C/C++
verakra 1 788 Último mensaje 21 Marzo 2019, 06:48 am
por K-YreX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines