この記事について
C++言語を使って反復試行をするプログラムを作り、
それを使って
事象Aが起こる確率と、事象Aの反復試行との関係を可視化しました。
初心者なのでC++らしくはないですが。
プログラム
胸を張って出せるものではないですが一応。
rt.cpp
# include <iostream>
# include <math.h>
using namespace std;
long double Combination(int n,int r) {
long double result = 1;
for (int i = 0; i < r; ++i) {
result *= n - i;
result /= r - i;
}
return result;
}
long double RT(long double pb, int n, int r) // pbは確率
{
long double result;
result = Combination(n, r) * pow(pb, r) * pow(1.0 - pb, n - r);
return result;
}
const static int n_g = 30; // 試行回数
int main() {
int num, deno;
deno = 3; // 分母
num = 2; // 分子
cout << num << " / " << deno << "の確率の事象で" << endl;
long double results[n_g+1];
char graph[n_g+1][100];
for (int i = 0; i <= n_g; ++i) {
for (int j = 0; j < 100; ++j) {
graph[i][j] = '0';
}
}
for (int i = 0; i <= n_g; ++i) {
results[i] = RT(num / (double long)deno, n_g, i);
cout << n_g <<" 回の試行で " << i << " 回成功する確率の百分率は " << (int)(results[i] * 100) << " %" << endl;
for (int j = 0; j < (int)(results[i] * 100); ++j) {
graph[i][j] = '1';
}
}
for (int j = 0; j < 100; ++j) {
for (int i = 0; i <= n_g; ++i) {
cout << graph[i][99-j] << flush;
}
cout << endl;
}
}
2/3の確率で成功する事象で30回の反復試行をすると20回成功する確率が
一番高いのではと思い、作りました
また、0と1を使ってグラフっぽいものも作りました。
実行結果
わかったこと
結果として、予想通りでした。