仮想的なスタックマシンが次の命令を持つとする。
push a スタックにデータ aを積む。
dup スタックの最上部のデータを複製してスタックに積む。
swap スタックの最上部の2つのデータの位置を交換する。
add スタックの最上部の2つのデータを取り出し、その和をスタックに積む。
sub スタックの最上部に2つのデータ a, b があり、b が上に積まれているとき、a, b を取り出し、a-b をスタックに積む。
div スタックの最上部に2つのデータ a, b があり、b が上に積まれているとき、a, b を取り出し、a/b の商をスタックに積む。
このとき、(a-b+c) / (a-b) を計算するために次のようにプログラムを作成したとき、(ア) と (イ) に当てはまる命令を@〜Dの中から選べ。
push a
pish b
sub
(ア)
push c
add
(イ)
div
ア イ
@ dup dup
A dup push b
B swap dup
C swap push b
D dup swap
D
便宜上、スタックの状態を左から順に表記する。
push a ・・・ a
push b ・・・ b, a
sub ・・・ a-b
dup(ア) ・・・ a-b, a-b
push c ・・・ c, a-b, a-b
add ・・・a-b+c, a-b
swap(イ) ・・・ a-b, a-b+c
mul ・・・ (a-b+c) / (a-b)
W−3 | 目次 | W−5 |