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.
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.
2:45:43 pm
que rol con ese %100
4:07:21 am
como generar un numero entre 0 y 36 es que voy hacer un juego de ruleta para la escuela en borland c++
8:51:07 pm
No se como agradecer esta ayuda. Por más que leía los apuntes de la universidad no era capaz de entender nada. Esto está tan claro que muchos deberían aprender a comunicar primero. Me habeis animado a practicar. Era muy desesperante…
…mil gracias.
8:55:41 pm
No se como agradeceros esta ayuda. Estoy cansada de leer los apuntes de la universidad, y soy incapaz de aplicar nada. Ha sido tan claro este ejemplo y sus comentarios que me habeis animado a seguir…
…mil gracias.
9:41:37 pm
Gracias. Esto me ayudo mucho 🙂
11:07:31 am
como generaria numeros aleatorios pares o impares????
2:57:36 pm
muy buena explicacion, me sirvio de mucho,
gracias!!
11:09:30 pm
Delicioso tutorial,exquisito. Me gustaria conozer personamente al escritor.
6:20:04 pm
[…] original ¦ comolohago.cl Share this:TwitterFacebookPinterestMe gusta:Me gustaBe the first to like […]
2:15:36 pm
Excelente aporte me ayudo mucho gracias 😀