本文へスキップ

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


Since 2016.4.19

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

W−5

以下の命令を持ったスタックマシンを想定する。

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