こんにちは。ECF代表のヒガです。
はじめに
アルゴリズムとは、コンピューターに行わせる計算手順のことです。自在にプログラムを作るには、プログラム言語の文法の知識とともにアルゴリズムの考え方を身につけることが必要になります。
アルゴリズム技法習得の肝は「繰り返し」の活用です。この連載では、簡単な題材で繰り返しを使うアルゴリズムの基本パターンを練習していきます。
演習問題の一覧や勉強スタイルについてのアドバイスはこちらからどうぞ。
Q006 2つの文字を交互に並べる(条件分岐と繰り返し)
文字「◇」と文字「◆」を交互に表示させてください。ただし、並べる文字数はプログラムの先頭で変数に代入することで指定してください。
文字数に「11」を指定した場合の実行例は次のとおりです。(実行例のコマンドプロンプトは黒背景・白文字なので注意してください。1文字目は「◇」、2文字目は「◆」です。)
また、文字数に「10」を指定した場合の実行例は次のとおりです。
プログラムの先頭で文字数を指定する必要があるので、直接「◇◆◇◆・・・」という文字列を表示するだけでは間違いです。また、文字数が偶数であっても奇数であっても正しく動作させる必要があります。
ヒント
やはり繰り返しを使います。1文字ずつ判断(つまり条件分岐)しながら表示することを考えてみましょう。判断には「今の繰り返しが何文字目の表示か?」を意識しながら行います。
判断の条件は「今の繰り返し回数が偶数回か奇数回か」で設定するといいでしょう。「繰り返し回数を2で割った余り」を計算し、余りが1なら奇数(1, 3, 5, ・・・)、余りが0なら偶数(0, 2, 4, ・・・)と判定できます。
解答例と解説
考え方
最初に「何を繰り返す」かを考えます。ヒントにあるとおり、先頭から1文字ずつ判断しながら表示していくことを踏まえると、
- 文字'◇'または'◆'を表示する
の繰り返しとなります。
判断の条件をもう少し詳しく検討すると、
- 先頭から1, 3, 5, ・・・(奇数)文字目のときは'◇'を表示
- 先頭から2, 4, 6, ・・・(偶数)文字目のときは'◆'を表示
となります。箇条書きでまとめると、
-
- 文字数(繰り返し回数)を指定する
- 次の動作を文字数分繰り返す
- 今の繰り返しが奇数回目か偶数回目か判断する
- 奇数回目の場合、文字'◇'を表示する
- 偶数回目の場合、文字'◆'を表示する
- 今の繰り返しが奇数回目か偶数回目か判断する
という流れになります。
さらに、今回は偶数奇数判定アルゴリズムの例にもなっています。ヒントにもあるように、「判定したい数を2で割った余りの数」を使うと、その数が偶数なのか奇数なのかを判定できます。余りが0なら偶数、余りが1なら奇数です。
「割った余り」の計算は剰余やモジュロといい、一般的なプログラム言語ではそのための演算子(計算記号)が準備されています。
フローチャート例
条件分岐の部分は、条件式と処理内容の整合が取れていればOKです。
プログラム実装を意識した都合で、文字の先頭が「0文字目」から始まっています。(プログラムは数を数えるときに1からではなく、0から始めると都合がいいことが多いのです。)そのため、考え方の箇条書きとは違い、
- 奇数回(1, 3, 5, ・・・)の場合、文字'◆'を表示する
- 偶数回(0, 2, 4, ・・・)の場合、文字'◇'を表示する
としています。もちろん、「1文字目」から始めたフローを考えた方も正解です。プログラム実装でも同様です。
Javaでの実装例
public class Q006 { public static void main(String[] args) { int n = 10; // 繰り返しの数=全体の文字数 for (int i = 0; i < n; i++) { // 1文字ずつ表示する if (i % 2 == 1) { // 奇数なら◆、偶数なら◇ System.out.print('◆'); } else { System.out.print('◇'); } } } }
条件分岐の部分は、条件式と処理内容の整合が取れていればOKです。
Javaでは剰余計算の演算子は「%」を使います。i が繰り返し回数(ただし0始まり)ですので、
i % 2 // 2で割った余り
の計算で今が何文字目かの判定のための剰余を得ることができます。
おわりに
今回の大きなテーマは「繰り返しと条件分岐の組み合わせ」です。どんどん複雑になってきますが、これも結局は「『条件分岐の結果の処理』を繰り返す」に過ぎません。これまでと同じように、何を繰り返すかを意識していれば、実現したいアルゴリズム全体の見通しが良くなると思います。
次回はこちらです。
合同会社イー・シー・エフでは、子ども向けプログラミングなどの教育講座を実施しています。プログラミング教室の案内や教育教材の情報、また関連するご相談・問い合わせにつきましては下記よりご確認ください。