Programacion

Ξ 33 comentarios

Cómo generar números aleatorios en C

por Vertig0
Cómo generar números aleatorios en C

2806839412_afdfba2580 by you.

Quizás recuerden hace algún tiempo que el buen Xaba Daba Du, nos mostró como generar números aleatorios en PHP. Ésta vez y por petición expresa de nadie de millones de personas, les traemos lo mismo, pero ésta vez en otro lenguaje, el siempre presente y nunca querido C.

Para ver Cómo lo Hago, vamos después del salto.

Cómo generar números aleatorios en C

¿Qué necesitamos?

  • Un editor de lenguaje C, tipo Borland C++.

¿Cómo Lo Hago?

1.- Primero explicaremos algunos conceptos:

En C, existe una función llamada rand(), que genera números aleatorios. El problema que tiene esta función es que siempre que reinicies el programa, aparecerán los mismos números.

Para evitar esto, hay que darle un número “semilla”, el cual operará como base para la generación de la secuencia de números. El problema con esto, es que si le damos un número fijo, volvemos al problema anterior, ya que siempre utilizará la misma base definida y por ende la secuencia será la misma.

Entonces, lo que necesitamos es darle un número “semilla” dinámico, esto es, que vaya cambiando cada vez que ejecutemos el programa.

Sabiendo esto, la función que da la semilla a rand() es srand(), que recibe como parámetro (lo que va entre los paréntesis) el número semilla, que en este caso, será la hora del sistema en segundos. Así, a menos que el programa se ejecute 2 o más veces en menos de un segundo, los números cambiarán.

La función para saber la hora actual del sistema es time(NULL).

Sabiendo esto, vamos al código. Haremos un generador de números aleatorios, donde la cantidad de estos, la decidirá el usuario, ingresando esta cantidad por teclado.

#include<stdio.h>  // libreria basica para entrada y salida
#include<stdlib.h> // libreria para el uso de rand()
#include<conio.h>  // libreria para el uso de getch()
#include<time.h>   // libreria para el uso de time()
void main( )
{
     // Declaracion de variables
     int numero,cantidad,contador;
     int hora = time(NULL);

     // Semilla de rand();
     srand(hora);

     /* Recogemos por teclado la cantidad de
        numeros que quiere el usuario */

        printf("Ingrese la cantidad de numeros
        aleatorios que desea generar\n");
        scanf("%d",&cantidad);

        /* Generamos un ciclo que se repite la cantidad
           de veces indicada. En cada vuelta del ciclo se
           genera y se imprime un numero aleatorio. */

        for(contador = 0; contador<cantidad; contador++)
        {

               numero = rand()%100;
               printf("%d ", numero);
        }
       getch();  // genera una pausa en la ejecucion del programa

}

A pesar de que esta explicado con comentarios, desmenucemos un poco.

#include<stdio.h>  // libreria basica para entrada y salida
#include<stdlib.h> // libreria para el uso de rand( )
#include<conio.h>  // libreria para el uso de getch( )
#include<time.h>   // libreria para el uso de time( )

Estos cuatro includes, son para llamar a las librerías necesarias para ejecutar el programa. La librería conio.h, no es necesaria para que el programa funcione, solo la llamamos pasar usar la función getch( ) y generar una pausa en el programa. Con esto podremos ver el resultado por pantalla antes que se cierre el programa.

// Declaración de variables

int numero,cantidad,contador;
int hora = time(NULL);

Acá declaramos el tipo y que variables utilizaremos. Definimos 4 variables de tipo int (entero), 3 de ellos sin inicializar (es decir, sin valor inicial) y una de ella inicializada.

Las 3 sin valor inicial, serán el número aleatorio que se genera (número). La cantidad de números aleatorios que se generarán (cantidad) y un contador para crear un ciclo.

// Recogemos por teclado la cantidad de numeros que quiere el usuario

printf("Ingrese la cantidad de numeros aleatorios que desea generar\n");
scanf("%d",&cantidad);

Mostramos por pantalla el mensaje para el usuario y asignamos el valor que se ingrese, a la variable cantidad usando el símbolo & (ampersand).

// Generamos un ciclo que se repite la cantidad de veces indicada
// en cada vuelta del ciclo se genera y se imprime un numero aleatorio.

for(contador = 0; contador < cantidad; contador++)
{
      numero = rand()%100;
      printf("%d ", numero);
}

getch();     // genera una pausa en la ejecucion del programa

}

Aquí es donde generamos el ciclo, con el bucle for. Tenemos 3 parámetros separados por ; (punto y coma), en el primero inicializamos la variable contador con el valor cero. En la segunda ponemos la condición que se debe cumplir para terminar el ciclo, en este caso decimos que el ciclo se repita siempre que contador sea menor que cantidad. Ojo, aquí decimos que sea menor que el número porque el valor inicial es cero y empezamos a contar desde cero y no de uno.

Al final aplicamos un getch( ) para detener el programa y lograr ver los resultados.

Les invito a realizarlo y hacer sus aportes. Cualquier consulta o comentario que puedan tener, no duden en dejarnos unas líneas a continuación. Como siempre, este tutorial ha sido:

Por ahora,

Me despido.

Comparte este tutorial

El culpable de todo esto

Responsable de transformar miles de k310 en w200, y sobrevivir para contarlo, Jorge Nitales tuvo sus inicios en los barrios bajos de Papúa y Nueva Guinea, en una exitosa empresa productora de Paraguas de Bambú. Luego de alcanzar fama y fortuna, lo dejó todo para jubilar a la edad de 16 años y dedicarse a la cosecha de tomates hidropónicos en la zona de Pemuco. Es ahí donde fue reclutado para CLH por Dexter, un asiduo comprador de la hortaliza. A la fecha se le adjudica el haber enseñado a miles de personas en cientos de países como teletransportarse y hacer el famoso Kamehamehá, rumoreándose fuertemente una Genkidama en el futuro próximo. Las baterías vienen por separado.

En los barrios marginales se le conoce como: Vertig0

Comentarios en Facebook

33 Comentarios

  • Gracias por sus tutoriales, no son buenos, son excelentes, de primera.
    Solo me falta la parte 6, donde lo ubico?…

  • holi 🙂

  • Magnífico aporte y lo digo enserio.

    Un abrazo 🙂

  • Hola.
    En la parte en donde le otorgas el valor aleatorio al numero:
    numero=rand()100%;
    podrías decirme para que sirve “100%”?

  • Estoy usando para compilar el gcc , y por lo tanto no tengo la libreria conio.h
    El programa corre sin getch , pero solo me aparece 1 solo numero aleatorio.
    Como hago para que aparesca el resto

    gracias

    • Hola cesar,

      Si te aparece solo un número aleatorio es que hay un problema con tu loop for. Revisa eso.

      Saludos!

  • Hola que tal, quisiera saber como introducir un programa como este en un archivo (en un .txt) para que salgan los numeros aleatorios en un bloc de notas si pudieras ayudarme y explicarme el programa te lo agradeceria

  • como hacer eso mismo pero contar cuantas veces se repite un numero. me pueden ayudar por favor. es mi examen.

  • sirve para predecir secuencias de un bolillero?? una tras otra las que deben salir?

  • Ordénalo un poco, quita los comentarios que a veces (no sé por que motivo fallan), y asegúrate de guardar el archivo como “.c” y listo. PD: yo uso Dev-C++ y esto que te digo me solucionó muchos dolores de cabeza!!

1 2 3 4

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Gente linda que nos quiere

Donde mas estamos