Rand() – Lo mejor en C para generar números aleatorios

¿Qué hace la función rand() en C?

La función rand en C nos permite obtener un número aleatorio. Para poder usarla, solo deberemos añadir la siguiente librería al principio de nuestro programa.

#include <stdlib.h>

Ahora, deberemos indicarle a la función rand un número límite. Por ejemplo, si solo queremos un número que no sea mayor que 10, escribiríamos la siguiente línea de código.

int num = rand() % 11;

Con esta instrucción generaríamos números del 0 al 10. Debes tener en cuenta que siempre debes sumar 1 a tu número límite.

¡Si hubiésemos escrito 10 en vez de 11, se hubiera obtenido un número del 0 al 9!

RECUERDA este modelo y nunca te equivocarás.

int num = rand() % numeroLimite + 1;

Números aleatorios en un rango

Si quieres personalizar tu rango de valores posibles, por ejemplo, del 1 al 6 también puedes hacerlo. Diremos que tu límite inferior es 1 y tu límite superior es 6. Siguiendo este modelo podrás obtenerlo:

int num = rand() % (limiteSuperior - limiteInferior + 1) + limiteInferior;
// obtener numero del 1 al 6
int num = rand() % (6 - 1 + 1) + 1;

¡PRUEBA TU MISMO EL CÓDIGO PARA VER QUÉ NÚMERO TE SALE!

¿Cómo evitar que se generen los mismos números?

Si has ejecutado múltiples veces el código que te damos, habrás visto que siempre se obtiene el mismo número. Esto no es lo nosotros queremos. Para solucionarlo usaremos la función srand(time(NULL)). Esta solo deberá usarse una vez en el principio de nuestro programa. Deberás introducir también la siguiente librería:

#include <time.h>

El programa quedaría así:

/*
  Número aleatorio del 1 al 6  
*/


#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    // AÑADIMOS FUNCION
    srand(time(NULL));

	int num = rand() % (6 - 1 + 1) + 1; // [1, 6]
	printf("%i\n", num);
}

¡PRUEBA EL CÓDIGO PARA COMPROBAR QUE SALEN NÚMEROS DISTINTOS!

Explicación y otras opciones

Para entender por qué la función rand siempre devuelve el mismo número si no usamos srand, debemos entender cómo funciona. Básicamente, parte de un número inicial que llamamos semilla, aplica un algoritmo y nos devuelve un número pseudoaleatorio. El problema es que siempre parte de la misma semilla, por eso el resultado siempre es el mismo. Al introducir

srand(time(NULL))

establecemos la semilla como el tiempo en que se ha ejecutado la función srand. Así nos aseguramos de que la semilla siempre será distinta (a no ser que seas Flash y le des a ejecutar 2 veces al mismo tiempo).

En resumen, la función srand establece como semilla el parámetro que le pasemos, en este caso, time(NULL), que devuelve el tiempo en el que ejecutamos.

Existe también otra opción de parámetro para srand. Esta es el PID del proceso donde se ejecuta nuestro programa. Al ejecutar un programa siempre se crea un nuevo proceso en nuestro computador. El PID es un número entero que identifica ese proceso. Como hay muchos ejecutándose en un ordenador, el PID del proceso que ejecuta nuestro programa irá cambiando. Para obtener el PID usamos la siguiente función:

getpid()

En este caso deberíamos incluir la librería unistd.h en vez de time.h. El programa nos quedaria así:

/*
  Número aleatorio del 1 al 6  
*/


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
    srand(getpid());
	int num = rand() % (6 - 1 + 1) + 1; // [1, 6]
	printf("%i\n", num);
}

¡PRUEBA EL CÓDIGO PARA COMPROBAR QUE SIGUE FUNCIONANDO!

Ejercicio – llenar un array con rand C

Para acabar de consolidar la información de este artículo propongo este ejercicio. Deberás crear un programa con un array de 10 enteros. Una vez creado, tendrás que llenarlo con números aleatorios del 1 al 10. Finalmente, mostrarás por pantalla el contenido del array.

diagrama que representa llenar un array con números aleatorios del 1 al 10 con la función rand

¡ASEGÚRATE DE QUE LOS NÚMEROS QUE INSERTES EN EL ARRAY SEAN DISTINTOS CADA VEZ QUE EJECUTES EL PROGRAMA!

Solución

/*
  Rellenar array de 10 posiciones con números aleatorios
*/


#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    int array[10];
    
	srand(time(NULL));
    
    // rellenar
    for (int i = 0; i < 10; i++)
	{
    	array[i] = rand() % (10 - 1 + 1) + 1;	
    }
    
    // mostrar
    for (int i = 0; i < 10; i++)
    {
    	printf("%i ", array[i]);
    }
}

Deja un comentario

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

Estoy de acuerdo con que el responsable de la web Aprendiz de Programación use los datos proporcionados en este comentario para poder comunicarse de forma efectiva.

Scroll al inicio