平成17年度 技術士第一次試験問題【専門科目】
【16】情報工学部門
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)


EXCELのマクロのご相談なら ファーストマクロ 



W−9 目次 W−11
ファーストマクロ TOPページ