こんにちは。ECF代表のヒガです。
本記事では初心者向けアルゴリズムの演習問題を紹介しています。日頃のプログラミング学習にご活用ください。
はじめに
アルゴリズムとは、コンピューターに行わせる計算手順のことです。自在にプログラムを作るには、プログラム言語の文法の知識とともにアルゴリズムの考え方を身につけることが必要になります。
アルゴリズム技法習得の肝は「繰り返し」の活用です。この連載では、簡単な題材で繰り返しを使うアルゴリズムの基本パターンを練習していきます。
演習問題の一覧や勉強スタイルについてのアドバイスはこちらからどうぞ。
Q031 配列データの平均
配列に格納された数値データの平均を求め表示させてください。ただし、操作対象の配列はプログラムの先頭で宣言し、適当な初期値を代入してください。
初期値として {68, 55, 72, 93, 87} を使って整数型(Javaではint型)配列を準備した場合の実行例は次のとおりです。
ヒント
Q030「配列データの合計」を求めることができれば、後は平均の計算をプラスするだけです。合計の計算は繰り返しアルゴリズムですが、平均の計算は繰り返しとは関係ありません。
解答例と解説
考え方
ヒントにもあるように、配列データの合計値を求め、その合計値を要素数で割れば平均が求まります。合計値の計算についてはQ030を参照してください。
フローチャート例
このフローチャートでは、配列の添字は「1」から始まるとしています。最後の要素の添字は配列の要素数と一致します。表示ループは、1から要素数まで(カウンタ変数iが要素数を超えたら終了)の繰り返しとなります。
合計ループの終わった直後に「sum / aの要素数」の計算を行っています。これが平均です。
Javaでの実装例
public class Q031 { public static void main(String[] args) { int[] a = {68, 55, 72, 93, 87}; // 操作対象配列の宣言と初期化 int sum = 0; // 合計格納用変数 for (int i = 0; i < a.length; i++) { // 合計ループ sum = sum + a[i]; } int ave = sum / a.length; // 平均の計算 System.out.println(ave); } }
Javaでは配列の添字は「0」からスタートしますので、カウンタ変数iの初期化や継続条件式は、上記のフローチャートからはそのように変更しています。配列の要素の添字は0から4(要素数 - 1)なので、0から4までの5回の繰り返しです。
上のフローチャートとの対応からプログラム実装例の流れを確認しましょう。
なお、Javaではint型同士で割り算を行うと、その計算結果はint型となります。もし割り切れなかった場合は小数点以下は切り捨てられます。もし、小数点以下も表示させたいのであれば、割り算のタイミングで以下のようにdouble型に型変換(キャスト)を行う必要があります。
double ave = (double)sum / a.length; // 平均の計算(sumをdouble型に型変換)
おわりに
実質的にはQ030の合計と同じアルゴリズムなので解説もほとんどないのですが、「合計を求めて、その結果でなにかする」ようなアルゴリズムのパターンとなります。
本連載で紹介しているアルゴリズムの各パターンは、実践ではそれ単体で使えるものというより、今回のように処理をプラスアルファしながらカスタマイズしていくのが通常です。
次回はこちらです。
合同会社イー・シー・エフでは、子ども向けプログラミングなどの教育講座を実施しています。プログラミング教室の案内や教育教材の情報、また関連するご相談・問い合わせにつきましては下記よりご確認ください。