HOME»基本情報技術者試験掲示板»平成30年秋期午後問8

基本情報技術者試験掲示板


[4642] 平成30年秋期午後問8

 試験まで1週間さん(No.1) 
設問1のbに関して質問です。解説で

"4つのうち、正しい演算順序となるために括弧外の乗除算と括弧内の加減算の優先度に差が付くのは、「ア」「イ」「エ」の3つです。さらに、その優先度の差が最小の1になる「エ」が有効な定数の範囲を示す式として適切です。"

と書いてあったのですが、なぜ優先度の差が最小のものが答えになるのでしょうか。また、

"※例のように priHigh=3、priLow=2 の場合、2, 3, 4, 5 …、すなわち2以上がBCで加算される適切な値となります。「ア」の priHigh以上(3, 4, 5 …)は2を含まず、「イ」は priHigh+1以上(4, 5, 6 …)は2, 3を含まないので範囲として不適切です。"

と書いてあったのですが、priHigh=5、priLow=2の時は、どの選択肢も2以上とならないと思うのですが、どうやって答えを導けばいいのでしょうか。他の解説なども見たのですが分からなかったので質問させてください。よろしくお願いいたします。 

https://www.fe-siken.com/kakomon/30_aki/pm08.html
2022.11.18 23:21
jjon-comさん(No.2) 
FE・シルバーエキスパート
計算式文字列を先頭から末尾まで走査していく際、
実行前の入れ子(nest)の状態を0メートル地点として、
・'+' '−' が現れたら nest+1メートルを優先度とする
・'×' '÷' が現れたら nest+2メートルを優先度とする
・'(' が現れたら +10メートル登ってそこを新たなnestとする
・')' が現れたら -10メートル降りてそこを新たなnestとする
を繰り返し、もっとも高い位置にある演算子から順に計算できるようにする問題。

ちなみに。
3+14−15+92−65 のように
'+' '−' 演算子が同レベルで並んでいるならその優先度はすべて nest+1。
nest+1 した値を nest に代入してはいないので。

--------
> なぜ優先度の差が最小のものが答えになるのでしょうか

問題文に書かれているとおり「この定数は10である必要はない」。
+8メートル登りだろうが、+6メートル登りだろうが、+4メートル登りだろうが、
'(' と ')' で挟まれた間の演算子の高さ(優先度)が
nest+2 より高くなるなら正しい演算順序を示すことができる。

[ a ] の解答群はすべて「〜以上」という表現なので、
nest+2 との差が最小のものを選ばないと
正解の数値パターンを網羅したことにはならない。

--------
> どうやって答えを導けばいいのでしょうか。

ちなみに私は次のようにイメージして解きました。

(a) 現在の高さ にいながら、高めの位置の「'×' '÷'」を手を伸ばして置く
(b) 現在の高さ → '(' で登る → そこで、低めの位置の「'+' '−'」を置く

この状況で (a)<(b) が成り立つなら、正しい演算順序が保証される。

(a) nest + priHigh
(b) nest + 定数 + priLow
なので、
nest + priHigh < nest + 定数 + priLow
       priHigh < 定数 + priLow
          定数 > priHigh - priLow

定数が整数であり、[ b ]の解答群の表現「〜以上」に当てはめるなら、
定数 ≧ priHigh - priLow + 1  となる。

--------
> priHigh=5、priLow=2の時は、どの選択肢も2以上とならないと思う

前述のとおり、私は priHigh, priLow の具体値を想定して
選択肢を総当りする方法を採らなかったので、よく分かりません。
2022.11.19 01:25
boyonboyonさん(No.3) 
問題文に、
>nest の値を増減する定数が[b]のときに限り正しい演算順序が保証される
と書いてあります。〜のときに限りとは[b]として選んだ条件以外には、あてはまる数字がないということになります。
「ア」「イ」は、解説でも述べているように、条件外で当てはまる数字があるので不適になります。

priHigh=5、priLow=2の時は、求める定数が4以上になります。

