1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| #include <fstream>
#include <boost/random/triangle_distribution.hpp>
#include <boost/random/variate_generator.hpp>
#include <boost/random/mersenne_twister.hpp>
#include <ctime>
/*
* Une classe pour encapsuler les éléments de Boost.Random.
* Elle-même un foncteur.
*/
class TriangleRandomGenerator
{
public:
// Le constructeur prend les trois valeurs dont tu parles: a (borne basse),
// c (borne haute) et b (valeur la plus probable).
TriangleRandomGenerator(double a, double b, double c);
// Ici on fabrique un foncteur, mais on pourrait aussi bien avoir une méthode
// comme "double next_number();" qui ferait le même effet
double operator()();
private:
boost::mt19937 engine;
boost::triangle_distribution<double> generator;
boost::variate_generator<boost::mt19937& ,boost::triangle_distribution<double> > binded;
};
TriangleRandomGenerator::TriangleRandomGenerator(double a, double b, double c)
: engine(static_cast<long unsigned int>(time(0)) // Initialise le moteur en fonction de l'heure
, generator(a, b, c) // Initialise la distribution triangulaire
, binded(engine, generator) // Lie les deux précédents
{
}
double TriangleRandomGenerator::operator()()
{
return binded();
}
int main()
{
TriangleRandomGenerator gen(10.0, 15.0, 20.0);
std::ofstream file("fichier.txt", std::ios_base::app);
for (int i = 0; i < 17; ++i)
{
file << gen() << "\n"; // ou file << gen.next_number() << "\n"
}
file.flush(); // ;-)
return 0;
} |
Partager