後置記法の式をスタックで評価する。数値はpushし、演算子が来たら右辺、左辺の順にpopして「左辺 演算子 右辺」を計算し、その結果をpushする。スタックは初め空であり、次のトークンを左から処理する。最後にスタックへ残る値はいくつか。 20, 6, 2, −, ÷ ÷は整数除算であり、ここでは割り切れる。
本サイトで独自に作成。IPAの試験問題からの転載ではありません。
公開日:
選択肢を選んで、答え合わせをしましょう。
回答せずに正解・解説を確認する
正解:ア 5
この表示だけでは、回答数や正答率は変わりません。
解説
20、6、2を積むと、スタックは底から{20, 6, 2}です。−では右辺2、左辺6を取り出して6 − 2 = 4を積み、{20, 4}となります。÷では右辺4、左辺20を取り出し、20 ÷ 4 = 5を積みます。
内側の6 − 2を先に計算し、その結果4で20を割るので5です。
減算の左右を逆にして2 − 6 = −4とすると−5になりますが、指定されたpop順に反します。
トークンを後置記法で処理せず、(20 − 6) ÷ 2という別の式へ読み替えると7になります。
最後の2だけを除数にしていますが、2は先に減算で使われています。
関連知識
スタックは最後に入れた値を最初に取り出すLIFO構造です。加算や乗算は左右を逆にしても同じ結果ですが、減算や除算は変わります。演算ごとに二つ取り出して一つ戻すため、スタックの要素数は一つ減ります。
間違えやすいポイント
最初にpopした値を左辺にしないこと。この問題では最初が右辺です。加算だけの例では誤りに気付きにくいので、減算や除算で確かめます。
覚え方
先に出た値が右、次に出た値が左。
実務での意味
式の評価器や構文解析を学ぶ際、スタックの底と先頭を明記した表を作り、各トークン後の状態を記録します。
解説:本サイト編集部によるオリジナル文章