HOME»基本情報技術者試験掲示板»基本情報技術者過去問題 平成30年秋期 午後問8
投稿する

基本情報技術者過去問題 平成30年秋期 午後問8 [3974]

 edayoshiさん(No.1) 
設問2のcの選択肢について質問です!

選択肢ウが間違っている理由についてご教授いただきたいです。

今僕が考えている、ウが間違っている理由:あくまで今回の問題は「優先順位の等しい演算子が複数個含まれている整数式の,演算の実行順序について」考えているのであり、選択肢ウにしてしまうと、優先順位が等しいかどうか関係なく右から計算することになってしまうから。

上記の認識は正しいでしょうか。
また、どのように対策をすればよいのでしょうか・・・
2022.02.02 18:01
 edayoshiさん(No.2) 
追加で、設問3のeについて質問です!
確かにトレースすることで正しい結果が得られることは確認できたのですが、ほかの選択肢(つまり正しい結果が得られない場合がある)ことは、すくなくとも解説では確認できませんでした。

実際に問題を解くうえで、ほかの選択肢が間違っていることは手元で確認したほうが良いのでしょうか。
2022.02.02 18:38
chihiroさん(No.3) 
FE プラチナマイスター
>選択肢ウにしてしまうと、優先順位が等しいかどうか関係なく右から計算することになってしまうから。
これは間違いです。以下に例を挙げてみます。
(3+2)*(5-1)
上の式では+および-の優先順位(Priority)が同率で最大です。選択肢エの場合はc2とc3で計算の順序は異なります。選択肢ウの場合、c2でもc3でも、Priority[0](+の優先順位)をPriority[1](*の優先順位)、Priority[2](-の優先順位)のどちらも超えないため、最初に計算されるのは+の箇所になります。つまりこの場合はc2でもc3でも演算は左から行うことになります。
3*(2+5-1)
この式の場合、c2だとPriority[0](*の優先順位)<Priority[1](+の優先順位)なのでip=1に更新され、Priority[1]<Priority[2](-の優先順位)は満たさないのでip=1のままです。よって最初に計算されるのは+の箇所になります。
一方c3の場合、Priority[0]<Priority[2]なのでip=2に更新、Priority[2]<Priority[1]は満たさないのでip=2のままとなり、最初に計算されるのは-の箇所になります。
つまり、この場合はc2とc3で計算順序が逆になるということになります。
要するに、エでなければ計算を必ずしも右から(あるいは左から)行うわけではないので誤りというわけです。
2022.02.02 19:13
chihiroさん(No.4) 
FE プラチナマイスター
設問3のeについて
詳しい説明は省きますが、例えば-1であれば0-1と計算することで符号なしの場合と同様に計算することができます。よって符号付きであっても正しい計算結果を返します。この点さえわかれば他の選択肢の吟味は不要です。
2022.02.02 19:40
 edayoshiさん(No.5) 
ありがとうございます!
少し考えてみます。
2022.02.09 12:35

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。
© 2010-2024 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop