本文へスキップ

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


Since 2016.4.19

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

W−3

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

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