基本情報技術者 2013年 秋期 午前(科目A) 問08
問題文
右の流れ図が左の流れ図と同じ動作をするために、a, bに入るYesとNoの組合せはどれか。


選択肢
ア:(正解)
イ:
ウ:
エ:
🔒 解説は解答すると表示されます
含意の短絡評価【午前解説】
正解の理由
左図の判断「Pでない 又は Q」は論理式で表すと 、すなわち含意 と同値です。これを実行順に分解すると「まず P を判定し、P が真なら Q を評価し、P が偽なら Q を評価せずに(短絡して)結果が真となる」が正しい振る舞いです。右図でこの動作を実現するには、P の右側にある小箱 a が P=false(No)の経路、Q の左側にある小箱 b が Q=false(No)の経路になる必要があります。したがって a=No, b=No、すなわち ア が正解です。
(要点)P=false のとき Q を評価せず処理へ進む挙動を右図で作るため、P の右枝は No、Q の左枝は No に対応させる必要があります。これにより、P/Q の 4 通りすべてで右図が左図と同一の判定・評価順序・実行結果になります。
解法ステップ
- 左図の判断「Pでない 又は Q」を論理式 として考える。短絡評価の意味を確認する(P=false なら Q は評価しない)。
- 右図の各枝がどの判定値(Yes/No)に対応するかを決める。P の右枝は a、下枝は Q へ接続。Q の左枝は b、下枝は処理へ接続。これらに Yes/No を割り当てて場合分けを行う。
- P/Q の 4 通りについて、左図でどの判定が評価されるか(Q の評価有無含む)を書き出す。
- 右図で同じ各場合にどの箱/判断が通るかを、a/b に Yes/No を割り当てて検証する。各組合せが左図と一致する割当を見つける。
- 一致する割当が a=No, b=No のみであることを確認する。
以下、手順 3-4 を場合分けで示します(右図での枝割当:P の右枝 = No、P の下枝 = Yes、Q の左枝 = No、Q の下枝 = Yes とすることで一致することを示します)。
-
ケース 1: P = 偽(false)
- 左図: が真なので は真。短絡により Q を評価せず、Yes 経路で直接「処理」へ入る。
- 右図:P は No(右枝)を取る → a を通る。a は No を表すため、a の経路は処理に合流する側(Q を評価しない側)へ導く。結果として Q は評価されず「処理」へ到達。左図と一致。
-
ケース 2: P = 真(true), Q = 真(true)
- 左図: は偽だが Q が真なので 全体は真。Q を評価してから Yes で「処理」へ。
- 右図:P は Yes(下)を取り Q を評価。Q は Yes(下)を取り直接「処理」へ(b は通らない)。左図と一致。
-
ケース 3: P = 真(true), Q = 偽(false)
- 左図: 偽、Q 偽 → 全体偽。Q を評価した上で No の経路(右回り)で合流し「処理」へ(左図の No 経路は b 経由に相当)。
- 右図:P は下で Q を評価。Q は No(左)を取り b を通る → b の経路が処理へ合流。左図と一致。
このように a=No, b=No の割当で P/Q の全組合せに対して右図の評価順・実行経路が左図と一致するため、ア が正しい。
選択肢別の誤答解説
-
ア(a=No、b=No)
正常。上の場合分けで示したとおり、P=false のとき Q を評価せず処理へ進む短絡挙動を満たし、P=true のときは Q を評価して b の有無が適切に作用する。 -
イ(a=No、b=Yes)
Q=false のときに b を通さず直接処理へ入る(b が Yes 側にあるため Q=false では b を実行しない)ため、左図で Q=false の場合に期待される経路(左図は Q を評価した上で No 側の合流を通る)が再現されない。つまり Q=false の場合に通るべき副処理(b)が省略され、挙動が異なる。 -
ウ(a=Yes、b=No)
P=false のときに右図が P の右枝(a)へ行くと a が Yes 側扱いになり、そこで Q を評価する経路に合流してしまうため、短絡評価が崩れ、P=false のときに Q が評価されてしまう。左図の短絡的な動作と不一致。 -
エ(a=Yes、b=Yes)
P=false のときに Q を評価してしまう(ウ と同様)上、Q=false のときに b が実行されないため二重に不一致が発生する。
よくある誤解
- 「流れ図ではすべての判断が常に評価される」
流れ図のひし形が複合条件(ここでは )を表す場合、実装(あるいは分解図)では短絡的に評価できる。問題は「どの判断を先に評価し、どのときに次の判断をスキップするか」を正しく対応させることにある。 - 「右図の a が P=false のとき Q を評価するように見える」
図の矢印だけを見て即判断しないで、矢印が合流する先と合流点が左図のどの接続点に相当するかを明示的に対応付けること。場合分けで各 P/Q 組合せの通る経路を追えば矛盾は解ける。 - 「Yes/No の位置(右/下/左)は固定の規則があるはず」
標準的に右が Yes、下が No など慣習はない。各図ごとにどの枝が Yes/No かを設問文や合流点の意味から決める必要がある。
補足コラム
- 論理含意 は と同値です。プログラミング言語ではこの含意は「if P then Q else true」あるいは「!P || Q」として実装され、ほとんどの言語は左から右への短絡評価(short-circuit)を採用しています。流れ図で「P を先に判定して P=false のとき Q を評価しない」構造に置き換えると、今回のような枝の割当が導かれます。
- 図の対応づけをするときは「合流点(どのノードにつながるか)」を基準に考えると安定します。今回も a と b が合流する先が左図のどの接点に対応するかが鍵でした。
FAQ
Q1: なぜ P=false のとき Q を評価してはいけないのですか?
A1: 左図の条件式 は P=false のとき自動的に真になるため、Q を評価する必要がありません。左図の振る舞いを正確に再現するには、右図でもそのとき Q(および b)を実行しないようにする必要があります。
A1: 左図の条件式 は P=false のとき自動的に真になるため、Q を評価する必要がありません。左図の振る舞いを正確に再現するには、右図でもそのとき Q(および b)を実行しないようにする必要があります。
Q2: 流れ図の「Yes/No」は常に右/下のどちらかに固定ですか?
A2: いいえ。図ごとに枝の位置とラベル(Yes/No)の対応を問題文や接続先から判断します。本問では P の右枝が a、下枝が Q への接続だったため、どちらが Yes/No に対応するかを場合分けで確かめて割当てました。
A2: いいえ。図ごとに枝の位置とラベル(Yes/No)の対応を問題文や接続先から判断します。本問では P の右枝が a、下枝が Q への接続だったため、どちらが Yes/No に対応するかを場合分けで確かめて割当てました。
Q3: この問題はプログラムのどんな構造に対応しますか?
A3: 「if (!P || Q) { 処理 }」を while 等で繰り返す構造に相当します。短絡評価(P が false のとき Q を評価しない)を流れ図で正しく表現する問題です。
A3: 「if (!P || Q) { 処理 }」を while 等で繰り返す構造に相当します。短絡評価(P が false のとき Q を評価しない)を流れ図で正しく表現する問題です。
関連キーワード: 含意、短絡評価、ブール式の分解、フローチャート合流、経路対応、分岐ラベル、論理式変形

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

