こんにちは。ECF代表のヒガです。
はじめに
アルゴリズムとは、コンピューターに行わせる計算手順のことです。自在にプログラムを作るには、プログラム言語の文法の知識とともにアルゴリズムの考え方を身につけることが必要になります。
アルゴリズム技法習得の肝は「繰り返し」の活用です。この連載では、簡単な題材で繰り返しを使うアルゴリズムの基本パターンを練習していきます。
演習問題の一覧や勉強スタイルについてのアドバイスはこちらからどうぞ。
Q010 三角形に文字を並べる
複数行にわたり数を1つずつ増やしながら文字「■」を表示することで、実行例のような三角形を表示させてください。ただし、行数(=列数)はプログラムの先頭で変数に代入することで指定してください。
行数に「8」を指定した場合の実行例は次のとおりです。
ヒント
Q005の基本の二重ループの応用です。違いは、列ループ内の繰り返し回数について1回から指定数回まで適切に変化させる必要があります。
解答例と解説
考え方
ベースとなるのは基本の二重ループですので、とりあえず箇条書きにまとめた
- 行数と列数(繰り返し回数)を指定する
- 次の動作を行数分繰り返す
- 次の動作を列数分繰り返す
- 文字'■'を表示する
- 改行する
- 次の動作を列数分繰り返す
をスタート地点としましょう。
今回変わってくるのは、太字で書かれた小さな繰り返しの「列数分」の条件です。具体的に行数に「8」を指定したときの、繰り返し数を考えてみましょう。
i行目 | 表示する文字数(=繰り返し数) |
---|---|
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 5 |
6 | 6 |
7 | 7 |
8 | 8 |
関係性が見えてきたでしょうか。つまり、「i行目の文字数(列ループの繰り返し数)はi文字」という関係があるということです。それでは箇条書きを更新してみましょう。
- 行数と列数(繰り返し回数)を指定する
- 次の動作を行数分繰り返す
- 次の動作をその行番号と同じ数(i行目ならi回)繰り返す
- 文字'■'を表示する
- 改行する
- 次の動作をその行番号と同じ数(i行目ならi回)繰り返す
となります。
フローチャート例
いつもの通りなのですが、プログラム実装を意識した都合で、行ループの開始が「0回目」から始まっています。これが今回少し面倒なことになっています。
考え方で示した表を改めて書き直すと、具体的に行数に「8」を指定したときを考え、
i行目 | 表示する文字数(=繰り返し数) |
---|---|
0 | 1 |
1 | 2 |
2 | 3 |
3 | 4 |
4 | 5 |
5 | 6 |
6 | 7 |
7 | 8 |
となります。i行目でi文字ではなく、i行目でi+1文字(i+1回の繰り返し)となっています。ということで、列ループの終了条件はそのように直しています。
実際、今回のようにiが0から始まる必要性が明確には無い場合は、行ループiを1からnまで繰り返す記述のほうがが多少スッキリとしたアルゴリズムになりそうです。こちらは皆さん個人で考えてみて、比較してみましょう。
Javaでの実装例
public class Q010 { public static void main(String[] args) { int n = 8; // 繰り返しの数 for (int i = 0; i < n; i++) { // 行ループ for (int j = 0; j < i + 1; j++) { // 列ループ System.out.print('■'); } System.out.println(); // 列ループが終われば改行 } } }
上のフローチャートとの対応からプログラム実装例の流れを確認しましょう。
おわりに
Q001から文字を特定の回数繰り返して表示する、という内容でアルゴリズムを考えてきました。行っていることは「繰り返す回数を数える」だけなので、前回まではあまりループ変数i, jの使い所については意識することがありませんでした。
ループ変数i, jはカウンタ変数とも呼ばれ、この値を使って繰り返し内での計算式や条件式を構成することで、より高度なアルゴリズムを実現することができます。
もちろん最初は慣れずに難しいでしょう。コツとしては今回の解説であったように、まずは関連するカウンタ変数や条件などについて具体的な値を考えて対応表を書く、というやり方がおすすめです。一覧表になっていればひと目で関係性が見極められ、間違いにくくなります。初心者、ベテラン関係なく行うテクニックとなりますので、面倒臭がらずにしっかり手を動かしましょう。
次回はこちらです。
合同会社イー・シー・エフでは、子ども向けプログラミングなどの教育講座を実施しています。プログラミング教室の案内や教育教材の情報、また関連するご相談・問い合わせにつきましては下記よりご確認ください。