見出し画像

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

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

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

1から100までの番号札から1枚を取り出すとき、次の確率を計算するプログラムを作成してください。
(1) 5の倍数の札を取る確率
(2) 5の倍数または8の倍数の札を取る確率


プログラム例

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

// 確率を計算する
void setup(){
  
  int card_num = 100; // 番号札の数
  int event_num = 0; // 事象が起こる場合の数
  int total_num = 0; // 起こりうるすべての場合の数
  
  for(int i=1; i<=card_num; i++){ 
    if( i%5 == 0 ){ // (1) 5の倍数の札を数える
      event_num++;
    }
    total_num++; // 起こりうるすべての場合の数を数える
  }
  float p = (float)event_num / (float)total_num; // 確率を計算
  println(p); // 確率をコンソールに出力
}

ソースコード1 5の倍数の札を取る確率を計算するプログラムの例

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

図1 コンソールに「0.2」と出力される

この結果は、

$$
\mathrm{5の倍数の札を取る確率} = \frac{5\mathrm{の倍数の札を取る場合の数}}{\mathrm{起こりうるすべての場合の数}}=\frac{20}{100} = 0.2
$$

と一致しています。

また、(2)については、ソースコード1の

   if( i%5 == 0 ){ // (1) 5の倍数の札を数える

の部分を、「5の倍数または8の倍数の札を数える」ように、

  if( i%5 == 0 || i%8 == 0 ){ // (2) 5の倍数または8の倍数の札を数える

と変更することで「5の倍数または8の倍数の札を取る確率」を計算することができます。実際に、ソースコード1を書き換えて、実行ボタンを押してみると、コンソールに 0.3 と出力されることを確かめてみてください(図2)。

図2 コンソールに「0.3」と出力される

この結果が正しいことは、別途確認してみてください。


解説

場合の数を数えることは、以前の課題でも行ったことなので、問題なくかけたのではないでしょうか。
今回のプログラムのポイントは、場合の数を数えたあとに確率を算出するところだと思います。つまり、ソースコード1の

float p = (float)event_num / (float)total_num; // 確率を計算

の部分です。右辺の各変数の前に「(float)」を入れています。これを入れる意味を理解するために、一度、「(float)」を外して実行してみてください。

図3 (float)を外して実行した結果

図3のように、コンソールには 0.0 と間違った結果が出力されます。これは、変数 event_num や total_num が整数型(int型)の変数であることが原因です。
たとえば、$${20 \div 100}$$の計算を考えてみると、2つの結果が考えられます。1つ目は

$$
20 \div 100 = 0 \ \ \mathrm{あまり} \ \ 20
$$

というもの、2つ目は、

$$
20 \div 100 = 0.2
$$

というものです。変数や値が整数型であった場合、割り算の計算は前者のように計算されます。一方、変数や値が浮動小数点数型であった場合、割り算の計算は後者のように計算されます。
つまり、今回の問題では後者のように計算したいのですが、変数 event_num や total_num が整数型(int型)の変数であったため、前者のように計算され、その商である 0 がコンソールに出力されてしまったというわけです。
これを回避するために、 確率を計算する前に変数 event_num や total_num を整数型(int型)の変数から浮動小数点数型(float型)に変えてやる必要があります。それを行うのは簡単で、int型の変数の前に「(float)」と書いてやるだけでよいです。その結果、図1のように正しい値が得られます。
なお、変数の型を変えることを「キャスト」と呼びます。

今回の課題については、記事『高校数学をプログラミングで解く(数学A編)「1-5 事象と確率」』に詳しい解説を載せていますので、そちらをご覧ください。
また、この記事の下の方に、(2)の問題を「和事象の確率の基本性質」を用いた別の方法も紹介していますので、そちらも確認しておいてください。

今週はここまでです。

来週は、「確率」に関する課題を引き続き行ったあと、後半は図形の問題について扱っていく予定をしています。

来週もよろしくお願いします。

MK’s papa

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