Autor Tema: diferencia entre aleatorio y pseudoaleatorio randoms en c srand y rand lenguajec  (Leído 5019 veces)

pabloGarcia

  • Sin experiencia
  • *
  • Mensajes: 3
    • Ver Perfil
Hola, estoy programando en lenguaje c y no entiendo bien las funciones rand y srand.. quisiera saber bien cómo se utilizan y cómo diferenciarlas, ya que debo implementarlas para caracteres y para números... Gracias!
« Última modificación: 24 de Septiembre 2020, 12:01 por Alex Rodríguez »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 985
    • Ver Perfil
Re:randoms en c (funciones srand y rand)
« Respuesta #1 en: 14 de Julio 2019, 21:58 »
Los ordenadores en realidad no pueden generar números aleatorios
Lo que hacen es generar números "pseudoaletorios", es decir, mediante un serie de operaciones matemáticas generan una lista de números que aparentan ser aleatorios.

Esto es lo que hace rand(), devolver una lista pseudoaleatoria. Y se puede comprobar que no es realmente aleatoria porque cada vez que ejecutes el mismo programa donde uses rand(), verás que siempre devuelve la misma secuencia de números que la vez anterior.

rand() genera esa lista a partir de un valor numérico llamado "semilla". Como la "semilla" es siempre la misma, la lista no varía.

Ahí es donde srand() interviene.
srand() puede cambiar la "semilla" y así rand() generará una lista de pseudoaletorios distinta.

Obviamente, cada vez que iniciemos el programa, habría que darle una "semilla" distinta.
Lo habitual es llamar a la función time() para darle como "semilla" el instante de tiempo (fecha y hora) del momento en que se ejecuta el programa.
Así cada vez la semilla será distinta.

Puedes comprobarlo con estos códigos.

Esto generará siempre la misma lista de aleatorios

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{

    for(int i = 0; i<10; i++)
        printf(" %d ", rand());
    return 0;
}

Pero añadiendo una srand() al principio para cambiar la semilla, la lista de aleatorios será distinta en cada ejecución:

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    srand(time(0)); //Pasamos como semilla el instante actual

    for(int i = 0; i<10; i++)
        printf(" %d ", rand());
    return 0;
}

Mucha más información en este enlace del curso de C

NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

pabloGarcia

  • Sin experiencia
  • *
  • Mensajes: 3
    • Ver Perfil
Re:randoms en c (funciones srand y rand)
« Respuesta #2 en: 14 de Julio 2019, 22:07 »
excelente, muchas gracias! ;)
soy nuevo aqui.. no se si se ponen valoraciones a las respuestas o como se hace pero te lo agradezco, saludos

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".