Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: pabloGarcia en 14 de Julio 2019, 19:53

Título: diferencia entre aleatorio y pseudoaleatorio randoms en c srand y rand lenguajec
Publicado por: pabloGarcia en 14 de Julio 2019, 19:53
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!
Título: Re:randoms en c (funciones srand y rand)
Publicado por: Kabuto 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 (https://aprenderaprogramar.com/index.php?option=com_content&view=article&id=917:generar-numeros-o-secuencias-aleatorios-en-c-intervalos-srand-y-rand-time-null-randmax-cu00525f&catid=82&Itemid=210) del curso de C

Título: Re:randoms en c (funciones srand y rand)
Publicado por: pabloGarcia 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