朝の10分プログラミング(17日目、2024年6月25日)解説
本日の課題、おつかれさまでした。
本日の課題であった、反復試行の確率を計算するプログラムを作成することができたでしょうか。
なお、本日の課題は、以下でした。
1個のさいころを3回投げるとき、2の目がちょうど2回出る確率を計算するプログラムを作成してみてください。
プログラム例
プログラム例を示しておきます。
// 1個のさいころを3回投げるとき、2の目がちょうど2回出る確率
void setup(){
float p = 1.0/6.0; // 2の目が出る確率
int n = 3; // 試行の回数
int r = 2; // 2の目が出る回数
// 反復試行の確率
float P = combination(n,r) * pow(p, r) * pow(1.0-p, n-r);
println(P); // 確率をコンソールに出力
}
// 異なるn個のものからr個を取る組合せの総数
int combination(int n, int r){
int p = 1; // 組合せの総数の分子
int q = 1; // 組合せの総数の分母
for(int i=0; i<r; i++){
p = p * (n-i);
q = q * (r-i);
}
int c = p / q; // 組合せの総数を計算
return c; // 組合せの総数を出力
}
ソースコード1 1個のさいころを3回投げるとき、2の目がちょうど2回出る確率を計算するプログラムの例
開発環境ウィンドウを立ち上げて、テキストエディタ部分にソースコード1を書き写して、実行ボタンを押してみると、コンソールに 0.06944445 と出力されることを確かめてみてください(図1)。
この結果は、
$$
{}_3C_2 \left( \frac{1}{6} \right)^2 \left( 1-\frac{1}{6} \right)^{3-2} = \frac{3 \cdot 2}{2 \cdot 1} \cdot \left( \frac{1}{6} \right)^2 \left( \frac{5}{6} \right) = \frac{5}{72} = 0.069\.{4}
$$
とほぼ一致しています。
解説
今回のプログラム例(ソースコード1)では、$${{}_3C_2}}$$の計算には自作した関数 combination を、$${(1/6)^2}$$や$${(1-1/6)^{3-2}}$$の計算には Processing で用意されている関数 pow を利用して、これらを掛け合わせることで反復試行の確率を計算するようにしています。
今回の課題については、記事『高校数学をプログラミングで解く(数学A編)「1-7 反復試行の確率」』に詳しい解説を載せていますので、そちらをご覧ください。
なお、この記事で、関数の作成方法や利用方法などを解説しています。関数はプログラミングには欠かせないものです。是非この記事で関数の概略を知っておいてもらえればと思います。ただ、一度で覚える必要はないです。今後、関数は何度も出てきますので、関数の扱いに少しずつ慣れていけると思います。
明日は、「図形を描く」ことに関する課題を行う予定です。
明日もよろしくお願いします。
MK’s papa
この記事が気に入ったらサポートをしてみませんか?