10/14/2005

Números aleatorios en C++

Veamos un ejemplo que genere números aleatorios del 1 al 20.

//Ejemplo generar numeros aleatorios del 1 al 20.
#include <iostream>
#include <cstdlib> //tiene la definicion de la funcion RAND (random)
using std::cout;
using std::endl;
using std::cin;
int main ()
{
  int cantidad;
  cout << "Cuantos números quiere generar?" << endl;
  cin >> cantidad;
  for (int contador =1 ; contador <= cantidad ; contador++)
    {
      cout << (1 + rand() % 20); //mostramos por pantalla los numeros generados del 1 al 20
      cout << endl; //salto de linea para separlos
    }
  return 0 ;
} //fin de main.

Veamos la línea que nos interesa: cout << (1 + rand() % 20);

La sentencia rand() por si sola devuelve enteros entre 0 y un número tope de 32,767 aproximádamente. Para limitar nuestro rango utilizamos: rand() % 20 que nos va a estar dando los enteros del 0 al 19.

Entonces antes de mandarlo al cout, le sumamos uno, para que lo que salga por pantalla sean los enteros del 1 al 20.

Ver como hacer para compilar este programa.

29 comentarios:

Jano dijo...

Gracias por el ejercicio

Whishy dijo...

muy buen ejersicio de verdad ;-))

Anónimo dijo...

y como genero numeros aleatorios entre un rango de -10 a 10. gracias

Anónimo dijo...

o__O gracias me sacaste de una gran duda ^^

Jhon Freddy dijo...

esta bueno el ejercicio, pero si quiero números ente 0 y 1 ejemplo:

0.2 0.3 0.9 0.5

Anónimo dijo...

Por ayudenme..Como hago para generar numeros entre 0 y 1 en c++

Anónimo dijo...

es un chiste leiste el post?
tenes que usar "rand() % 1 "
que tonto eres.

Adrián dijo...

Para numeros entre un piso y un techo dado:

int NumAleatorio(int piso, int techo){
int Num;
Num = piso + ( rand() % ((techo + 1) - piso));
return Num;
}

Adrián dijo...
Este blog ha sido eliminado por un administrador de blog.
cMr dijo...
Este blog ha sido eliminado por un administrador de blog.
Anónimo dijo...

me pueden ayudar en como hacer el problema de los numeros aleatorios en java? :D , yo lo pase a java pero me sale error en esta linea =$
System.out.print(1+rand()%20);

Anónimo dijo...

esta buena su pagina y los ejemplos son muy buenos y claros.


gracias!!!! ;D

Anónimo dijo...

es un chiste leiste el post?
tenes que usar "rand() % 1 "
que tonto eres.

Imbecil eres tù!!!
Date cuenta...pobre diablo...

eve dijo...
Este comentario ha sido eliminado por el autor.
eve dijo...

para un numero aleatorio entre 0 y 1 deben hacer.

i = 1 + rand() % 1000; //depende los decimales que quieran
q= 1/i;

listo

Alucard dijo...
Este comentario ha sido eliminado por el autor.
Alucard dijo...

como hago para q sea un aleatorio q no se repita cada vez q compilo
compilo por 1º vez 7 11 3 11 17...
compilo por 2º vez 7 11 3 11 17...
siempre bota los mismos numeros aleatorios cada vez q compilo

Anónimo dijo...

Eve dijo:
"para un numero aleatorio entre 0 y 1 deben hacer.

i = 1 + rand() % 1000; //depende los decimales que quieran
q= 1/i;"

Es incorrecto. No sirve ya que nunca podremos obtener de este modo números mayores de 0.5 excepto la unidad misma. Ya que la secuencia ordenada de casos "q = 1/i" serían: [1/1, 1/2, 1/3, 1/4...1/1000]. Si te das cuenta, salvo 1/1, todos los demás son igual o menores que 0.5. Jamás obtendríamos 0.8, ni ninguno mayor de 0.5.

Lo correcto en este caso es:
d = 3; // nº de decimales
u = 10^3; // simplificando. Hay que usar la función para potencias.
i = 1 + rand() % u;
q = i/u; //devuelve entre 0 y 1.

Así conseguiremos cualquier número decimal (con 3 decimales) entre 0 y 1.

Anónimo dijo...

i=rand()%1000+1
j=i/1000

la "i" daría numeros entre 1 y 1000 y la "j" entre 0.001 y 1
el 1000 lo podéis cambiar segun los decimales que queráis

Anónimo dijo...

hola!!!

i = 1 + rand() % 1000; //depende los decimales que quieran
q= 1/i;


este ejemplo esta bien para generar numeros aleatorios, ya solo deberas declarar la variable "q" como tipo flotante, en este caso la declaracion seria de la siguiente manera:

float q;

suerte ;D
salu2.

yenzen Garcia Rodriguez de la UNI px dijo...

no men estan equivocados; el tio quiere generar valores entre 0 y 1; entoncs los valores generados seran por ejemplo numas 0.1 0.3 0.56, depende de ti con cuantos decimales trabajas, para ello no se se utiliza rand()%N sino se utiliza drand()%N, espero aver ayudado algo: para este se utiliza la biblioteca #include
yo trabajo con visual 0.6 C++, mi mail si tienen consultas yenzen_29@hotmail.com

x dijo...

para la máxima precisión posible estaría bien usar la macro RAND_MAX definida también en stdlib.h

double r = (double) rand() / RAND_MAX;

Un saludo!

Anónimo dijo...

realmente bueno me sacaste de una dudilla en el rango realmente ya se como hacerlo gracias a ud!!!!! bnn

Anónimo dijo...

y como le hago si quiero generar datos en el rango[1, 1000000] ??? por que se supone que hay un limite de 3600 noo??

Anónimo dijo...

¿Cómo se hace para encontrar un número del 10 al 50?
No acabo de entender el concepto del random.

Anónimo dijo...

tu programa no se puede eliminar la cagaste viejo la hiciste mal

Anónimo dijo...

para que la secuencia no se repita que hay que introducir en el programa gracias

Anónimo dijo...

para generar numeros aleatorios pero sin que la secuencia sea igual cada vez que lo compilas que habria que ponerle?? gracias

Anónimo dijo...

Necesito generar dos números aleatorios num1 y num2, pero nunca deben ser iguales, ¿es posible hacer esto? Ya tengo un programa que me da estos dos números pero a veces coinciden los dos (num1=num2), esto es lo que quiero evitar.