制御構造と流れ図

制御構造

いままでのプログラムは、基本的に実行文を上から順に実行していく単純な構造 (順次実行)をしていた。実際のプログラムでは、条件によって実行する文を変更したり、 同じ文を何回も実行したりと、必ずしも上から順に実行するわけでは無い。 このような、プログラムの流れを決定するものを、プログラムの制御構造と呼ぶ。

すべてのアルゴリズムは、たった3つの制御構造の組み合わせで記述することが できる。3つの制御構造とは、図1〜3が示すような順次実行、分岐実行、繰り返 し実行である。

順次実行とは、これまで登場したプログラム例のように、上から順番に1つずつ 文を実行していく構造である。
※Javaのメソッド呼び出しなども順次実行の一種と見なすことができる。
例えば、子供にお使いをお願いする時の説明は順次実行である場合が多い。
「まず八百屋さんに行って、
そこで大根を一本買って、
次に肉屋さんに行って、
豚バラ肉200gを買って、
最後にパン屋さんに行って、
バケットを一本買ってきてね。」
という具合いである。

分岐実行とは、ある条件によって複数の文の中のどれかを実行する構造である。 もっとも単純な分岐は、2つの文のどちらかを選択して実行するもので、これを 特に2分岐と呼び、if文がその代表である。また、Javaでは、n分岐のための switch文も用意されている。
分岐実行は、「もし、ある条件を満たしていれば、一つの行動を起し、条件を満た していなければ別の行動を起す」ような制御構造である。
先ほどの買い物の例をさらに続けると、買い物のお願いをされた子供は、順次実 行の指示に分岐実行を補足する場合が考えられる。
「もし買い物がすべて済んだあと、お釣りが100円以上あるなら、 100円のガチャガチャを1回やる。
しかしもしお釣りが100円より少ないなら、10円の駄菓子を買う。」 という具合いである。
この場合、100円のガチャガチャか10円の駄菓子かどちらかを一つ選ぶための分 岐条件がお釣りの金額が100円以上であるかどうかである。

繰り返し実行とは、ある条件が満足されている間は、同じ文が何度でも実行され る構造である。Javaでは、while文(do-while文)、for文が用意されている。
繰り返し実行とは、「もし、ある条件が満たされていれば、 もう一度行動を繰り返す」ような制御構造である。
先ほどの買い物の子供の場合、さらに繰り返し制御も取り入れるかもしれない。
駄菓子を買うことを先の分岐実行で決定した子供は、
「おつりが10円以上なら
まず10円の駄菓子を一つ買う。
もう一度残ったおつりを確認し、まだ10円以上ならもう一度10円駄菓子を買う 行動を取る。
これをおつりが10円に満たなくなるまで繰り返す。」
という具合いである。
この場合、10円の駄菓子を買う行動を繰り返し実行し、繰り返し実行の繰り返し 条件がお釣りの金額が10円以上あるかどうかである。

実際のプログラムは、図4に示すように、これら3つの制御構造が組み合わされ て使用される。逆に言えば、どんなに複雑なプログラムでもこれら3つの制御構 造を使えば記述することができる。

流れ図(フローチャート)

流れ図(フローチャート)とは、プログラムの制御構造を図で表したものである。 様々な記号で処理を表し、処理間の制御の流れを矢印で示す。フローチャートの記号は 日本ではJIS規格(日本工業規格)で決められているものがある。 ここでは、3つの記号のみ紹介する。
端子 -フローチャートの始まり及び終わりを表す
処理 -計算、代入などの処理を表す
判断 -条件によって分岐する

以下は制御構造の基本となる3つの制御構造の流れ図(フローチャート)の例で ある。
※ただし端子の記号は省略してある。
図1 順次実行
図2 分岐実行
図3 繰り返し実行

フローチャートを書くメリット
  1. 図で示されているので、文書よりも手順がわかりやすい。
  2. システムやプロセスの改訂・見直しの際に、効率よくできる。
  3. 大きなプロセスを、複数人で分担して記述する場合、手分けしやすい。
  4. 同じような処理は、1 つにまとめると再利用可能である。

練習課題

  1. 以下の流れ図の中の制御a〜cがそれぞれがどの制御構造か答えよ。
  2. 図4
    制御a 緑枠
    制御b 赤枠
    制御c 青枠
    選択肢: 順次実行、分岐実行、繰り返し実行

  3. 以下の流れ図は誤りがある。それはなぜ誤りかを説明せよ。

  4. ※ただし端子の記号は省略してある。
    図5

東京情報大学 総合情報学部 情報システム学科
マッキン ケネス(Kenneth Mackin)
<mackin>