平成23年秋問8  アルゴリズム  設問2  eについて

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
斉藤さん  
(No.1)
代入文を走査するにあたっては、iを1ではなく=右辺から始めたほうが
繰り返しが少なくなるため回答は
ウ  Getpos(S[], "=") - 1
エ  Getpos(S[], "=") + 2
のどちらかだろうとは思ったのですが下の解説やその他問題文から
項が2文字以上であるという保証が見つからず、やむなくウを選んだところ
やはり答えはエでした。

問題文の説明だと項は変数又は定数の一つ以上の並びで、
変数も定数も1文字以上のため、選択肢エの+2がどこから保証されるのかが
わかりません。
どなたかわかる方がいらっしゃいましたら回答お願いします。

■↓問題文一部抜粋
  代入文の形式は,次のとおりである。
      変数=式
  "="は代入演算子で,右辺の式の値を評価した結果を,左辺の変数に代入する。
  式は,変数又は定数(以下,項という)の一つ以上の並びで,項が二つ以上のときは各項の間に算術演算子を置く。変数は,英字("A"~"Z","a"~"z")で始まる1文字以上の英数字の列である。定数は,1文字以上の 数字("0"~"9")の列である。
2021.01.30 13:35
関数従属さん 
FE ゴールドマイスター
(No.2)
副プログラム1は〔代入文の変換〕の手順(2)の説明より
算術演算子を探すものになります。

Getpos(S[], "=") は=の位置そのものを返します。
=の次の1桁は必ず変数又は定数となりますので、
算術演算子はその次からしか現れず、
=の位置からすると+2以降になるかと思います。

例(開始、終了は<、>で表記してます)
S[]の要素番号 0123456789
S[]の値       <A=X+12+1>

だとGetpos(S[], "=")は2を返します。
S[]の要素番号3はXであり変数です。
算術演算子はS[]の要素番号4以降しか
現れないという事になるかと思います。
2021.01.30 15:18
詞音さん 
(No.3)
〔代入文の変換〕
  変換処理は,次の手順による。〔代入文の構文解析〕の手順は実行済みで,代入文には文法上の誤りがないものとする。

とあるので、〔代入文の構文解析〕を確認してみると、(2)に下記説明があります。

(2):n文字からなる代入文を,文字型配列Sの要素番号1~nに格納し,S[0]に開始マーク"《"を,S[n+1]に終端マーク"》"を,それぞれ格納する。

問題文の説明から、設問で問われている代入文は、
「=」の後(右辺)に「変数又は定数の一つ以上の並び」(最低1文字)+「》」(1文字)
例) 《Ans=X》
が来ていることになり、少なくとも右辺には2文字以上存在することになります。
なお、右辺に1文字しかない「《Ans=》」などは〔代入文の構文解析〕でエラーになるため、
「代入文には文法上の誤りがないものとする。」の説明に反します。
2021.01.30 15:22
斉藤さん  
(No.4)
>関数従属さん  詞音さん
お二方ともありがとうございました。
関数従属さんの解説も詞音さんの解説も
自分が見落としていた点を書いてくださり
とてもわかり易かったです。

ご丁寧にどうもありがとうございました。
2021.01.30 15:32

返信投稿用フォーム

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

その他のスレッド


Pagetop