プログラムの基本構造 ― 順次・分岐・反復

Three Structures

前回のレッスンで見たアルゴリズムは、実際には3つの基本構造の組み合わせで組み立てられています。それが順次構造・分岐構造・反復構造です。ここでは、Scratchで実際に組んだプログラムの例を見ながら、それぞれの考え方を押さえていきます。実際にブロックを操作する実習は、講座の中でScratchを使って行いますので、ここでは理屈だけを簡潔に確認しておきましょう。

順次構造 ― 上から順に実行する

順次構造は、書かれた命令を上から順番に、ひとつずつ実行していく、もっとも基本的な構造です。次の例は、セルA2・A3・A4の値をひとつずつ変数に入れ、合計を求めるプログラムの考え方です。

Scratch: セルA2からA4を変数に入れ、合計を0にしてから1つずつ加算するSUM関数の考え方
セルA2・A3・A4を変数に入れ、合計に1つずつ加算していく=SUM関数の考え方

「合計を0にする」→「A2を加算する」→「A3を加算する」→「A4を加算する」という手順を、書かれた順番通りに、上から下へひとつずつ実行していく。これが順次構造です。

分岐構造 ― もし〜なら

分岐構造は、条件によって処理を枝分かれさせる構造です。「もし〜なら、こうする」という考え方で、条件を満たすかどうかによって、実行する内容が変わります。

反復構造 ― ずっと/◯回繰り返す

反復構造は、同じ処理を繰り返し実行する構造です。「ずっと」(条件が変わるまで永遠に繰り返す)や「◯回繰り返す」(決まった回数だけ繰り返す)という形で使われます。次の例は、反復構造の中に分岐構造が組み込まれたプログラムです。

Scratch: 「ずっと」ループの中に「もし端に触れたなら」の分岐が入った例
「ずっと」の反復構造の中に、「もし端に触れたなら」の分岐構造が入っている

「ずっと」という反復構造の中に、「もし端に触れたなら、跳ね返る」という分岐構造が組み込まれています。反復と分岐は、このように組み合わせて使われることがよくあります。反復構造だけでは同じ動きの繰り返しにしかなりませんが、そこに分岐構造を組み込むことで、状況に応じた柔軟な動きが生まれます。

初期化を忘れない ― お掃除の大切さ

反復構造や順次構造を組むとき、意外と見落としがちなのが初期化(変数を最初の状態、たとえば0に戻しておく処理)です。次の例を見てください。

Scratch: 悪いアルゴリズム例。「おはよう!」と言った後「大きさを200%にする」で終わるため、次に実行する人は初期状態に戻らない
悪いアルゴリズムの例。実行後にキャラクターが大きさ200%のまま終わってしまう

このプログラムは、「おはよう!」と言ったあと、キャラクターの大きさを200%にして終わります。一見問題なさそうですが、次にこのプログラムを実行する人は、キャラクターがすでに大きくなった状態から始めることになってしまいます。1回目の人と同じ体験を、2回目の人ができないのです。

最初に見たSUM関数の例でも、「合計を0にする」という初期化の処理が入っていなければ、実行するたびに前回の合計が残ったまま、永遠に加算され続けてしまいます。何かをスタートするときは、必ず0の状態から始めること。これはプログラムに限らず、日々のオペレーション(業務の運用)でも同じです。だから、お掃除は重要なんです。

もっと深く ― 合計を少し書き換えると、平均になるDEEP DIVE

ここからは、基礎の一歩先の話です。初心者の方は読み飛ばして構いません。でも、前回のレッスンで扱った「アルゴリズムの一般性」を思い出したい方には、ちょうどよい実例です。

合計のプログラムを応用すると、平均が出せる

先ほどのSUM関数の例(合計を出すプログラム)は、リストを使う形に少し書き換えるだけで、平均を出すプログラムに応用できます。

Scratch: リストを使って平均を出す例
リストを使って平均を出す例。合計のプログラムの応用

合計を出す手順そのものはほとんど変えず、「合計をリストの個数で割る」という一手間を加えるだけで、まったく別の指標(平均)を求めるプログラムになります。これはまさに、前回のレッスンで見たアルゴリズムの一般性(同じ手順の一部を書き換えると、他の目的にも応用できること)の実例です。

教室のひとこま

最後に、このテーマを教えるとき、教室でよく交わされるやりとりを。

受講者
初期化を忘れるくらい、大した問題じゃない気がするんですが……。
講師講師
実はここ、ミスが起きやすい落とし穴です。1回目はうまくいくのに、2回目に実行した人だけ結果がおかしくなる——これは、業務の現場でも「あるある」なんですよ。だから私は、この回で必ず「お掃除は大事」という話をします。
講師メモ ― 現場から

順次・分岐・反復の3つは、言葉で説明するよりも、実際にScratchでキャラクターを動かしてもらったほうが圧倒的に理解が早い単元です。この回のWebページはあくまで理屈の下地で、本番は講座内の実習で体で覚えてもらっています。

← 情報Ⅰ トップへ戻る