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.
1:54:18 am
[…] This post was mentioned on Twitter by Como Lo Hago, ComoHago. ComoHago said: Como generar números aleatorios en C: Quizás recuerden hace algun tiempo que el buen Xaba Daba Du, nos mostró como… http://bit.ly/98hD44 […]
1:56:10 am
muy bueno, ahora como seria en java?
3:11:04 am
como genero un numero aleatorio de entre 0 y 9999
en c++
9:05:02 pm
Exelente tutorial ^^
yo estoy estudiando programacion, estoy comenzando por eso hay algunos comandos ke no comprendo pero su explicacion me dejo las cosas claras, eso si me gustaria saber de algun programa para compilar el codigo ya que Turbo C y Dev++ (los que yo uso) me envia errores.
Gracias
1:30:26 am
Estimados contertulios.. no esta demas.. decir que la tan querida odiada libreria conio.h no funciona para otros sistemas operativos como unix.. es mas facil usar la sentencia system(“pause”); que esta incluida en la libreria stdlib.h para pausar el programa por un tiempo. y olvidar o sepultar la conio.h
9:59:37 pm
hola tengo que hacer una funcion que de tal manera simule un apariamiento aleatorio de un programa de cruzamiento de inteligencia artificial
4:37:06 pm
interesentate todos los contenidos …….
9:07:52 am
BUENAZO
SIMPLEMENTE BUENAZO
11:04:06 pm
muy Uti gracias 😀 una pregunta como seria la validacion de un numero de cedula asi mismo en borland c?? gracias 😀
6:40:58 pm
gente como que el no querido c?? es el codigo mas transparente y de mas bajo nivel que existe aparte del assembler que ya es irnos muuuuuy lejos, todo es posible con c, antes de programar cualquier cosa tienen que saber este codigoo cualquiera similar, no por ser de bajo nivel es malo o arcaico, a ver como manejas bit por bit con java??