Sei sulla pagina 1di 5

Números aleatorios en C

Es el turno de C. En esta oportunidad, vamos a estudiar, cómo generar un número aleatorio y

con esos conocimientos, crear un sencillo juego en modo texto. En la Próxima clase !!!

Números aleatorios.

En esta ocasión se va a intentar construir un programa que produzca números aleatorios o al

azar. Para ello se utilizará la función rand(). Esta función genera un número entre 0 y

RAND_MAX (Una constante definida en el archivo cabecera stdlib.h) El estándar ANSI, indica

que el valor de RAND_MAX, para un entero de 16 bit (2 bytes) debe ser de por lo menos

32767.

Para ver cómo funciona esto, se mostrará un ejemplo:

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

int main(void){

 int azar = rand();


 printf("El numero escogido al azar es %d\n", azar);

return 0;

Para hacer que el rango de números sea menor, por ejemplo si se desea buscar un número al

azar para simular un dado, se utiliza el signo % seguido del número que representa el rango en

el cual se debe realizar la búsqueda. Por ejemplo, si quisiera que el rango estuviese entre 1 y 6,

entonces, la variable azar del programa anterior debe quedar así:

int azar = 1 + rand() % 6;


Debido a que la función rand() empieza a realizar la búsqueda desde el número cero, se  

antepuso el número 1 a la función rand, para que la búsqueda empiece desde 1 y no cero,

como es que viene por defecto. El programa se verá así:

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

int main(void){

 int azar = 1 + rand() % 6;


 printf("El numero escogido al azar es %d\n", azar);

return 0;
}

Seguramente más de alguno se habrá dado cuenta que al ejecutar el programa varias veces, la

función rand() escoge el mismo número al azar. Esto es así debido a que se facilita la

depuración (corrección) del programa cuando existen elementos que se generan al azar. Una

vez que el programa fue corregido, se puede emplear otra función que permita a rand()

escoger un número al azar diferente. Esta función es srand(). La función srand() solicita un

argumento unsigned (entero sin signo, o sea entero positivo) y ese número es tomado como

base o semilla para generar un número aleatorio. Ejemplo.

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

int main(void){

 unsigned semilla = 5;
 srand(semilla);

 int azar = 1 + rand() % 6;


 printf("El numero escogido al azar es %d\n", azar);

return 0;
}

Cambiando el número de la semilla, se puede generar un nuevo número al azar. Voy a probar

un nuevo programa, pero esta vez haré que me pida un valor, el cual será utilizado como la

semilla.

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

int main(void){
  unsigned semilla;
  int i;
  int azar;

  printf("Ingresa un numero base o semilla: ");


  scanf("%u", &semilla);
  printf("\n** Numeros Generados **\n");

  for(i = 0; i < 10; i++){


    semilla++;
    srand(semilla);
    azar  = 1 + rand() % 10;
    printf("%d\n", azar);
 }
return 0;
}
Cada vez que se ejecuta el programa, entregará una lista diferente de números aleatorios,

siempre y cuando se entregue una semilla diferente.

Otra forma de hacer aleatorio este programa sin necesidad de introducir una semilla cada vez

que se ejecute, es utilizar la función srand(time(NULL)). La función time, devuelve la hora en

segundos, el cual es convertido en entero unsigned. Time es capaz de proporcionar una cadena

representando la hora del día. El argumento NULL desactiva esa capacidad entregando

solamente un número. Para utilizar time, se debe agregar la cabecera time.h

Ejemplo:

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

int main(void){

  int i;
  int azar;
  srand(time(NULL));
  printf("\n** Numeros Generados **\n");

  for(i = 0; i <= 10; i++){


    azar  = 1 + rand() % 10;
    printf("%d\n", azar);
 }
return 0;
}

De esta manera, cada vez que se ejecute el programa, saldrá una secuencia diferente de

dígitos.
Aquí les dejo como seleccionar los Rangos…

Para ajustar el rango de número aleatorios podemos hacer varias cosas.

- Número aleatorios entre 0 y 50:

azar=rand()%51;

- Número aleatorios entre 1 y 100:

azar=1+rand()%(101-1);

- Número aleatorios entre 250 y 420:

azar=250+rand()%(421-250);

Potrebbero piacerti anche