こんにちは。ECF代表のヒガです。
本記事では初心者向けアルゴリズムの演習問題を紹介しています。日頃のプログラミング学習にご活用ください。
はじめに
アルゴリズムとは、コンピューターに行わせる計算手順のことです。自在にプログラムを作るには、プログラム言語の文法の知識とともにアルゴリズムの考え方を身につけることが必要になります。
アルゴリズム技法習得の肝は「繰り返し」の活用です。この連載では、簡単な題材で繰り返しを使うアルゴリズムの基本パターンを練習していきます。
演習問題の一覧や勉強スタイルについてのアドバイスはこちらからどうぞ。
Q024 配列の内容を表示
配列に格納されたデータを先頭から順に表示させてください。ただし、操作対象の配列はプログラムの先頭で宣言し、適当な初期値を代入してください。
初期値として {10, 20, 30, 40, 50} を使って整数型(Javaではint型)配列を準備した場合の実行例は次のとおりです。
配列の要素を1つずつ表示する方法もありますが、今回は繰り返しを使って実現させてください。
ヒント
配列の要素を指定するときに使う添字は普通の整数値の通し番号です。繰り返しのカウンタ変数をうまく活用することができます。
解答例と解説
考え方
配列という新しい内容が出てきているものの、配列の添字は整数値の通し番号でありカウンタ変数に対応させることができる、ということを踏まえれば、Q014のカウンタ変数を処理に使った繰り返しの応用となっていると言えます。
まず最初に「何を繰り返す」かを考えます。今回の場合は
- 配列のデータ要素を表示する
を繰り返すことになります。配列のデータ要素は繰り返しの中で先頭から最後まで、添字を指定しながら順に表示します。
箇条書きでまとめると、
- 次の動作を配列の要素数の分繰り返す
- 【カウンタ変数】番目のデータ要素を表示する
- 改行する
という流れになります。
フローチャート例
このフローチャートでは、配列の添字は「1」から始まるとしています。最後の要素の添字は配列の要素数と一致します。表示ループは、1から要素数まで(カウンタ変数iが要素数を超えたら終了)の繰り返しとなります。
Javaでの実装例
public class Q024 { public static void main(String[] args) { int[] a = {10, 20, 30, 40, 50}; // 操作対象配列の宣言と初期化 for (int i = 0; i < a.length; i++) { System.out.println(a[i]); } } }
Javaでは配列の添字は「0」からスタートしますので、カウンタ変数iの初期化や継続条件式は、上記のフローチャートからはそのように変更しています。配列の要素の添字は0から4(要素数 - 1)なので、0から4までの5回の繰り返しです。
配列の要素数は、Javaでは「配列変数名.length」の形で取得することができます。上の実装例の場合は「a.length」で要素数の「5」を取得することができます。
もちろん、このプログラムを作った皆さんにとっては要素数が5なのはよくわかっていることなので、
for (int i = 0; i < 5; i++) { System.out.println(a[i]); }
と書いても同じ結果を得られます。
しかし、例えば配列の初期化の内容を修正して要素数が変わってしまったとき、この条件式も併せて修正する必要が出てきます。今回の場合は修正対象は1ヶ所なのでありがたみは薄いですが、実践のプログラムでは複数の修正対象があることも考えられ、修正漏れ(バグ)が発生してしまう可能性が高まります。そのため、多少面倒に思っても、最初からlengthを使った方法で記載しておくことをお勧めします。
また、今回のように「配列の最初から最後まで」同じ処理を繰り返すアルゴリズムの場合には、次の拡張forの書き方も便利です。
for (int x : a) { System.out.println(x); }
スッキリした書き方ができ、Java以外の多くのプログラム言語でも同じ目的の構文が準備されています。なお、本連載では初心者向けということで、今後も基本のfor文でのプログラム実装例を紹介していきます。
おわりに
配列と繰り返しの相性は抜群です。というより、各プログラム言語では繰り返し構文でうまく活用できるような文法で配列が準備されている、と言った方が正しいかもしれません。
同じ処理をたくさんのデータに対して行う必要があるときには、この配列と繰り返しの組み合わせアルゴリズムをまずはベースにして検討すると良いでしょう。
次回はこちらです。
[PR]