AOBA's Information Processing Education
1998/08/02
注意1:このページは、回線を切断した後でゆっくりご覧になってください(テキストを印刷する場合は、その取り扱いに注意してください)。
注意2:背景が白地の画面を長時間見つめていると頭が痛くなってしまいますので、ここは背景をグレーにしています。
「平成8年春期 第2種 午後 問1」 問2 次の流れ図の説明および流れ図を読んで、設問1,2に答えよ。
[流れ図の説明]
二つの駅名(駅名1,駅名2)を受取り、それらの駅間の運賃と特急料金の合計料金を求める。
- まず駅名1と駅名2を、図1の駅名表を検索して駅番号に変換する。駅名表のi番目の要素(駅名表(i))に入っている駅名の駅番号をiとする。
駅名1,駅名2及び駅名表の各要素は8文字の文字列で、駅名が8文字に満たない場合は右端に空白文字が埋められている。- 次に運賃及び特急料金を、図2の料金表を検索して求める。
料金表の要素は、上からi番目,左からj番目のものを、料金表(i,j)で参照する。
図2に示すように、料金表の左下部分の各要素には対応する駅番号間の運賃が、右上部分の各要素には特急料金が格納されている。例えば、駅番号2と3の間の運賃は料金表(3,2)に、特急料金は料金表(2,3)に格納されている。
対角線上の要素は0とする。
![]()
![]()
設問1 駅名変換サブルーチンにおいて、駅名”ハカタ△△△△△”を駅番号に変換するとき、流れ図の(c)の部分は何回実行されるか、解答群の中から選べ。
解答群
ア 0 イ 1 ウ N−1 エ N オ N+1設問2 流れ図に次の2点の変更を加える。
この変更のために、流れ図の(a)と(b)の部分を書き換える。
変更1: 流れ図は、駅名1又は駅名2が駅名表の中に存在しない場合のことが考慮されていない。駅名1又は駅名2が駅名表の中に存在しない場合はエラーメッセージを表示するように変更する。 変更2: 合計料金ではなく、運賃と特急料金を別々に求めるように変更する。
(a)の部分は次のように書き換えた。
![]()
(1)流れ図の(b)の中の条件式(点線内の部分)はどう書き換えたらよいか、解答群の中から選べ。
解答群
ア (駅名表(x)=駅名)かつ(x<N))
イ (駅名表(x)=駅名)かつ(x>N))
ウ (駅名表(x)=駅名)かつ(x≦N))
エ (駅名表(x)=駅名)かつ(x≧N))
オ (駅名表(x)=駅名)又は(x<N))
カ (駅名表(x)=駅名)又は(x>N))
キ (駅名表(x)=駅名)又は(x≦N))
ク (駅名表(x)=駅名)又は(x≧N))(2)( )に入れる正しい答えを、解答群の中から選べ。
解答群
ア i=j イ i≠j ウ i<j エ i>j
解説 設問1について
駅名変換は典型的な線形探索(要素を順に一つずつ比較しながら探索を行う手法)を行う流れ図です。この流れ図は入力として駅名を与えると、その駅名を駅番号に変換してxに求めます。
設問では駅名が”ハカタ△△△△△”の時、(c)が何回実行されるかが問われています。このように実行回数を問われる問題は、極端なケースを1つ想定し、その回数から問われたケースの実行回数を推測するとよいでしょう。
極端なケースとは、0や1の時とか最初や最後の時です(問題によって異なります)。
この設問における極端なケースは、駅名表の最初の要素で見つかった時(もしくは最後の要素で見つかった時ですが、これが問題となっていますので除外します)ですので、まずはその時の実行回数を考えます。
駅名変換の入力の駅名が”トウキョウ△△△”の時(これが極端なケース)、いきなり駅名表検索ループ始端の脱出条件(駅名表(x)=駅名)を満足します。だからこの時の(c)の実行回数は0回です。
”トウキョウ△△△”の駅番号は1で、そのケースにおける(c)の実行回数が0回ということは、駅番号から1を引いた回数が(c)の実行回数になるのでは?、と考えるのです。
実際その考えは正しく、駅番号が2(駅名が”シンヨコハマ△△”)の時の(c)の実行回数は1回です。だから、駅番号N(駅名が”ハカタ△△△△△”)における(c)の実行回数はN−1回です。設問2(1)について
問題文にあるように元の駅名変換流れ図は、駅名が駅名表の中に存在しない場合が考慮されていません。このままだと、駅名表にない駅名を受取った場合、駅名表を超えて探索しようとします(すぐに異常終了するでしょうが)。
そこで(b)の脱出条件を変更し、駅名が駅名表なかった場合も駅名表検索ループを脱出しようというわけです。
つまり脱出条件は、
「駅名が駅名表に見つかった場合 又は 駅名が駅名表なかった場合」
となるはずです。
後者の駅名が駅名表なかった場合とは、駅名表の最後の要素(N)まで探索し終えた時ですので、x>Nが正解です。駅名が駅名表になければ、x=N+1で駅名変換流れ図を終了します。すると、変更後の(a)でエラーメッセージを表示してくれるでしょう。設問2(2)について
これはほとんど答えが問題文の中にあるようなものです。
[流れ図の説明]の2に、「駅番号2と3の間の運賃は料金表(3,2)に、特急料金は料金表(2,3)に格納されている」という一文がありますよね。
つまり、前方の添字が大きい時(後方の添字が小さい時)は運賃になり、後方の添字が大きい時(前方の添字が小さい時)は特急料金になるのです。
だから空欄は、i>jのはずです今週は以上です。
ではまた来週。
解答
設問1 ウ 設問2 (1)−カ (2)−エ