• Blog
  • Acerca
  • Autor
  • Contacto
  • Obtener numeros aleatorios en C++ (rand, srand)

    Es algo muy frecuente, cuando ya dominas todo eso de pedir y almacenar datos, ahora tu profesor te pedirá que tus programas generen números aleatorios para automatizar el proceso de llenar arreglos y todo eso.

    Así que lo primero que tenemos que hacer es incluir la librería:
    #include<stdlib.h>
    Luego inicializar los números aleatorios incluyendo esto:
    srand(time(NULL));
    *Actualización: No se porqué con algunos IDE’s tira error con la función time. Solo hay que utilizar además la librería time.h:
    #include<time.h>
    Luego guardar el número aleatorio en alguna parte:
    num=rand();

    Eso es básicamente. Para ajustar el rango de número aleatorios podemos hacer varias cosas.

    Número aleatorios entre 0 y 50:
    num=rand()%51;

    Número aleatorios entre 1 y 100:
    num=1+rand()%(101-1);

    Número aleatorios entre 250 y 420:
    num=250+rand()%(421-250);

    De forma general es:
    variable = limite_inferior + rand() % (limite_superior +1 - limite_inferior) ;

    Así que un programa que muestre 10 números aleatorios entre 1 y 10 quedaría así:

    #include<stdlib.h>
    #include<iostream>
    using namespace std;
     
    int main()
    {
        int num,c;
        srand(time(NULL));
        for(c=1;c<=10;c++)
        {
            num=1+rand()%(11-1);
            cout<<num<<" ";
        }
        cin.get();
    }
    1. Dagoo dice:

      Hola… muy buen aporte.. solo me parece k he encontrado un pekeño error donde dice rango 1-100. creo k deberia ser
      num=1+rand()%99;
      segun la formula general propuesta
      variable = limite_inferior + rand() % (limite_superior – limite_inferior)
      ya que kedaria
      variable = 1 + rand()% (100-1);
      variable = 1 + rand()% 99;

    2. Dagoo dice:

      el programa si esta bien redactado, a lo ke me referia era a la explicacion abajito de : “Eso esa basicamente…etc etc etc etc”.. estas de acuerdo?

    3. Schubert dice:

      Hey…..Buen aporte….la verdad es que estoy haciendo un juego de naipes y necesitaba esta leccion para poder barajar el deck sin que siempre sea de la misma forma…
      Thanks

    4. Luis dice:

      Bravichi!! muy bien explicado, pero si yo pusiera
      num=1+rand%10
      de todas formas me mostraria los numeros del 1 al 10

    5. Andy dice:

      Hola muy bien explicado el tema, pero tengo una duda, si yo por ej quiero que el programa me devuelva numeros de 12 en 12 al azar, osea desde el 12 hasta el 72 (12*6).. pero no que abarque todos los numeros dentro de ellos sino que valla de 12 en 12, imaginate la primira salidada puede ser 12,24,36,48,60, o 72… se entiende?

    6. Gaby dice:

      Hola! como puedo hacer estoo…no me resulta

      Clasificar la serie de números dados según dos rangos: menores de 10 y mayores de 10 y
      menores de 20.
      Los números son: 1,2,3,6,12,24,48,96,192,384,768.

      Generar diez números randomicos entre 0 y 50. Clasificar estos en los mismos rangos del
      ejercicio anterior.

    7. ey estoy haciendo un examen de c++ y tengo que programar un menu que me de las opciones de sacar numeros aleatorios del 1 al 100 y calcular una matriz triangular superior

    8. kraning dice:

      hola muy interesante el tema, pero me salio una duda si en el mencionado programa quisiera ingresar la cantidad de numeros al azar q salgan en impresion . como lo haria

      • THEbatzuk dice:

        Muy fácil, creas otra variable tipo int, la pides al usuario, luego en ciclo for pones el límite de 1 a la variable introducida:

        #include<stdlib.h>
        #include<iostream>
        using namespace std;
         
        int main()
        {
            int num,c,lim;
            srand(time(NULL));
            cout << "Limite?: "; cin >> lim;
            for(c=1;c<=lim;c++)
            {
                num=1+rand()%(11-1);
                cout << num << " ";
            }
            cin.get();
        }

        Lo hice al tanteo, pero creo que debe funcionar.

        • orales dice:

          pues ya han checado que si efectivamente da numeros aleatorios pero esos son cada vez mayores, ie son diferentes y aleatorios pero como tu reloj incremento siempre el inicio es positivamente mayor chequen y veran

    9. kraning dice:

      osea aplicar el random para un juego de dados por ejemplo, donde haya n lanzamientos, como seria “n” random ??

    10. Erick dice:

      Esta muy bien explicado, solo que ahora vienen dudas de como implementar cosas:

      El programa que muestra 10 numeros al azar.
      ¿Como se podria hacer para guardar en una variable los 10 numeros que salen y que vuelva a hacer otra ves el random para hacer otros 10 numeros y que compare los numeros del primer random y los del segundo, y asi sucesivamente?

      Suponiendo que se guarda en una variable seria asi:

      Var1: 1 3 5 7 8
      Var2: 3 5 7 1 8

      Var3: 1 3 5 7 9

      En var1 y var2 los numeros son iguales aunque no esten en orden; que la condicion fuera que si son iguales se regrese a hacer otro random y que compare y que si cambia como en var3 siga haciendo mas numeros al azar.

      Espero que me ayuden con esto, desde ya gracias ;)

      • THEbatzuk dice:

        Tu lo que necesitas es saber cómo usar matrices, estoy planeando hacer una serie de posts sobre matrices pero pues en internet hay información de sobra.

        • Erick dice:

          Sip solo que no se bien como usarlas aun y con los numeros del azar, no soy muy bueno en esto; la cosa es que tengo que hacer un archivo .dat donde se guarden o se pongan los numeros al azar en lista y que cuando haga una combinacion al azar compare con las que ya estan en el archivo .dat y vaya omitiendo las que ya esten, esta algo complicado.
          Buscare por internet lo de matrices y si no le entiendo muy bien seguire pendiente aqui; gracias por la ayuda y esta muy buena esta pagina! ;)

    11. Jas dice:

      Que buen artículo !! justo lo que buscaba
      saludos.

    12. HELLEN dice:

      hola sabes busco informacion para mi esposo que esta estudiando le ayudo aveces y la explicacion es muy buena los felicito

    13. pilo dice:

      fijenes q ami me sale un error q dice q no encuentra el archivo que
      pueda ser tengo visual estudio 2010 express

    14. juan dice:

      yo tengo una duda aqui en esta funcion que rango es el que calcula
      int i;
      for(i=0;i<5;i++){
      d1='A'+ rand()%('F'-'A');
      d2='0'+ rand()%('F'-'A');

    15. Mauricio Bustamante dice:

      HOLA , MUCHAS GRACIAS POR EL APORTE, ME SIRVIO DE MUCHO….BUENA VOZ!!!
      (Mauricio Bustamante – Peru)

    16. masila dice:

      grasias!!!!!!!!!
      me ayudo mucho!!:d
      +10;)

    17. IGNACIO dice:

      COMO PUEDO OBTENER LETRAS ALEATORIAS PERO SOLO LA A – C – G Y T

      int adn[69][5];
      srand(time(NULL));
      int i,j;

      for(i=0;i<=69;i++){
      for(j=0;j<=5;j++){
      adn[i][j]=97 + rand() % (101 – 97);
      }
      }
      CON ESE CODIGO LA MATRIZ DE 69 X 5 SE LLENA CON LETRAS DE LA A A LA D ALEATORIAMENTE, PERO COMO PODRIA ASERLO SIN UN INTERVALO, YA QUE NECESITO QUE SEAN A C G Y T SOLO ESAS 4
      SI ALGUIEN ME AYUDA ESTARIA MUY AGRADECIDO
      LOS VALORES 97 Y 101 SE DAN POR EL CODIGO ASCII

      • kimi dice:

        es sencillo puedes ponerle un valor enumerado “enum” asignandole un numero a cada valor y despues trabajar con esos 4 numeros y despues sustituir segun te salga ese numero por la letra que tenia ese valor.

    18. irene dice:

      exelenteee :D soloo qee ami me salio con el puro rand :DDD

    19. jose dice:

      #include

      using namespace std;

      int main()
      {
      int i,j;

      for(i=0,j=1;i+j<10;j=i++,j++)
      {
      if(i++==j++)
      break;
      cout<<i<<j<<endl;
      }
      cout<<i<<j<<endl;

      system("PAUSE");
      }
      hola me llamo jose quisiera me explicaras ese punto de j=i++ no lo entiendo como sale por fa y este if(i++==j++) como sale no entiendo y porq gracias

    20. ALeXiToOo...! dice:

      BUENOOOOOOOOOOOO MUCHACHO!!! ME GUSTO Y ME SALVASTE… MI APORTE AQUI ESTA LA SIMULACION DE UN JUEGO DE DADOS… Espero este bien… xD
      #include “stdafx.h”
      #include “iostream”
      #include “time.h”
      using namespace std;

      int _tmain(int argc, _TCHAR* argv[])
      {
      int n, apuesta,jgo=0,jgp=0,je=0, d1,d2,dadosj,dadoso,saldo,g, ganancia,i=0;

      cout<>n;
      cout<>apuesta;
      srand(time(NULL));
      for (i=1; i<=n;i++){
      cout<<"\tTURNO DE JUGADOR:\t";
      d1=1+rand()%(6);
      d2=1+rand()%(6);
      dadosj=d1+d2;
      cout<<dadosj<<" puntos";
      system("pause");

      cout<<"\tTURNO DE ORDENADOR:\t";
      d1=1+rand()%(6);
      d2=1+rand()%(6);
      dadoso=d1+d2;
      cout<<dadoso<<" puntos";
      system("pause");

      if (dadosj==dadoso){
      cout<<"EMPATE"<dadoso){
      cout<<"GANA PERSONA"<<endl;
      jgp=jgp+1;
      system("pause");
      system("cls");}

      if (dadosj<dadoso){
      cout<<"GANA ORDENADOR"<<endl;
      jgo=jgo+1;
      system("pause");
      system("cls");}

      }

      if(jgo==jgp){
      cout<jgp){
      cout<<"Resultado final GANA ORDENADOR";
      saldo=jgo-jgp;
      g=1;

      }else{
      cout<<"Resultado final GANA PERSONA";
      saldo=jgp-jgo;
      g=2;

      }
      }
      cout<<"Jugadas totales ganadas por PERSONA: "<<jgp<<endl;
      cout<<"Jugadas totales ganadas por ORDENADOR: "<<jgo<<endl;
      cout<<"Jugadas totales EMPATADAS: "<<je<<endl;

      ganancia=saldo*apuesta;

      if (g==0){
      cout<<"No ganan ni pierden"<<endl;

      }else{
      if (g==1){
      cout<<"Ganancia de ordenador: S/."<<ganancia<<endl;

      }else{
      cout<<"Ganancia de Persona: S/."<<ganancia<<endl;

      }
      }

      system("pause");
      return 0;
      }

    21. JORGE dice:

      hola necesito ayuda para escribir un programa enC++ para manejar el puerto paralelo( DB-25)en modo ECR usando una interfaz basica en la cual he usado los Ics 74ls573 como out y 74ls245 como int,D0 hasta D7 deben actuar como in/out , el programa debe detectar el estado de los swich puestos en la entrada de la interface y encender un led en la salida de la misma

    22. Carlos soto dice:

      excelente aporte, pero quisiera saber como hago para presentar numeros negativos de forma aleatoria, he tratado de mil y un maneras pero no me resulta.

      • THEbatzuk dice:

        ¿Números negativos? Supongo que necesitas números en un rango de -10 a 10 por ejemplo ¿no?

        La fórmula del post es general y sirve para todos los casos, solo tienes que tener cuidado con los paréntesis:

        num = -10 + rand()%(10 + 1 – (-10));

    23. Carlos soto dice:

      Una ultima pregunta.. como hago para contar cuantos números son negativos?? gracias

    24. minos dice:

      disculpa quisiera saber como puedo hacer para que el me devuelva valores incluyendo el cero, es decir que el me devuelva valores entre 10 y 20 pero que a la vez sea posible que me salga el cero… como hago?
      gracias por el aporte

    25. Marco dice:

      Hola alguuien me puede decir como se puede implementar para ocupar tres direntes rangos en el mismo rand????

    26. Cristian Camilo dice:

      Hola, me gustaría saber como hago para que el número aleatorio que produzca el programa, sea siempre de 6 dígitos. Pero necesito que me genere números desde el 000000 hasta el 999999

    27. pilo dice:

      #include
      #include
      using namespace std;

      int main()
      {
      int num,c;
      srand(time(NULL));
      for(c=1;c<=10;c++)
      {
      num=1+rand()%(11-1);
      cout<<num<<" ";
      }
      cin.get();
      }
      me aparese un error en srand(time(NULL));

    28. alexs dice:

      hola…es muy bueno el aport
      mm..me pueden ayudar… nesecito un programa en que 3 usuarios den 10 numeros y despues se den los numeros eleatrios y ver quien le atino a mas numeros…como e l melate…ok graxias!!!

    29. samuel dice:

      ola, necesito un favor: necesito generanar numeros aleatorios, pero cuando se generen, guardarlos en un arreglo ya ordenados de menor a mayor, sin usar ningun metodo de ordenamiento ni nada. simplemente cuando se generen, que se generen ordenadamente. gracias

    30. marcus dice:

      hola necesito crear un programa en c++ que simule una partida de cartas entre dos jugadores. A 10 bazas , se entregan 3 cartas y en cada baza se suelta una carta se compara y el que tenga la carta mayor puntua… es para examen:(

    31. Miguel dice:

      Hola quisiera saber como como serian los codigos para encontrar el valor maaximo y minimo de una serie de 10 numeros alatorios. gracias(para max y min crear modulos tipo procedimiento)

    32. Mago dice:

      amigo como puedo hacer que en la serie de numeros aleatorios que se genera del 0 al 9, pueda tambien aparecer el 0?

    33. Sony dice:

      M;e acabas de salvar la vida con esta ayuda q me diste, esta muy bien explicado el post, te luciste….!!!

    34. Sony dice:

      Me acabas de salvar la vida con esta ayuda q me diste, esta muy bien explicado el post, te luciste….!!!

    35. pedro dice:

      mmm me salen numero negativos y no lo quiero q hago

    36. cristobal dice:

      y para pedir que el usuario ingrese los datos como quedaria

    37. roberto dice:

      saludoz!!!
      quisiera saber como se pueden elevar los numeros que me da aleatorios al cubo y despues mostrarlos en pantalla???
      :)

    38. ALFREDO dice:

      hola acabo de ver todo los comentarios. y me parecen interesantes.YO apenas estoy en c ,y la vdd casi no lo entiendo pero le dedico un poco de tiempo. pero saben tengo una duda..Bueno de hecho estoy haciendo un programa sobre la loteria nacional, que me indica el 1er y 2do y 3er lugar……pero en el rando solo mesale 5digitos cuando pongo esto…… num=rand()%1000000 como le hago para que me genere 6 numeros?

    39. jdcr dice:

      buen post…..ocupo una ayudita….debo realizar una matriz de 4 filas por 3 columnas con números múltiplos de 5 de forma automática y al final despliegue la matriz completa…………se podría decir que ya realice todo, lo que no logro hacer es que me de los números automáticamente

    40. JeLe dice:

      Hola,necesito llenar un vector de tamaño “x”, con numeros aleatorios entre 0 y 1. El vector debe ser de tipo int, ojala usando STL, y sino pues no importa

    41. Giancarlo dice:

      HOLA ME PUEDEN DAR AYUDAR CON EL CODIGO PARA HACER QUE ME TOQUEN NUMEROS ALEATORIOS DE 1 A 100 CON RANGO DE EXITO DE 15%?

    42. yamina dice:

      hola yo recién empiezo a programar y me gusta pero quiero q me den una mano como empiezo desde 0… espero su ayuda.. graxxx

    43. Dani dice:

      Hola me pueden ayudar para simular la gestion de reservas y facturacion de 10 habitaciones, lo unico que se, es que hay que utilizar funciones para cada opcion(y creo que ficheros tb, esa es mi duda)

    1. [...] tienen duda con los números aleatorios pueden checar este post: Obtener número aleatorios en c++. Aquí pueden ver el código [...]

    2. [...] Para dudas respecto a la generación de números random está este post: Obtener números aleatorios en C++. [...]

    Hola, escribe aquí tu comentario: