uniform.h
#pragma once
class uniform
{
private:
double a, b, generate_num;
int * seed;
int s;
int M, N, i, j;
public:
uniform()
{
M = 1048576;
N = 2045;
}
void generate();
double random_number(double, double, int *);
};
double uniform::random_number(double a, double b, int * seed)
{
(*seed) = N * (*seed) + 1;
(*seed) = (*seed) - ((*seed) / M) * M;
generate_num = static_cast<double>((*seed)) / M;
generate_num = a + (b - a) * generate_num;
return (generate_num);
}
bernoulli.h
#pragma once
#include "uniform.h"
class bernoulli
{
private:
double p, u;
int * seed;
int s, x, generate_num, i, j;
public:
bernoulli() {};
void generate();
int random_number(double, int *);
};
int bernoulli::random_number(double p, int * seed)
{
uniform unif_num;
u = unif_num.random_number(0.0, 1.0, seed);
x = (u <= p) ? 1 : 0;
return (x);
}
bin.h
#pragma once
#include "Bernoulli.h"
class bin
{
private:
double p;
int * seed;
int x, n, i, j, k, s, generate_num;
public:
bin() {}
void generate();
int random_number(int, double, int *);
};
int bin::random_number(int n, double p, int * seed)
{
bernoulli ber_num;
x = 0;
for (k = 0; k < n; k++)
x += ber_num.random_number(p, seed);
return (x);
}
bin.cpp
//产生50个参数n = 5、p = 0.7的二项式分布的随机数
#include <iostream>
#include <iomanip>
#include "bin.h"
using namespace std;
void main()
{
bin solution;
solution.generate();
}
void bin::generate()
{
cout << "输入二项式分布的参数n:";
cin >> n;
cout << "输入二项式分布的参数p:";
cin >> p;
cout << "输入随机数的种子:";
cin >> s;
cout << "生成随机数的结果为:" << endl;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 5; j++)
{
generate_num = random_number(n, p, &s);
cout << setw(10) << generate_num;
}
cout << endl;
}
}