見出し画像

朝の10分プログラミング(16日目、2024年6月24日)解説

本日の課題、おつかれさまでした。

本日の課題であった、独立な試行の確率を計算するプログラムを2つの方法で作成することができたでしょうか。
なお、本日の課題は、以下でした。

1個のさいころを2回投げるとき、1回目に4、2回目に3の倍数の目が出る確率を計算するプログラムを以下の2種類の方法で作成してください。
(1) 1回目のさいころの試行と2回目のさいころの試行が独立であることを利用して計算する方法
(2) 1回目のさいころの試行と2回目のさいころの試行が独立であることを利用しないで計算する方法


プログラム例

まず、(1)のプログラム例を示しておきます。

// 1個のさいころを2回投げるとき、1回目に4、2回目に3の倍数の目が出る確率
// 1回目と2回目を独立な試行と考えて確率を計算する
void setup(){
  
  int pip_num = 6; // さいころの目の数
  int event_A_num = 0; // 1回目のさいころの目が4となる場合の数
  int event_B_num = 0; // 2回目のさいころの目が3の倍数となる場合の数
  int total_A_num = 0; // 1回目のさいころの目で起こりうるすべての場合の数
  int total_B_num = 0; // 2回目のさいころの目で起こりうるすべての場合の数
  
  for(int i=1; i<=pip_num; i++){ // 1回目のさいころの目
    if( i == 4 ){ // 1回目のさいころの目に4が出た場合の数を数える
      event_A_num++;
    }
    total_A_num++; // 1回目のさいころの目で起こりうるすべての場合の数を数える
  }
  // 1回目のさいころの目が4となる確率
  float p_A = (float) event_A_num / (float) total_A_num;
  
  for(int j=1; j<=pip_num; j++){ // 2回目のさいころの目
    if( j%3 == 0 ){ // 2回目のさいころの目に3の倍数が出た場合の数を数える
      event_B_num++;
    }
    total_B_num++; // 2回目のさいころの目で起こりうるすべての場合の数を数える
  }
  // 2回目のさいころの目が3の倍数となる確率
  float p_B = (float) event_B_num / (float) total_B_num;
  
  float p = p_A * p_B; // 独立な試行の確率  
  println(p); // 確率をコンソールに出力
}

ソースコード1 独立な試行であることを利用する場合のプログラムの例

開発環境ウィンドウを立ち上げて、テキストエディタ部分にソースコード1を書き写して、実行ボタンを押してみると、コンソールに 0.05555556 と出力されることを確かめてみてください(図1)。

図1 コンソールに 0.05555556 と出力される

この結果は、

$$
P(4\mathrm{の目が出る}) \cdot P(3\mathrm{の倍数の目が出る})=\frac{1}{6} \cdot \frac{1}{3} = \frac{1}{18} = 0.05555555 \cdots
$$

とほぼ一致しています。

次に、(2)のプログラム例を示しておきます。

// 1個のさいころを2回投げるとき、1回目に4、2回目に3の倍数の目が出る確率
// すべての事象をカウントして確率を求める
void setup(){
  
  int pip_num = 6; // さいころの目の数
  int event_C_num = 0; // 1回目に4、2回目に3の倍数が出る場合の数
  int total_num = 0; // 起こりうるすべての場合の数
  
  for(int i=1; i<=pip_num; i++){ // 1回目のさいころの目
    for(int j=1; j<=pip_num; j++){ // 2回目のさいころの目
      // 1回目に4が出て、2回目に3の倍数が出た場合を数える
      if( i == 4 && j%3 == 0 ){
        event_C_num++;
      }
      total_num++; // 起こりうるすべての場合の数を数える
    }
  }
  float p = (float) event_C_num / (float) total_num; // 確率を計算 
  println(p); // 確率をコンソールに出力
}

ソースコード2 独立な試行であることを利用しない場合のプログラムの例

開発環境ウィンドウを立ち上げて、テキストエディタ部分にソースコード2を書き写して、実行ボタンを押してみると、コンソールに 0.055555556 と出力されることを確かめてみてください(図2)。

図2 コンソールに 0.055555556 と出力される

なお、コンソールに出力された結果は図1と図2で同じように見えますが、実は1桁違っています。ただ、丸め誤差の範囲では一致していることがわかります。

解説

今回のプログラムは多少長くはなりましたが、ともに事象を数えることができればよいので、比較的簡単に理解できるのではないでしょうか。
今回のプログラムのポイントは、前回と同じで確率を算出するところできちんとキャストができているかだと思います。キャストを通して、データ型の理解を深めてもらえればと考えています。

今回の課題については、記事『高校数学をプログラミングで解く(数学A編)「1-6 独立な試行の確率」』に詳しい解説を載せていますので、そちらをご覧ください。


明日は、「反復試行の確率」に関する課題を行う予定です。

明日もよろしくお願いします。

MK’s papa

この記事が気に入ったらサポートをしてみませんか?