◎第2回 アルゴリズムとPAD

下へ一覧へ
○テキスト
第2章(2.1)
○アルゴリズムとPADについて
「アルゴリズム:ある一群の仕事を行なうために必要な手順の全体」
(テキストより)
例:電話をかけたことのない人に電話のかけ方を教える
手順表(仮称)による表現

1.受話器をとる
2.相手の電話番号を回す
3.用件を話す
4.受話器を戻す

順に行なう    もっとも単純  逐次構造
  制御構造(実行順序を制御する構造)の一つ
      例:
     他に選択構造、反復構造がある
  主な流れは、最も左の線で表す。
  上から下へ行く。(必ず最後まで行く)
  下から上へ戻らない。
  処理箱から右へは線は伸びない

下へ上へ 選択構造 手順表(1) 1.相手の電話番号を知らなければ、電話帳で調べる 2.受話器をとる 3.相手の電話番号を回す 4.用件を話す 5.受話器を戻す 手順表(2) 1.相手の電話番号を知らなければ、1.1へ行く。そうでなければ 2へ 行く 1.1 電話帳で調べる 2.受話器をとる 3.相手の電話番号を回す 4.用件を話す 5.受話器を戻す PAD の選択箱 (a) (c) (b) 選択枝の一つだけが実行される。 選択枝実行が終ったら(対応する箱がない時も) 左の線に沿って下へ行く(下に箱があれば) 選択枝で行なうことが複数ある場合は、逐次構造(の縦線)をつける 選択構造の例 「電話番号を知らない時は調べる」 選択される処理が複数の処理箱からなる例
下へ上へ 反復構造 手順表 1.受話器をとる 2.1 まだ数字が残っているか? no なら、3 へ行く 2.2 次の数字を回す 2.3 2.1 へ行く 3.用件を話す 4.受話器を戻す 反復箱 まず、「繰り返し条件」を調べる。真の時は、「繰り返し処理」を 行なう。その後再び「繰り返し条件」を調べることから繰り返す。 「繰り返し条件」が偽ならば、その「反復箱」の処理を終わる。 つぎの処理があれば次へ行く。 始めから、「繰り返し条件」が偽であれば、「繰り返し」処理は、一度も行な われない。 (前判定の場合。もうひとつの「後判定」は次回説明。) 繰り返す処理が複数ある場合は、 繰り返し処理の先は逐次構造(の縦線)をつける 反復構造の例 「電話番号を一つずつ回す」 繰り返す処理が複数ある場合の例 PAD における処理の流れ PAD における処理の流れの図
日常生活におけるいくつかの例 キャッシュディスペンサー ( CD )でお金を下ろす CD 処理の流れの図 カメラで写真をとる1 カメラで写真をとる2
やっては駄目なこと 選択枝で「終る」ことはない 選択枝でから主な線に「行く」ことはない、 「上に行く」ときは、たぶん繰り返す処理なので、反復構造を考える。 「下に行く」ときは、「飛ばす」処理があるので選択構造が 違う ( PAD で表せない場合もある後述 ) 繰り返し処理の途中では終らない 悪い例
下へ上へ フローチャート(流れ図) 選択構造 反復構造 PAD、フローチャート、PAD の比較 手順表やフローチャート: 制御の流れの変更を[○○へ行け(go to ○○)]の形で 直接・具体的に行なう。機械語に近い。(jump/branch/goto) 全く単純にその通り実行するには便利。 「繰り返し」であることや、「選択」であることが すぐにはわかりにくい。 全体の処理の方針がわかりにくい。 フローチャートでは分かりにくい例
「電話帳がない、調べてもわからないのでやめる」 「お話中」などは難しい。 (一般に「異常事態」に対処するのは複雑で難しい) (日常の処理は難しい) 1. 同じ操作をあちこちに記述する 2. 実際にわかったかどうか、知っているかどうかをもう一度判断する など全体の構造を変える必要がある。 PAD で書けないアルゴリズムはたくさんある。 PAD で描かれたものがあればその方がわかりやすい。(ことが多い。) それは PAD の限界ではあるが、それよりも 問題そのものの複雑さを示している。 状況を限定する必要がある → 第3回 問題の明確化とも関連する
下へ上へ ○キーワード アルゴリズム PAD 制御構造(逐次構造、選択構造、反復構造) PAD以外の表現法(フローチャートなど) 処理箱 選択箱 反復箱
○演習 下へ上へ 次の PADを見て各処理(条件判断を含む)の実行される順を考えよ。 a) b) c) ただし、各条件 C1、C2 については、次のようにする。 a) C1 が真である場合と偽である場合のそれぞれについて考えよ。 b) C1 ははじめの 2 回 真で、3回目以降は偽であるとする。 c) C1 ははじめの 2 回 真で、3回目以降は偽であり、 C2 は、2回目だけ真とする。 (解答は自分で考えた後で見ること a)C1=真a)C1=偽b)c) )
一覧へ上へ ○レポート課題 (次回に紙で提出)(解答) 1. pad を見て実行される順を調べる 問題 2. 日常作業に関する(自然言語で書かれた)アルゴリズムを pad にする。 次に示す日常の作業を PAD で表現せよ。 a)2人でジャンケンを行なった場合の勝ち負けを判断する。 ( 「ジャンケンをする」のではない! 「それぞれの手を知って、勝ち負けを判断する(答える)」ための 手順=アルゴリズムを考える) ヒント b)「飲食店アルバイト(フロア係)マニュアル」を PADで表現した図を次に示す。空欄 [ ] を埋めて完成せよ。 PADで表現した図(psfile :Qで終了) 注意:PAD の箱や空欄が不適切と思われる時は、必要に応じて、 変更すること
一覧へ