こんにちは。ECF代表のヒガです。
はじめに
アルゴリズムとは、コンピューターに行わせる計算手順のことです。自在にプログラムを作るには、プログラム言語の文法の知識とともにアルゴリズムの考え方を身につけることが必要になります。
アルゴリズム技法習得の肝は「繰り返し」の活用です。この連載では、簡単な題材で繰り返しを使うアルゴリズムの基本パターンを練習していきます。
演習問題の一覧や勉強スタイルについてのアドバイスはこちらからどうぞ。
Q005 横と縦に並べる(二重ループ)
文字「●」を縦、横に四角形に敷き詰めるように表示させてください。ただし、並べる行数、列数はプログラムの先頭で変数に代入することで指定してください。
行数に「5」、列数に「5」を指定した場合の実行例は次のとおりです。
ヒント
Q003では横に並べる繰り返しがありました。この「横に並べる繰り返し」を何行も繰り返すことで実行結果を得ることができます。
ただし、改行するタイミングはしっかり見極めましょう。
解答例と解説
考え方
繰り返しの中に繰り返しがある「二重ループ」の例です。
まず最初に「何を繰り返す」かを考えます。今回の場合は小さな繰り返しと大きな繰り返し(小さな繰り返しを繰り返す)があることに気がつくでしょうか。
小さな繰り返しは、各行について、
- 文字'●'を表示する
の繰り返しです。この繰り返しを行数分繰り返すのが大きな繰り返しです。つまり、
- 「文字'●'を表示する」の繰り返し
を繰り返す、ということです。二重ループですね。
箇条書きでまとめると、
-
- 行数と列数(繰り返し回数)を指定する
- 次の動作を行数分繰り返す
- 次の動作を列数分繰り返す
- 文字'●'を表示する
- 改行する
- 次の動作を列数分繰り返す
という流れになります。ここで2.2の「改行する」を忘れてしまうと、1行に表示されてしまいますので間違いです。
フローチャート例
Javaでの実装例
public class Q005 { public static void main(String[] args) { int row = 5; // 行(縦方向)の数 int col = 5; // 列(横方向)の数 for (int i = 0; i < row; i++) { // 行ループ for (int j = 0; j < col; j++) { // 列ループ System.out.print('●'); } System.out.println(); // 列ループが終われば改行 } } }
プログラムの流れは上のフローチャートと見比べれば理解しやすいでしょう。列ループが終わったタイミングで改行だけを出力するのを忘れないようにしましょう。
おわりに
基本的なアルゴリズムの大多数は、この二重ループをしっかりマスターできればその応用で理解することができます。小さな繰り返しがあり、それが繰り返される。この構造をすぐに見つけられるよう、これからもじっくり練習していきましょう。
次回はこちらです。
[PR]