【アルゴリズム入門 Q010】三角形に文字を並べる

アルゴリズム アルゴリズム

こんにちは。ECF代表のヒガです。

本記事では初心者向けアルゴリズムの演習問題を紹介しています。日頃のプログラミング学習にご活用ください。

はじめに

アルゴリズムとは、コンピューターに行わせる計算手順のことです。自在にプログラムを作るには、プログラム言語の文法の知識とともにアルゴリズムの考え方を身につけることが必要になります。

アルゴリズム技法習得の肝は「繰り返し」の活用です。この連載では、簡単な題材で繰り返しを使うアルゴリズムの基本パターンを練習していきます。

演習問題の一覧や勉強スタイルについてのアドバイスはこちらからどうぞ。

【プログラミング初心者向け】アルゴリズム入門 演習問題集 〜 繰り返しをマスターしよう!
こんにちは。ECF代表のヒガです。 プログラミング初心者向けアルゴリズム演習問題の連載記事まとめです。日頃のプログラミング学習、講義、研修等での演習にご活用ください。 「繰り返しアルゴリズム」をマスターしよう アルゴリズムとは、コンピュ...

Q010 三角形に文字を並べる

複数行にわたり数を1つずつ増やしながら文字「■」を表示することで、実行例のような三角形を表示させてください。ただし、行数(=列数)はプログラムの先頭で変数に代入することで指定してください。

行数に「8」を指定した場合の実行例は次のとおりです。

ヒント

Q005の基本の二重ループの応用です。違いは、列ループ内の繰り返し回数について1回から指定数回まで適切に変化させる必要があります。

解答例と解説

考え方

ベースとなるのは基本の二重ループですので、とりあえず箇条書きにまとめた

  1. 行数と列数(繰り返し回数)を指定する
  2. 次の動作を行数分繰り返す
    1. 次の動作を列数分繰り返す
      1. 文字'■'を表示する
    2. 改行する

をスタート地点としましょう。

【アルゴリズム入門 Q005】横と縦に並べる(二重ループ)
こんにちは。ECF代表のヒガです。 本記事では初心者向けアルゴリズムの演習問題を紹介しています。日頃のプログラミング学習にご活用ください。 はじめに アルゴリズムとは、コンピューターに行わせる計算手順のことです。自在にプログラムを作るには、...

今回変わってくるのは、太字で書かれた小さな繰り返しの「列数分」の条件です。具体的に行数に「8」を指定したときの、繰り返し数を考えてみましょう。

i行目 表示する文字数(=繰り返し数)
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8

関係性が見えてきたでしょうか。つまり、「i行目の文字数(列ループの繰り返し数)はi文字」という関係があるということです。それでは箇条書きを更新してみましょう。

  1. 行数と列数(繰り返し回数)を指定する
  2. 次の動作を行数分繰り返す
    1. 次の動作をその行番号と同じ数(i行目ならi回)繰り返す
      1. 文字'■'を表示する
    2. 改行する

となります。

フローチャート例

いつもの通りなのですが、プログラム実装を意識した都合で、行ループの開始が「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はカウンタ変数とも呼ばれ、この値を使って繰り返し内での計算式や条件式を構成することで、より高度なアルゴリズムを実現することができます。

もちろん最初は慣れずに難しいでしょう。コツとしては今回の解説であったように、まずは関連するカウンタ変数や条件などについて具体的な値を考えて対応表を書く、というやり方がおすすめです。一覧表になっていればひと目で関係性が見極められ、間違いにくくなります。初心者、ベテラン関係なく行うテクニックとなりますので、面倒臭がらずにしっかり手を動かしましょう。

次回はこちらです。

【アルゴリズム入門 Q011】逆さの三角形に文字を並べる
こんにちは。ECF代表のヒガです。 本記事では初心者向けアルゴリズムの演習問題を紹介しています。日頃のプログラミング学習にご活用ください。 はじめに アルゴリズムとは、コンピューターに行わせる計算手順のことです。自在にプログラムを作るには、...

合同会社イー・シー・エフでは、子ども向けプログラミングなどの教育講座を実施しています。プログラミング教室の案内や教育教材の情報、また関連するご相談・問い合わせにつきましては下記よりご確認ください。

ECFエデュケーション

 

タイトルとURLをコピーしました