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

下へ一覧へ
○テキスト
第2章(2.1)
○アルゴリズムとPADについて

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

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

「PAD:アルゴリズムの構造を図示したもの。視覚的にとらえられる。」

処理をただ順に行う場合のアルゴリズムの構造を

  逐次構造という。

     制御構造(実行順序を制御する構造)の一つ
      例:
  他に選択構造、反復構造がある
  主な流れは、最も左の線で表す。
  上から下へ行く。(必ず最後まで行く)
  下から上へ戻らない。

  PAD では処理箱とよぶ。これから右へは線は伸びない。

以下、いくつかの”箱”とそれらの”線”による繋がりを勉強する。
PAD の本質からすれば、それらを手で書くことに何も問題はない。
しかし、ファイルを作成し pad2ps を使ってプリンタ出力することを
心がけよ。ファイルを作成するための簡単な文法は C 言語とよく似
ている。なめらかに C 言語になじめる。


下へ上へ 選択構造 手順表(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以外の表現法(フローチャートなど) 処理箱 選択箱 反復箱
○演習2 下へ上へ 2.1 基本的な選択箱と反復箱を pad2ps を使って画面に表示させよ。 サンプルファイルとして、/class/ee/ic2/sample/sample2a.pad /sample2c.pad /sample2d.pad をコピーして使え。演習1と同様にやる。 2.2 次の PADを見て各処理(条件判断を含む)の実行される順を考えよ。 a) b) c) ただし、各条件 C1、C2 については、次のようにする。 a) C1 が真である場合と偽である場合のそれぞれについて考えよ。 b) C1 ははじめの 2 回 真で、3回目以降は偽であるとする。 c) C1 ははじめの 2 回 真で、3回目以降は偽であり、 C2 は、2回目だけ真とする。 (解答は自分で考えた後で見ること a)C1=真a)C1=偽b)c) )
一覧へ上へ ○レポート課題2 (解答) 2.1, PAD を見て実行される順を調べる問題 P1, C1, ... のように処理の番号を順に書け。 2.2, 上の課題 2.1 の PAD が pad2ps で現れるような PAD ファイルを つくれ。ファイル名は rep2_自分のID.pad として、このファイル と ps ファイルの両方のプリントアウトを提出。 演習 1.1, 2.1 のファイル参考。 2.3, 2人でジャンケンを行なった場合の勝ち負けを判断する アルゴリズムを PAD にせよ。手書きでも可。 ( 「ジャンケンをする」のではない! 「それぞれの手を知って、勝ち負けを判断する(答える)」ための 手順=アルゴリズムを考える) ヒント
一覧へ