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

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

 はんなさん(No.1) 
設問2のdですが
なぜ
priority < V[i]
ではなく
priority ≦ V[i]
なのでしょうか?
2022.05.26 19:10
nsさん(No.2) 
FE シルバーマイスター
プログラム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さん(No.4) 
FE シルバーマイスター
配列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) 
FE シルバーマイスター
nsさんが述べられているように、同じ演算子が、連続して出てきたとき、演算する順番を変えたら答えが違う場合があります。<と≦の使い分けは、それを防止し正しい順で計算するためです。--//--//
2022.05.27 00:59
boyonboyonさん(No.6) 
FE シルバーマイスター
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日経過したスレッドへの投稿はできません。
© 2010- 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop