以下の命令を持ったスタックマシンを想定する。
push a スタックにデータ a をプッシュする。
dup スタックの最上部のデータを複製してスタックにプッシュする。
exch スタックの最上部の2つのデータの位置を交換する。
add スタックから2つのデータをポップし、その和をスタックにプッシュする。
sub スタックから2つのデータをポップし、その差をスタックにプッシュする。
(スタック最上部2番目のデータから最上部のデータを引く。)
mul スタックから2つのデータをポップし、その積をスタックにプッシュする。
このとき、次のように記述されたプログラムが最終的にスタックに残す結果は、どの式を処理したものと同じか。@〜Dの中から選べ。
push a
push b
sub
dup
dup
mul
exch
push 2
add
mul
@ (a - b) × 2
A (a - b + 2)2
B (a - b)2 × (a - b + 2)
C (a - b) × 2 + (a - b + 2)
D (a - b)2 × 2
B
便宜上、スタックの状態を左から順に表記する。
push a ・・・ a
push b ・・・ b, a
sub ・・・ a-b
dup ・・・ a-b, a-b
dup ・・・ a-b, a-b, a-b
mul ・・・ (a-b)2, a-b
exch ・・・ a-b, (a-b)2
push 2 ・・・ 2, a-b, (a-b)2
add ・・・ a-b+2, (a-b)2
mul ・・・ (a-b)2 × (a-b+2)
従って、(a − b)2 × (a − b + 2) が正解。
W−4 | 目次 | W−6 |