本文へスキップ

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


Since 2016.4.19

平成23年度 春期 応用情報技術者試験問題と解説

問7

PUSH命令でスタックにデータを入れ、POP命令でスタックからデータを取り出す。動作中のプログラムにおいて、ある状態から次の順で10個の命令を実行したとき、スタックの中のデータ次のようになった。1番目のPUSH命令でスタックに入れたデータはどれか。

  PUSH → PUSH → POP → PUSH → PUSH →
   PUSH → PUSH → POP → POP → PUSH

   PUSH───┐ ┌──→ POP
        ↓ │ 
       │   │
       ├───┤
       │192│
       ├───┤
       │ 55│
       ├───┤
       │326│
       ├───┤
       │  7│
       ├───┤
       │ 29│
       ├───┤
       │   │

ア 29  イ 7  ウ 326  エ 55


正解


解説

PUSH(a)→ PUSH(b) → POP → PUSH(c) → PUSH(d) →
 PUSH(e) → PUSH(f) → POP → POP → PUSH(g)
として、スタックの状態を考える。
便宜上スタックの状態を、左から順に表記する。

PUSH(a) ・・・ a
PUSH(b) ・・・ b, a
POP   ・・・ a
PUSH(c) ・・・ c, a
PUSH(d) ・・・ d, c, a
PUSH(e) ・・・ e, d, c, a
PUSH(f) ・・・ f, e, d, c, a
POP   ・・・ e, d, c, a
POP   ・・・ d, c, a
PUSH(g) ・・・ g, d, c, a

従って、10個の命令を実行すると、スタックには4つデータが入り、1番目のPUSH命令でスタックに入れたデータは上から4番目である。
従って、1番目のPUSH命令でスタックに入れたデータは7である。


【別解】
実行した10個の命令を逆に遡ると、以下のとおりとなる。

PUSH ・・・192, 55, 326, 7, 29 (192が入った)
POP  ・・・(?), 55, 326, 7, 29 (何かのデータが取り出された)
POP  ・・・(□), ?, 55, 326, 7, 29 (何かのデータが取り出された)
PUSH ・・・, ?, 55, 326, 7, 29
PUSH ・・・, 55, 326, 7, 29
PUSH ・・・55, 326, 7, 29
PUSH ・・・326, 7, 29
POP  ・・・(△), 7, 29  (何かのデータが取り出された)
PUSH ・・・, 7, 29
PUSH ・・・7, 29 (7が入った)

従って、1番目のPUSH命令でスタックに入れたデータは7である。

問6 目次 問8