miércoles, 13 de abril de 2011

Generación de Números Aleatorios en C++

Este programa genera números aleatorios en C++ usando  las funciones rand() y srand().  He decidido generar decimales con una precisión alta en vez de enteros, aunque es muy fácil modificar este código para generar enteros, sólo elimine y e imprima x.
La instrucción 

x =  rand() % 6;

genera un número entero entre 0 y 5. Por lo tanto  la instrucción 

s = 1 + rand() % 6;

genera números aleatorios enteros entre 1 y 6. Con eso hemos resuelto nuestro problema; sin embargo rand() genera siempre el mismo número. Para hacer que el número cambie en cada corrida es necesario llamar a la función srand(). Atención, estas funciones requieren el encabezado #include <cstdlib>srand() hace que cada vez el número generado por rand() sea distinto, aunque necesita una semilla. Esta semilla puede introducirse por el usuario, sin embargo para evitar la incomodidad de tener que hacerlo siempre, y sobre todo si necesitan usar métodos numéricos, se introduce automáticamente como semilla la hora, tomada de la computadora, para esto se usa srand(time(NULL)). Importante: time() requiere el encabezado #include<ctime>.
Es importante tener en cuenta la instrucción setprecision(), que indica efectivamente cuántos dígitos se han de imprimir. Puede ocurrir un error sutil si se quiere generar decimales muy precisos pero no se modifica la salida estandar de precision. Para evitar esto es siempre es una buena práctica indicar directamente con qué precisión queremos la salida. Para esto se incluye #include<iomanip>.




 //ESTE PROGRAMA GENERA NUMEROS ALEATORIOS 
 //ENTRE -0.0001 Y 0.0001

 #include <iostream>
 using namespace::std;

 // Este encabezado indica que
 // se usara entrada-salida estandar

 #include <ctime>
 
 // ctime se incluye para poner como
 // semilla de srand la hora de la
 // computadora


 #include <iomanip>
 using std::setprecision;
 
 // Para imprimir los decimales
 // con la precision deseada


 enum { Tamano = 1000};

 // En este caso enum funciona como
 // #define Tamano 100




 int main()

 {      // Abre main
 
  // srand hace que  rand() genere
  // numeros distintos. Se puede hacer
  // una version en la que el usuario
  // introduzca una semilla, pero aqui
  // la semilla se introduce automaticamente
  // usando la hora de la computadora

  srand(time(NULL));
  
  double x, y;
  
  for ( int n = 1; n <= Tamano; n++)
  {          // Abre for

  x = (-5000 + rand() % 10000);
  y = x/10000; 

  cout << setprecision(10) << y << endl; 

  }     // Cierra for
 }       // Cierra main



Related Posts Plugin for WordPress, Blogger...