平成25年秋期  午前問8について

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
勉強中さん  
(No.1)
自分で考えて行き詰まったので分かる方がいれば教えていただきたいです。

タイトルの通り平成25年秋期  午前問8についてです(以下URL参照)
https://www.fe-siken.com/kakomon/25_aki/q8.html

左の流れ図から読み解いていくと
「P=偽」の時もしくは「Q=真」の時はYesに進んで処理を行う。
「P=真」の時はNoに進むので処理は行わない。
という風に整理できると思います。

この考え方を右の図にも当てはめると
「P=偽」の時もしくは「Q=真」の時はYesに進んで処理を行いたいので
aにはYesが入り「Q=真」の時はYesに進んで処理を行う。
しかし処理を行わない方に分岐しているのでbにはNoが入る。
という風になると思うのですが
回答はどちらもNoとなっています。
bがNoになるのは理解できるのですが何故aがNoになるのでしょうか?

解説を読んでも理解できなかったので自分でPとQに値を当てはめて考えるとします。
P=1,Q=0として
データとして2が投入されたと仮定すると
左の図では「P=偽(2≠1)」になるためYesに分岐し処理を行います。
※データとして0が投入された場合も「Q=真(0=0)になるため」
  Yesに分岐し処理を行います。
データとして1が投入されたと仮定すると
「P=真(1=1)」が成り立つためNoに分岐して処理を行わない。

同じく右の図で同じように考えてみます。
データとして2が投入されたと仮定すると
「P=偽(2≠1)」になるためYesに分岐し処理を行います。
データとして1が投入されたと仮定すると
「P=真(1=1)」が成り立つためNoに分岐して処理を行わない。
しかし右の図ではさらに条件分岐があり「Q=真」だとYesに分岐し
「Q=偽」だとNoに分岐します。
データとして投入されているのは1なのでここはNoに分岐します。
※そもそも「P=真(1=1)」で降りてきている時点でここの分岐はNo以外ありえない状態になっている訳ですが・・(これについては自分で設定している例が悪い自覚はあります)
なのでaがYesとなりbがNoとなると考えた次第です。

aがNoとなるには
そもそもの分岐時点での条件が違ってくるような気がしています。
左の図での分岐条件が「Pは1ではない、又は0である」だったとすると
右の図での条件分岐が「Pは1である」「Qは0である」という条件であるのならば
回答通りa,bともにNoとなるのは理解できるのですが・・

流れ図が変わっているから分岐の条件も変わって当然ということなのでしょうか?
考えれば考えるほどドツボにハマっている気がします。
例として自分で数字を当てはめて理解しようとしているのがいけないのでしょうか?

自分でもちゃんと整理しきれていないまま質問している部分もあるので
読みにくい文章かつ長文になってしまっていますが
分かる方がいれば教えていただきたいです。


よろしくお願いいたします。
2024.07.10 00:42
lji1680さん 
(No.2)
ご参考になるかどうかぞんじませんが..個人的な理解を書いてみます。

処理を行るため、「Pでない又はQ」という条件になっていますが、下記のようなIF文に変換できます。

IF P = False OR Q = True 
   処理
ELSE
   処理しない

これを右の図に変換しますと

IF P = False
   処理
ELSEIF Q = True
   処理
ELSE
   処理しない

右の図の「a」は処理と繋がっているルートです。
上記のIF文だと、IF P = Falseの場合、処理に入ります。よってa = No。

「b」は処理しないと繋がっているルートです。
このルートに入るにはIF P = True、ELSEIF Q = Falseの2つ条件を揃えて、
最後のELSE文(処理しない)に入ります。

Q = Falseが必要のため、b = Noになります。

最終的a = No、b = Noのため、
答えは  ア  になります。
2024.07.10 01:58
jjon-comさん 
FE ゴールドマイスター
(No.3)
PとQの組合せは次の4通り。

Pである  Qである
Pである  Qでない
Pでない  Qである
Pでない  Qでない

左の流れ図は「又は OR」で結ばれているから,Yesに流れるのは3通りで,Noに流れるのは1通り。
その組合せは次のとおり。(Yesに流れる条件を[]で強調してみました)

 Pである   [Qである]  処理する
 Pである    Qでない   処理しない
[Pでない]  [Qである]  処理する
[Pでない]   Qでない   処理する

右の流れ図で(処理しない)に流れるのは次の経路のみ。
(1) 判断Pで下に流れて
(2) 判断Qで左に流れる

よって,
(1) 判断Pで下に流れて →下方向が「Pである」 →右方向の空欄a「No」
(2) 判断Qで左に流れる →左方向が「Qでない」 →空欄b「No」
2024.07.10 12:54
jjon-comさん 
FE ゴールドマイスター
(No.4)
この投稿は投稿者により削除されました。(2024.07.10 13:37)
2024.07.10 13:37
jjon-comさん 
FE ゴールドマイスター
(No.5)
念のため。
    判断Pで右方向(空欄a方向)に流れる
には,4通りの組合せのうちの次の2つが対応します。
    [Pでない]  [Qである]  処理する
    [Pでない]   Qでない   処理する

論理和(OR)はどちらか片方の条件が成り立てば真なので,
[Pでない] が真であるなら,Qの真偽は判定する必要なく「処理する」に進むことができます。
2024.07.10 13:38
勉強中さん  
(No.6)
lji1680  様
jjon-com  様

お二方とも解説ありがとうございました。
お二人の解説を自分なりに理解し落とし込んでみました。

ポイントとしては以下の2点になると思っています。
①左の図では1つの分岐でやっていたことを
  右の図では2つの分岐で表現していることで
  条件が変わっている。(やりたいことは同じで流れ図の形が変わった)
  ※そのため必ずしも右の図で「P=偽」の時もしくは「Q=真」の時は
    ”Yes”に進んで処理をするわけではない。

②右の図でPが偽の時はQの分岐を行わず直接処理を行うので
  左の図で整理した条件をもとに考えると
  Pが偽の時に処理をさせたいのでNo(Pが偽)の処理が当てはまる。
  P(Pが真)であればQの分岐に進みQの分岐では真なら処理をして偽なら処理しない。
  ※そうなるとPが真でQも真である条件って何?
    とはなりますが・・具体例が思いつかず・・

考え方としては実際に値を当てはめてやってみるというよりかは
条件をそのまま真偽に落とし込んで再度新しい流れ図での真偽の整合性を考える
というような理解に落ち着きました。

lji1680さんのIF文の処理として実践的に考えるやり方も
jjon-comさんの組み合わせをすべて網羅して考えていくやり方も
参考になりました。

同じような考え方の問題が出た時に
間違えないようにしっかり理解して解けるように
お二人の解説をしばらく咀嚼させていただきます。
※個人的に具体例で当てはめられないとしっくりこないんですよね・・

引き続き精進します。
ありがとうございました!
2024.07.10 20:10

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。

その他のスレッド


Pagetop