技術士第一次試験|無料Web版

技術士 基礎科目 令和3年度 Ⅰ-2-5|問題と解説

問題 Ⅰ-2-5

演算式において、+、−、×、÷などの演算子を、演算の対象であるAやBなどの演算数の間に書く「A+B」のような記法を中置記法と呼ぶ。また、「AB+」のように演算数の後に演算子を書く記法を逆ポーランド表記法と呼ぶ。中置記法で書かれる式「(A+B)✕(C-D)」を下図のような構文木で表し、これを深さ優先順で、「左部分木、右部分木、節」の順に走査すると得られる「AB+CD−×」は、この式の逆ポーランド表記法となっている。
中置記法で「(A+B÷C)×(D−F)」と書かれた式を逆ポーランド表記法で表したとき、最も適切なものはどれか。

1 ABC÷+DF−×
2 AB+C÷DF−×
3 ABC÷+D×F−
4 ×+A÷BC−DF
5 AB+C÷D×F
問題図表
問題図表1

正解と解説

正解:1

解説

逆ポーランド表記法(後置記法)では,二項演算子を左の演算対象,右の演算対象の後ろに置く。構文木では左部分木,右部分木,節(演算子)の順にたどる。

まず,左の括弧内では加算より除算が先なので,B÷C を BC÷ にする。これにAを加える A+B÷C は ABC÷+ となる。

次に,右の括弧内の D−F を DF− にする。左右の結果を掛けるため,最後に×を置き,ABC÷+DF−× を得る。

1. ○ 左括弧,右括弧,最後の乗算の順になっており,設問の式と一致する。

2. × AとBを先に加え,その和をCで割る点が誤り。この並びは ((A+B)÷C)×(D−F) を表す。正しくは,B÷Cを先に求めてAに加える。

3. × Dを掛けてからFを引く点が誤り。この並びは (A+B÷C)×D−F を表す。正しくは,D−Fを一まとまりにしてから掛ける。

4. × 演算子を演算対象の前に置く点が誤り。これは同じ式の前置記法(ポーランド記法)であり,正しくは演算子を後ろに置く後置記法で表す。

5. × A+Bを先に計算し,Fを結び付ける演算子もない点が誤り。最後に ((A+B)÷C)×D とFが別々に残る。正しくは5個の演算数を4個の二項演算子で一つの式にまとめ,1の順序にする。

後置記法では演算順序が並びに含まれるので括弧が不要になる。左から読み,演算数はスタックに積み,演算子が来たら上の2値を取り出して計算結果を戻す。先に取り出した値が右の演算対象,次が左の演算対象であり,減算・除算では順序を逆にしない。「直前の2項」は文字列の直前2文字ではなく,途中結果も含むスタック上の2値である。

問題・正答の出典:公益社団法人 日本技術士会(公式の過去問題・公式正答)
掲載している解説は日本技術士会の公式解説ではありません。

令和3年度の年度別演習を始める