以下の命令を持ったスタックマシンを想定する。
push x スタックにデータ x をプッシュする。
dup スタックの最上部のデータを複製してスタックにプッシュする。
swap スタックの最上部の2つのデータの位置を交換する。
add スタックから2つのデータをポップし、その和をスタックにプッシュする。
sub スタックから2つのデータをポップし、その差をスタックにプッシュする。
(スタック最上部2番目のデータから最上部のデータを引く。)
mul スタックから2つのデータをポップし、その積をスタックにプッシュする。
div スタックから2つのデータをポップし、その商をスタックにプッシュする。
(スタック最上部2番目のデータを最上部のデータで割る。)
このとき、(2 - a - b)2 * / (a + b) を計算した結果をスタック最上部に残すプログラムを次のように記述した。 ア 〜 エ に当てはまる命令の組合せとして最も適切なものを@〜Dの中から選べ。
push a
push b
add
ア
push 2
イ
sub
dup
ウ
エ
div
ア イ ウ エ
@ dup swap mul swap
A dup swap swap mul
B swap swap mul dup
C push a push b mul add
D dup swap push 2 sub
@
便宜上、スタックの状態を左から順に表記する。
(2 - a - b) を (2 - (a + b)) と考えるのがポイントとなる。
push a ・・・ a
push b ・・・ b, a
add ・・・ a+b
dup ・・・ a+b, a+b
push 2 ・・・ 2, a+b, a+b
swap ・・・ a+b, 2, a+b
sub ・・・ 2-(a+b), a+b
dup ・・・2-(a+b), 2-(a+b), a+b
mul ・・・(2-a-b)2, a+b
swap ・・・a+b, (2-a-b)2
div ・・・(2-a-b)2 / (a+b)
W−2 | 目次 | W−4 |