定数は言い方を変えると 
priHigh < 定数 + priLow  を満たしていればOKです。
2022.11.19 01:35
 試験まで1週間さん(No.4) 
jjon-com様

なるほど、()をいれた際に×より優先度が高くなるように、という考えよくわかりました!
式も丁寧に導出してくださり助かります!!

boyonboyon様

同様に、"priHigh < 定数 + priLow  を満たしていればOK"というのも理解できました!
ただ、同様に混乱してしまっているのが、上記の条件なら例えば、定数のところが"priHigh"でも、"priHigh+1"でも成り立ってしまうのでは…と思います。

"「ア」「イ」は、解説でも述べているように、条件外で当てはまる数字があるので不適になります。"

ここのところを詳しく教えて頂いてもよろしいでしょうか。結局は、アもイも"priHigh < 定数 + priLow"を満たしているので必ずしもpriHighと定数 + priLowの差が最小でなくてもいいのではと思ってしまいます。
2022.11.19 21:20
chihiroさん(No.5) 
FE・プラチナエキスパート
この投稿は投稿者により削除されました。(2022.11.19 21:43)
2022.11.19 21:43
chihiroさん(No.6) 
FE・プラチナエキスパート
この投稿は投稿者により削除されました。(2022.11.19 21:43)
2022.11.19 21:43
chihiroさん(No.7) 
FE・プラチナエキスパート
横から失礼します。
>結局は、アもイも"priHigh<定数+priLow"を満たしているので必ずしもpriHighと定数+priLowの差が最小でなくてもいいのではと思ってしまいます。
空欄bで問われているのは正しい演算順序を保証する定数(nestの増減値)の"最小値"です。
例えばpriHigh=5、priLow=2のとき定数=10000だと演算順序は当然正しくなります。ですが定数=10000というのは明らかに過剰で、もっと小さい値でもいいはずです。定数が最低いくつあれば正しい演算順序になるか、その条件を答えよというのが本設問の趣旨です。
2022.11.19 21:43
chihiroさん(No.8) 
FE・プラチナエキスパート
priHigh=5、priLow=2のとき定数は4以上あれば正しい演算順序になります。アの場合、定数が5以上のときに限り正しい演算順序が保証される、となりますがこれは間違いです。なぜなら定数が4の場合でも正しい演算順序になるからです。イについても同様の理由で間違いとなります。
2022.11.19 21:50
boyonboyonさん(No.9) 
>ここのところを詳しく教えて頂いてもよろしいでしょうか。
ですが、chihiroさんに説明をしていただいたとおりです。
説明の中で
>最小値
>定数が最低いくつであれば
と、おっしゃっているところは、問題文中の
>のときに限り
に当てはまると思います。

例えば、問題文に「ア」を当てはめると、
nest の値を増減する定数がpriHigh以上のときに限り正しい演算順序が保証される。
となります。
「priHigh以上の時に限り」は、反例があるのでNGです。
2022.11.19 22:35
試験まで2日さん(No.10) 
chihiro様
boyonboyon様

返信が遅くなってしまいすみません。
反例があるため、全ての条件を満たしていないため、答えが"priHigh<定数+priLo"になるという論理、理解することができました!

ご丁寧な説明ありがとうございました!
2022.11.23 00:55

【返信投稿用フォーム】

お名前(10文字以内)

顔アイコン


本文(2,000文字以内)

投稿削除用のパスワード(20文字以内)

プレビュー
※CBT方式においては出題内容の公開は禁止されているため、出題内容を尋ねたり、出題内容を特定できる類の投稿を禁止します。
※受験後に「この得点で合格していますか」といった類の質問をすることはスレッドの乱立に繋がるためお控えください。
※宣伝や迷惑行為を防止するため、当サイトとIPAサイト以外のURLを含む文章の投稿は禁止されています。
※同一人物が作成できるスレッドは24時間に1つまでに制限されています。

投稿記事削除用フォーム

投稿No. パスワード 
© 2010-2022 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop