平成30年秋期午後問8 設問1  b

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
ひでさん  
(No.1)
https://www.fe-siken.com/kakomon/30_aki/pm08.html
設問1  bについてです。
解説や他の方の質問を読んでぼんやりと理解ができたので、確認させてください。

ア、イ、エの3つが正しい計算順序を求めることができ、その中でもaで求めた「正しい計算順序が保証される定数の条件が2以上」という答えとマッチしている(解説のように唯一2,3,4...となっていくため)ものがア、イ、エの中でエだけであるため、答えがエとなる
ということでよろしいでしょうか?

ついでに解説中の
「※例のように priHigh=3、priLow=2 の場合、2, 3, 4, 5 …、すなわち2以上が③④で加算される適切な値となります。」
のところがよくわかりません。
何が2,3,4,5のように増えていくのでしょうか。

こちらも合わせてお時間のある方、よろしくお願いします。
2021.11.08 00:22
chihiroさん 
FE プラチナマイスター
(No.2)
質問の回答からずれるかもしれませんが、考え方を説明します。
行③および行④でnestに加算(減算)される定数をpriNestとします。
本問のプログラムは各演算子に計算の優先度を設け、その優先度が高い順に計算を行うものです。
その計算順は、括弧内の式>乗除算>加減算  となっている必要があります。(要は普段我々がしている計算のルールと同じ順序です)
優先度が同じ場合は左から順番に計算するのですが、このときpriNestの設定次第で計算順序が正しくなくなるケースがあります。
例えば、2×(3+4)のように、括弧外で乗除算が、括弧内で加減算が行われる場合です。
priHigh=3、priLow=2のとき、"×"の優先度はpriHigh=3、"+"の優先度はpriLow+priNest=2+priNestとなります。ここでpriNest=1だと"+"の優先度=3となり、優先度が同じ場合は左から計算されるため、3+4ではなく2×3が先に計算されてしまいます。
括弧内が先に計算されるためには、priHigh < priLow + priNest
すなわち  priHigh - priLow < priNest をpriNestが満たしていなければなりません。
priHigh,priLow,priNestはいずれも整数なので、
priHigh - priLow + 1 ≦ priNest とも表現できます。(これが答え)
なお、priNestは上の式を満たしていればどんな値でも構いません。
priHigh=3、priLow=2であれば、2≦priNestなので、priNest=2,3,4,5,…となります。(これがpriHigh=3、priLow=2 の場合、2, 3, 4, 5 …の意味です)
ちなみに、優先度により計算順序が狂いうるパターンは、上の「括弧外で乗除算が、括弧内で加減算が行われる」パターン以外にはありえません。確認してみてください。
2021.11.08 09:58
ひでさん  
(No.3)
chihiroさん、今日もありがとうございます。
私の後者の質問についてはよく理解できました。
しかし、前者の方についてはまだスッキリできていません。

このサイトの解説には「括弧外の乗除算と括弧内の加減算の優先度に差がつくのはアイエ」と書いてあります。
そして今計算してみた限りではchihiroさんが例として挙げた式「2×(3+4)」にアイエのどれを当てはめても正しい結果が返ってきました。(計算を間違えていたら申し訳ないです。)
アイエの中でもエが解答になるのはやはり私が考えている通り「aの解答と合っている(2以上)からである」という認識をしてもよいのでしょうか?
2021.11.08 11:03
chihiroさん 
FE プラチナマイスター
(No.4)
まず、aの解答に関してですが、これはpriHigh=2、priLow=1とした場合のpriNestの満たすべき条件です。
bはpriHighやpriLowに具体的な数値を入れたときのpriNestの条件ではなく、priHighやpriLowがどんな値をとっても(もちろんpriHigh>priLowを満たしたうえでですが)成立するような、priNestの条件を答える問題です。
つまり、bの問は、aの問を一般化したものであって、aの答えがこうだからbの答えはこうなる、というわけではないのです。
例えばpriHigh=5、priLow=2のとき、priNest≧5-2+1=4となりますが、これは別にaの答えである、「priNestが2以上」と一致するわけではないですよね?
bの問はpriNestが満たすべき値の範囲を"正しく"答える問題です。
例えばア:priNest≧priHighですが、priHigh=5、priLow=2のときはpriNest≧5となります。
ですが先ほど言った通り、priNestは4でもOKです。priNest≧5だとpriNest=4だとダメだと言っていることになるので不適当になります。イも同様の理由で不適です。
2021.11.08 11:40
ひでさん  
(No.5)
chihiroさんの粘り強い説明のおかげでようやく理解することができました。
そもそもbが何を問いているのかを理解できていませんでした。
確かにアやイでは正しいpriNestの値を間違っているとしてしまいますね。

アルゴリズムに限らずですが、本番までの期間で問題が何を聞いているのかを十分に考えて解く力を養いたいと思います。

本当にありがとうございました。
2021.11.08 12:07

返信投稿用フォーム

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

その他のスレッド


Pagetop