平成23年秋期試験午後問題  問8

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
はんなさん  
(No.1)
設問2のdですが
なぜ
priority < V[i]
ではなく
priority ≦ V[i]
なのでしょうか?
2022.05.26 19:10
nsさん 
FE・シルバーエキスパート
(No.2)
プログラム2は〔代入文の変換〕の(2)の処理、すなわち「最も優先して処理するべき演算子の位置を決定する処理」を行うプログラムです。
iの初期値は Getpos(S[], ">>") - 1、すなわち「代入文の一番後ろ」です。
ループ内にi <- i - 1があることから、代入文を後ろから一文字ずつチェックすることが分かります。

これらをもとに様々な代入文に対してプログラム2をトレースしてみて、"<"と"≦"の違いを考えてみてください。
ヒントは「代入文内に優先順位の等しい演算子が複数ある場合」です。
2022.05.26 22:13
はんなさん  
(No.3)
ヒントありがとうございます。

考えてみましたが、やはり一度でもpriorityが12になれば12<12で負となっても、priorityは12のままとなり、わざわざ≦とする必要がないのではないかと考えます。
2022.05.26 23:15
nsさん 
FE・シルバーエキスパート
(No.4)
配列Sが  <<Ans=X1*10*X2>>  の場合、
配列Vが  0,2,2,2,10,2,3,12,3,3,12,2,3,1  となります。
問題文に例として出ている代入文の"+"を"*"に変えました。(配列Vが少し見づらいですがご容赦ください)

このケースについて、"<"の場合と"≦"の場合で、最終的なnextの値はいくつになりましたか?
このプログラムの結果はnextの値です。priorityの値が変化するかどうかではなく、nextの値がいくつになるかが重要です。
2022.05.27 00:50
boyonboyonさん 
(No.5)
nsさんが述べられているように、同じ演算子が、連続して出てきたとき、演算する順番を変えたら答えが違う場合があります。<と≦の使い分けは、それを防止し正しい順で計算するためです。--//--//
2022.05.27 00:59
boyonboyonさん 
(No.6)
No.5の
>同じ演算子が、連続して出てきたとき
は限定しすぎでした。
具体的に、文字ではなく数値を入れた式で説明します。
例えば、10-5+2  で考えます。
設問2のdを  <  にするとnextが、+  の場所のままになり、5+2  が最初に抽出され、正しく計算されません。
≦  にすると、nextが、ー  のところになり、10-5  が最初に抽出され、正しく計算されます。

設問2のcでは、これとは逆に  nextを移動させたくないので、<  にします。
2022.05.27 09:39
りなさん 
(No.7)
この投稿は投稿者により削除されました。(2022.05.27 21:24)
2022.05.27 21:24
はんなさん  
(No.8)
nsさん

ご丁寧に例までありがとうございます。
nextに注目しておりませんでした。
理解することができました、ありがとうございました。
2022.05.27 21:25
はんなさん  
(No.9)
boyonboyonさん

補足のご説明ありがとうございます。
わかりやすくご説明いただき、理解できました。
ありがとうございました。
2022.05.27 21:25

返信投稿用フォーム

スパム防止のためにスレッド作成から30日以上経過したスレッドへの書き込みは禁止しています。

その他のスレッド


Pagetop