Listing 9

#include <random>
#include <array>
#include <algorithm>
#include <iostream>
using std::tr1::ranlux4_01; // predefined generator
using std::tr1::binomial_distribution;
using std::tr1::array;
using std::max_element; using std::cout;

const char *stars = "****************************************";

typedef ranlux4_01 gen_t;
typedef binomial_distribution<unsigned> dist_t;

int main()
  { // draw histogram of binomial distribution
  const int tosses = 30;
  const int trials = 100000;
  array<int, tosses + 1> bins = {0};
  int width = strlen(stars);
  gen_t gen;
  dist_t dist(tosses);
  for (int i = 0; i < trials; ++i)
    { // generate number of heads for this trial
    int heads = dist(gen);
    ++bins[heads];
    }
  int maximum = *max_element(bins.begin(), bins.end());
  double factor = double(width) / maximum;
  for (int i = 0; i < bins.size(); ++i)
    cout << (stars + width - int(bins[i] * factor)) << '\n';
  return 0;
  }