平成23年秋期午後問8
AKIMIDOさん
(No.1)
https://www.fe-siken.com/kakomon/23_aki/pm08.html
この問のスレッドに既に上がっているところ部分についてなのですが、設問2のcに入る部分についての質問です。
なぜ等号が入ると、優先順位の最も高い最初のではなく、優先順位が最も高い最後のとなるのでしょうか?
理由が全く理解できません。助けてください。
この問のスレッドに既に上がっているところ部分についてなのですが、設問2のcに入る部分についての質問です。
なぜ等号が入ると、優先順位の最も高い最初のではなく、優先順位が最も高い最後のとなるのでしょうか?
理由が全く理解できません。助けてください。
2021.02.05 12:57
sumakkoさん
★FE シルバーマイスター
(No.2)
この投稿は投稿者により削除されました。(2021.02.05 17:21)
2021.02.05 17:21
labonitaさん
(No.3)
あまり質問の意味を理解しておらず、申し訳ございませんが...下記は私が問題に対する解釈です。
副プログラム1はV[1]からV[2]、V[3]、V[4]...最後まで、V[]の中を1ずつ増やして、V[i]の中身をpriorityと比較していくプログラムです。
(V[i]が1でなければ繰り返すというのは、表1から分かるように、「》」でなければ繰り返すとなるので、最後になるまで、繰り返していくことになります。)
priorityに10(等号)を入れると、それより大きいのは11(+,-)、と12(*,/)となります。(同じく表1から読み取れます。)
数字が大きいほうが優先すべき演算子であることが分かります。
ですので、priorityが10の時、V[i]の中身より小さい場合は、V[i]の中身が、優先すべき演算子の+,-(11)か、*,/(12)のどちらかになるので、一度そのV[i]の中身をpriorityに入れて、優先すべき演算子の格納されている場所iをnextに記録します。
順番で比較していくので、先にpriorityに11が入った場合、それより優先すべき*,/(12)がない場合、そのまま終了し、+,-の情報が記録されるが、*,/(12)に出くわした時には、12が11より大きいので、12がpriorityに、*,/(12)の場所iがnextに上書きされます。
上記で、答えは「ア」のpriority < V[i]になります。
選択肢の「ウ」はpriority = V[i]の場合は、+,-や*,/がなくても、等号が記録されてしまうので、間違いです。
副プログラム1はV[1]からV[2]、V[3]、V[4]...最後まで、V[]の中を1ずつ増やして、V[i]の中身をpriorityと比較していくプログラムです。
(V[i]が1でなければ繰り返すというのは、表1から分かるように、「》」でなければ繰り返すとなるので、最後になるまで、繰り返していくことになります。)
priorityに10(等号)を入れると、それより大きいのは11(+,-)、と12(*,/)となります。(同じく表1から読み取れます。)
数字が大きいほうが優先すべき演算子であることが分かります。
ですので、priorityが10の時、V[i]の中身より小さい場合は、V[i]の中身が、優先すべき演算子の+,-(11)か、*,/(12)のどちらかになるので、一度そのV[i]の中身をpriorityに入れて、優先すべき演算子の格納されている場所iをnextに記録します。
順番で比較していくので、先にpriorityに11が入った場合、それより優先すべき*,/(12)がない場合、そのまま終了し、+,-の情報が記録されるが、*,/(12)に出くわした時には、12が11より大きいので、12がpriorityに、*,/(12)の場所iがnextに上書きされます。
上記で、答えは「ア」のpriority < V[i]になります。
選択肢の「ウ」はpriority = V[i]の場合は、+,-や*,/がなくても、等号が記録されてしまうので、間違いです。
2021.02.05 17:04
sumakkoさん
★FE シルバーマイスター
(No.4)
すみません、No.2のpriorityの値が違ってましたので訂正しました。
例えば Ans=x/y*z という代入文があるとします。
V(6)とV(8)の値が12となります。
priorityの初期値を10として
priority<V[i]の式の場合
priority< V[6]は真(条件に合致する)で next←6 priority←12
次にpriority< V[8]は偽(条件に合致しない)となるので、nextの値は6のままとなります。
「優先順位が最も高い最初の算術演算子の要素番号を変数 next に格納する」との問題文の趣旨に合致します。
一方、priority≦V[i]の式だと
priority≦ V[6]は真で next←6 priority←12
次にpriority≦ V[8]も真となるので、next←8 priority←12となり、
nextは「最初の算術演算子の要素番号」とはなりません。
要するに、
同じ優先順位priority=V[i]の演算が現れたとき、priority<V[i]だとnextの値はそのままですが、priority≦V[i] であれば next はiの値で上書きされることになり、「最初の算術演算子の要素番号」ではなくなります。
本問題の解説は、まだ無いようですが、類題として、現在[2787]でスレが立っている、平成30年秋期午後問8の解説を参照してください。
https://www.fe-siken.com/kakomon/30_aki/pm08.html
やはり、設問2のcの問題です。何というデジャブ(既視感)でしょうか。
例えば Ans=x/y*z という代入文があるとします。
V(6)とV(8)の値が12となります。
priorityの初期値を10として
priority<V[i]の式の場合
priority< V[6]は真(条件に合致する)で next←6 priority←12
次にpriority< V[8]は偽(条件に合致しない)となるので、nextの値は6のままとなります。
「優先順位が最も高い最初の算術演算子の要素番号を変数 next に格納する」との問題文の趣旨に合致します。
一方、priority≦V[i]の式だと
priority≦ V[6]は真で next←6 priority←12
次にpriority≦ V[8]も真となるので、next←8 priority←12となり、
nextは「最初の算術演算子の要素番号」とはなりません。
要するに、
同じ優先順位priority=V[i]の演算が現れたとき、priority<V[i]だとnextの値はそのままですが、priority≦V[i] であれば next はiの値で上書きされることになり、「最初の算術演算子の要素番号」ではなくなります。
本問題の解説は、まだ無いようですが、類題として、現在[2787]でスレが立っている、平成30年秋期午後問8の解説を参照してください。
https://www.fe-siken.com/kakomon/30_aki/pm08.html
やはり、設問2のcの問題です。何というデジャブ(既視感)でしょうか。
2021.02.05 17:28
AKIMIDOさん
(No.5)
sumakkoさん、labonitaさん、ご丁寧にありがとうございます!お二人のおかげで理解することができました!また何かありましたらぜひよろしくお願いします!
2021.02.06 10:13
広告
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。
広告