本文へスキップ

技術士試験(情報工学部門)・情報技術者試験。ファーストマクロ。


Since 2016.4.19

平成17年度 技術士第一次試験問題【専門科目】

W−10

仮想計算機で用いられるスタックマシンが次の命令を有するとする。

push a  スタックにデータ a をプッシュする。

dup   スタックの最上部のデータを複製してスタックにプッシュする。

exch   スタックの最上部の2つのデータの位置を交換する。

add   スタックから2つのデータをポップし、その和をスタックにプッシュする。

sub   スタックから2つのデータをポップし、その差をスタックにプッシュする。
(スタック最上部2番目のデータから最上部のデータを引く。)

mul   スタックから2つのデータをポップし、その積をスタックにプッシュする。

このとき、次のように記述されたプログラムが最終的にスタックに残す結果は、どの式を処理したものと同じか。

 push a
 push b
 sub
 dup
 push 1
 add
 exch
 push 2
 Sub
 mul

@ (a-b+2)*1

A (a-b+1)*(a-b-2)

B (a-b-1)*(-2)

C (a-b+2)*(a-b-1)

D (a-b)*(1-2)


正解

A


解説

便宜上、スタックの状態を左から順に表記する。

push a  ・・・ a
push b  ・・・ b, a
sub    ・・・ a-b
dup    ・・・ a-b, a-b
push 1  ・・・ 1, a-b, a-b
add    ・・・ a-b+1, a-b
exch    ・・・ a-b, a-b+1
push 2  ・・・ 2, a-b, a-b+1
sub    ・・・ a-b-2, a-b+1
mul    ・・・ (a-b+1)*(a-b-2)

W−9 目次 W−11