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

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



W−2 目次 W−4
ファーストマクロ TOPページ