h1

C – Generar números aleatorios

agosto 9, 2007

En el lenguaje de programación C, tenemos la función rand() que genera una secuencia de número pseudoaleatorios. Pero, ¿cómo se pueden conseguir número totalmente aleatorios? ¿Qué os parece si nos ayudamos de la hora del sistema?

#include stdio.h
#include stdlib.h

int main (int argc, char *argv[])
{
int counter,stime;
long ltime;

/*obtener la hora local del sistema*/
ltime = time(NULL);
stime = (unsigned) ltime/2;
srand(stime);

for (counter=0;counter menor que 10;counter++)
printf("%d ", rand());

return 0;
}

Este pequeño programa muestra por pantalla 10 número totalmente aleatorios. Espero que este simple ejemplo pueda ser útil a tod@s aquell@s que empiecen con C. Salu2!!!

Si necesitáis generar números aleatorios en un rango determinado simplemente debéis utilizar el módulo (%). Por ejemplo, para generar número aleatorios binarios:

int rand_bin(){return rand()%2;}

P.D.: Tengo problemas para editar en el código los símbolos < y > así que debéis modificar los #include <stdio.h> y <stdlib.h> y sustituir el menor que por el símbolo <. Si alguien sabe solucionarlo que me lo indique (ya he probado el &lt; y el &gt; pero no funcionan).

4 comentarios

  1. Siguen siendo pseudoaleatorios


  2. En respuesta al comentario de soto:

    Tal y como está planteado el programa sí que siguen siendo pseudoaleatorios pero el objetivo del programa es ver cómo se hace para que sean aleatorios. Me explico. La función srand() es la que se encarga de determinar la semilla (seed) sobre la cual se generaran los número aleatorios por la función rand(). En este ejemplo, la función srand() toma como semilla la hora del sistema pero si no volvemos a fijar la semilla con la hora seguirá siendo la misma y, por lo tanto, los número seguiran siendo pseudoaleatorios. Lo correcto sería incluir todo el proceso de obtener la hora en el bucle de forma que en cada llamada se varíe la semilla. Así:

    for (counter=0;counter<10;counter++){
    /*obtener la hora local del sistema*/
    ltime = time(NULL);
    stime = (unsigned) ltime/2;
    srand(stime);
    printf(“%d “, rand());
    }

    Supongo que este sería el error que tú comentabas soto, pero que debido a la brevedad de tu comentario no acabaste de concretarlo. Espero que tus próximos comentarios sean más explícitos para evitar que parezcan una crítica gratuita. Gracias por tu sugerencia. Salu2!


  3. En realidad no es aleatorio al 100% pero es lo más próximo que se puede conseguir en una aleatoriedad. El código tiene buena pinta, por cierto, veo que pones bastante código, hay páginas web que te colorean el código siendo mucho más agradable de ver.

    Saludos


  4. Hola! A mi no me funciona el codigo, porque parece que no tengo la función ‘time’, también he notado que no tengo ‘gotoxy’ y algunas otras.., bueno, estoy empezando con C.

    Wabiblog, lo de los símbolos ”, que casualidad, a mí tambien me pasa, se me cambian por ‘\|’, aunque volviendo a abrir el programa se soluciona, uso el Dev.C++. Para no cerrar, pulso ‘Alt + Shift’ y voilá, vuelve a imprimir los simbolos!!! Y para que vuelva a fallar, debo pulsar la secuencia de teclas dos veces seguidas. Qué raro no?? A ver si a ti tambien te funciona.
    Un saludo.



Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: