Generar Números Aleatorios en C++

Para generar números aleatorios en C++ se utilizan las funciones rand y srand.
Función rand()
int rand(void);
La función rand calcula un número aleatorio en el intervalo entre 0 y RAND_MAX. El valor de RAND_MAX es una constante predefinida que representa el mayor valor que puede devolver la función rand. En Dev-C++ este valor es 32767.
Ejemplo: Programa C++ que genera 20 números aleatorios.
#include <iostream>
using namespace std;
int main()
{
   int i;
   cout << "20 numeros generados aleatoriamente:\n";
   for(i=1; i<=20; i++)
           cout << rand() << endl;
   system("pause");
}
La función rand genera números a partir de un valor inicial o semilla. Si ejecutamos el programa anterior varias veces seguidas obtendremos siempre la misma secuencia de números. Para que esto no se produzca debemos cambiar el valor inicial de la semilla cada vez que se ejecute el programa. Esto se hace con la función srand.
Función srand()
void srand(unsigned int semilla);
La función srand fija el punto de comienzo para generar números aleatorios. El generador de números aleatorios obtiene los números en función del valor de su argumento. Cuando esta función no se utiliza, el valor del primer número generado siempre es el mismo para cada ejecución (corresponde a un argumento de valor 1).
Para obtener números aleatorios mediante estas funciones, es recomendable utilizar como semilla un valor que cambie constantemente, como por ejemplo, el valor devuelto por la función time (librería ctime). Esta función devuelve el número de segundos transcurridos desde las 0 horas del 1 de Enero de 1970.
Podemos comprobar el funcionamiento modificando el ejemplo anterior para que genere números diferentes en cada ejecución:
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
   srand(time(NULL));
   int i;
   cout << "20 numeros generados aleatoriamente:\n";
   for(i=1; i<=20; i++)
          cout << rand() << endl;
   system("pause");
}
Para generar números aleatorios entre dos límites DESDE – HASTA utilizaremos la siguiente expresión:
numero = aleatorio = rand()%(HASTA-DESDE+1)+DESDE;
Ejemplo: Programa C++ que genera números aleatorios entre 4 y 10. La cantidad de números a generar se pide por teclado
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
   srand(time(NULL));
   int i, n, aleatorio, DESDE=4, HASTA=10;
   cout << "Numeros aleatorios entre " << DESDE << " y " << HASTA << endl;
   cout << "Cuantos numeros aleatorios quiere generar? ";
   cin >> n;
   for (i = 1; i <= n; i ++)
   {
             aleatorio = rand()%(HASTA-DESDE+1)+DESDE;
             cout << aleatorio << " ";
   }
   cout << endl;
   system("pause");
}

16 comentarios:

  1. Por si resulta de su interés o el de alguno de sus lectores, le dejo el enlace a un generador de números aleatorios:
    http://informatica-pfont.blogspot.com/2011/07/numeros-aleatorios.html

    ResponderEliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  3. Gracias! , una pregunta: ¿ para que esta instrucciòn "system("pause");" ? Gracias si por favor me la resuelven

    ResponderEliminar
    Respuestas
    1. para que el programa se pause hasta que presionen una tecla

      Eliminar
  4. como seria el programa implementandole un clase alguien que me ayude muchas gracias

    ResponderEliminar
  5. nada más fija el método a una clase y cuando crea una instancia lo llama instancia.tiempo(parametros)

    ResponderEliminar
  6. muy bueno mi profesor me dijo que soy un capo cual mafioso de la web

    ResponderEliminar
  7. Me marca error en el NULL, es un define ??

    ResponderEliminar
    Respuestas
    1. Agrega esta librería al inicio:

      #include

      Eliminar
  8. Por si les sale error agregar al inicio:

    #include

    ResponderEliminar
  9. Como puedo definir un rango para la creación del número aleatorio? quiero que sea un número del 0 al 9

    ResponderEliminar
    Respuestas
    1. rand()%9+1;

      Así te dará solo números dentro de ese parámetro

      Eliminar
    2. Y si necesito numeros tanto positivos y negativos? como se escribe el parametro

      Eliminar
    3. Yo personalmente necesitaba de -3 a +6 y puse '= rand()% 10 -3; ' consegui eso a prueba y error, no entiendo bien el razonamiento

      Eliminar
  10. Solicite al usuario capturar una cadena, de máximo 30 caracteres, Posterior a ello imprimir la siguiente información: Cantidad de letras, Cantidad de dígitos numéricos, Cantidad de otros caracteres, longitud de la cadena, mostrar la cadena en letras mayúsculas. Al final pregunte al usuario si desea realizar nuevamente la captura.

    Me pueden ayudar

    ResponderEliminar