科目B
令和7年度 基本情報技術者試験 科目B 公開問題 問3
次のプログラム中のaとbに入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列の要素番号は 1 から始まる。
関数 push は,引数で与えられた整数をスタックに格納する。格納できた場合は true を返し,格納できなかった場合は false を返す。
関数 pop は,スタックから値を取り出して返す。スタックが空のときは未定義の値を返す。
スタックを,要素数が 4 である大域の整数型の配列 stack,及び次に値を格納する位置を示す大域の変数 stackPos で表現する。スタックの初期状態を図に示す。
プログラムでは,配列の領域外を参照してはならないものとする。
〔図〕
要素番号 3 の下に ↑ stackPos
注記 網掛けはその要素が未定義であることを示す。
図 スタックの初期状態
〔プログラム〕
| 要素番号 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| stack | 4 | 3 | (網掛け) | (網掛け) |
大域: 整数型: stackPos ← 3
大域: 整数型の配列: stack ← {4, 3, 未定義の値, 未定義の値}
○論理型: push(整数型: inputData)
if (stackPos ≦ stackの要素数)
stack[a] ← inputData
stackPos ← stackPos + 1
return true
else
return false
endif
○整数型: pop()
整数型: popData ← 未定義の値
if (stackPos > 1)
stackPos ← b
popData ← stack[stackPos]
stack[stackPos] ← 未定義の値
endif
return popData
答えを選ぶ
出典:令和7年度 基本情報技術者試験 科目B 公開問題 問3(問題文は IPA の公開問題。図・数式・下線などはテキストに直して掲載。解説は当サイト作成)
解説に誤りを見つけたら、解説の誤りを報告してください。
答えと解説を見る
正解:イ
覚える知識
スタックのpush/popトレース
スタックポインタが「次の空き位置」を指す実装では、push は格納してから +1、pop は −1 してから読む。
この問題で必要なこと
stackPos は「次に値を格納する位置」を表す(初期値 3、要素 1・2 は使用中)。push では stack[stackPos] に格納してから 1 増やすので、a は stackPos になる。pop では先に stackPos を 1 減らして最上段を指し、そこを読むので、b は stackPos − 1 になる。正解はイ。
ひっかけ
stackPos が最上段の要素を指すと思い込むと、a に stackPos − 1 を選んでしまう。pop で +1 を選ぶのは、取り出す方向を逆に取り違えたもの。