高校数学をプログラミングで解く(数学A編)「1-1 集合の要素の個数」
マガジンリスト > 数学A編 1.場合の数と確率 > 1-1 集合の要素の個数
はじめに
今回は、数学Aで学ぶ「集合の要素の個数」について、1から100までの整数のうち、ある条件を満たす整数を数えるプログラムを作成します。
4で割り切れる数の個数を数える
次のような問題を考えます。
問題
1から100までの整数のうち、4で割り切れる数は何個あるか。
この問題の答えは、25個です。「$${ 100 \div 4 = 25 }$$」で計算することができます。
アルゴリズム設計
このように答えは簡単に計算することができますが、今回はあえて要素の個数を地道に数えていくようにします。つまり、
1から100までの整数を順番に選んでいき、
選んだ整数が4で割り切れるかを確認し、
割り切れるものを数える。
という流れでプログラムを作成していきます。
プログラム
今回のプログラム(ソースコード)を示します。
// 1から100までの整数のうち、4で割り切れる数を数えるプログラム
void setup(){
int counter = 0; // カウンターを準備、初期化
for(int n=1; n<=100; n++){ // 1. 1から100までの整数を順に見ていく
if( n%4 == 0 ){ // 2. 4で割ったときの余りが0かどうか
counter++; // 3. カウンターの値を一つ増やす
}
}
println(counter); // カウントした数をコンソールに出力
}
ソースコード1 4で割り切れる数を数えるプログラム
このソースコードを、Processingの開発環境ウィンドウを開いて(スケッチ名を「countElements」としています)、テキストエディタ部分に書いて実行します。
図1のように、4で割り切れる整数の個数「25」がコンソールに出力されます。
以下では、このプログラムを例にして、今後よく利用するであろう各処理について解説しておきます。
プログラムの解説1「forループ」
まず、「1. 1から100までの整数を順番に選んでいき、」について考えます。これは、もう少し丁寧に言うと、最初に「1」を持ってきて処理(今回は4で割り切れるかどうかを確認する)を行い、次に、「2」を持ってきて処理を行い、「3」を持ってきて処理を行い、と順番に繰り返し、最後に「100」をもってきて処理を行ったら終わる、という処理の流れになります。このような処理を行うためには、forループと呼ばれる繰り返し処理を行うためのコードを利用します。次のようなコードになります。
for(int n=1; n<=100; n++){
処理;
}
変数 n に1から100まで順に代入され、それぞれの n の値に対して、{と}で囲まれた部分の処理を行っていきます。
なお、forループについては『高校数学をプログラミングで解く(準備編)「1-4 条件分岐、繰り返し処理」』でも解説していますので、そちらもご覧ください。
プログラムの解説2「if文」
次に、「2. 選んだ整数が4で割り切れるかを確認し、」について考えます。このような何らかの条件を満たすかどうかを判定するためにはif文を利用します。
if(条件式){
条件式を満たしたときの処理;
}
条件式
今回の問題では「選んだ整数が 4 で割り切れるか」ですが、これは言い換えると、「選んだ整数を 4 で割ったときの余りが0になるか」になります。このとき、(と)の間の条件式は
n%4 == 0
と書くことができます。ここで、「n」は上記で説明したforループの中の変数 n のことを指しています。また、「n%4」は「nを4で割ったときの余り」を表し、「n%4 == 0」によって、「その余りが0に等しいかどうか」を確認しています。
条件式を満たしたときの処理
条件式を満たした場合は、{と}の間に記述された処理が実行されます。今回の問題の流れでは「3. 割り切れるものを数える」に対応します。実際には、int型の変数counter(最初は 0 )を一つ増やします。これは、
counter++;
で行うことができます。つまり、4 で割り切れる整数の数を数えていくわけです。
なお、if文については『高校数学をプログラミングで解く(準備編)「1-4 条件分岐、繰り返し処理」』でも解説していますので、そちらもご覧ください。
プログラムの解説3「コンソールに出力する」
上記で説明したforループとif文を利用して、1 から 100 までの整数のうち、4 で割り切れるものを数えて、最後にコンソールに出力します。コンソールは、図1に示した開発環境ウィンドウ下部の黒い領域のことです。このコンソールに println 関数を利用して文字列を出力することができます。今回の場合、4 で割り切れるものの数 counter を出力しますので、
println(counter);
と書きます。その結果、図1のように「25」と出力されます。
なお、コンソール出力については『高校数学をプログラミングで解く(準備編)「1-3 データ型、変数、コメント、コンソール出力」』でも解説していますので、そちらもご覧ください。
プログラムの解説4「コメント」
今回の問題では、プログラムの解説1,2,3で説明した内容をソースコードに記述すれば、動くプログラムを作成することができます。ただ、これらコンピュータが処理する部分だけをソースコードに記述していると、あとでプログラムを見返したときに、どういう処理を実装してプログラムを作ったのかわからなくなってしまうことがあります。
プログラムのソースコードには、コンピュータで処理される部分だけでなく、コンピュータで処理されない部分も記述することができます。このコンピュータで処理されない部分の記述を「コメント」と呼びます。コメントは、
// この右側はコンピュータに処理されず無視される
のように、ソースコードに「//」を記述したあと、その右側に説明などを記載します。コンピュータは、「//」より右側に記述した内容は処理せず無視します。
なお、コメントについては『高校数学をプログラミングで解く(準備編)「1-3 データ型、変数、コメント、コンソール出力」』でも解説していますので、そちらもご覧ください。
まとめ
今回は、数学Aで学ぶ「集合の要素の個数」について、1から100までの整数のうち、ある条件を満たす整数の個数を数えるプログラムを作成してみました。作成したプログラムには、プログラミングをしていく上で基本となる技術が入っていました。特に、forループやif文は今後何度も出てきます。その使い方に少しずつ慣れていってもらえればと思います。また、コメントも重要です。本文にも書きましたが、コメントのないプログラムは後で見直したとき、何を記述したのかよくわからなくなることが多いです。そのため、その処理の説明をコメントとして残しておくことをお勧めしています。ぜひ、コメントすることを習慣化してもらえればと思います。
参考文献
改訂版 教科書傍用 スタンダード 数学A(数研出版、ISBN9784410209277)
Processingをはじめよう 第2版(オライリー・ジャパン、オーム社、ISBN9784873117737)
演習問題
1から100までの整数のうち、次のような数を数えて、それをコンソールに出力するプログラムを作成してください。
(1) 6で割り切れない数
(2) 4と6の少なくとも一方で割り切れる数
(3) 4でも6でも割り切れない数
ヒント
各問題の条件式は
n%6 != 0 // (1)の条件式 「!=」は「左辺と右辺が異なっているか」を表す
n%4 == 0 || n%6 == 0 // (2)の条件式 「||」は「または」を表す
n%4 != 0 && n%6 != 0 // (3)の条件式 「&&」は「かつ」を表す
と記述することができます。
演習問題の解答例
ここから先は
この記事が気に入ったらサポートをしてみませんか?