イが正解となるのは、スタックの概念と配列の添え字の扱い、そしてプログラムのロジックに基づいています。スタックは、後から入れたものが先に出てくるLIFO(Last In, First Out)構造を持ちます。配列 `stack` の要素番号は1から始まるという定義です。
読み込み中...
読み込み中...
問3 次のプログラム中の a と b に入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列の要素番号は1から始まる。
関数 push は、引数で与えられた整数をスタックに格納する。格納できた場合は true を返し、格納できなかった場合は false を返す。
関数 pop は,スタックから値を取り出して返す。スタックが空のときは未定義の値を返す。
スタックを,要素数が4である大域の整数型の配列 stack, 及び次に値を格納する位置を示す大域の変数 stackPos で表現する。スタックの初期状態を図に示す。
プログラムでは,配列の領域外を参照してはならないものとする。
[プログラム]
大域:整数型: 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
結論 → 詳細 → 補足 の 3 層構成
イが正解となるのは、スタックの概念と配列の添え字の扱い、そしてプログラムのロジックに基づいています。スタックは、後から入れたものが先に出てくるLIFO(Last In, First Out)構造を持ちます。配列 `stack` の要素番号は1から始まるという定義です。
`push` 関数において、`stackPos` は次に値を格納する位置を示します。配列の領域外を参照しないためには、`stackPos` がスタックの要素数以下である場合に格納を試みる必要があります。`a` に `stackPos` を代入することで、現在の `stackPos` が指す位置(1から始まる配列で `stackPos` 番目の要素)に `inputData` が格納されます。その後 `stackPos` は1つ増え、次回の格納位置を示します。
`pop` 関数では、`stackPos` は次に格納する位置を示しており、スタックから値を取り出す際には、その `stackPos` が示す位置の「一つ前」がスタックの最上部となります。したがって、`stackPos` を1つ減らすことで(`b: stackPos - 1`)、スタックから取り出すべき要素のインデックスを正しく指し示すことができます。取り出した要素には `undefined` を代入し、スタックの要素数を減らす `stackPos` を1つ減らす操作が適切です。
選択肢アは、`pop` 関数で `stackPos` を `stackPos + 1` としているため、スタックの最上部ではなく、次の格納位置以降の要素を参照してしまい、誤りです。
選択肢ウは、`push` 関数で `a` を `stackPos - 1` としていますが、`stackPos` は格納すべき位置を指しており、その位置に格納するのが正しいので不適切です。また、`pop` 関数で `stackPos` を `stackPos + 1` としている点も誤りです。
選択肢エは、`push` 関数で `a` を `stackPos - 1` としている点が誤りであり、`pop` 関数での `b` の値も同様に誤りです。
解説は Google Gemini に IPA 公式の問題文・公式解答を入力して生成しています。 事実誤認・選択肢の取り違え・最新法令の反映漏れ等を含む可能性があるため、 重要な判断は必ず IPA 公式資料でご確認ください。
最終更新:
検証プロセス・誤り報告フローは 運営透明性レポートで公開しています。
この問題の理解を「分野全体の力」に広げるための足がかり
用語解説・選択肢分析・類題生成をその場で対話。クイズモードでは解答→解説がゼロ遷移。
アルゴリズムとプログラミング の他の問題
基本情報技術者 の同じ分野を年度をまたいで演習する
基本情報 科目B 木構造(二分木)のトレース練習|深さ優先と幅優先で全ノードをたどる
科目Bの頻出データ構造「木構造(二分木)」を、クラス・左右2本の参照・未定義の記法でトレース。深さ優先(行きがけ・通りがけ・帰りがけ)と幅優先(レベル順)の4つの巡回順を、小さな木で1ノードずつ手で追って攻略します。連結リスト・再帰・キューの集大成です。
基本情報 科目B 連結リスト(単方向リスト)のトレース練習|参照を1本ずつ付け替える
科目Bの頻出データ構造「連結リスト(単方向リスト)」を、クラス・メンバ変数(.)・参照・未定義の記法でトレース。先頭への追加・末尾までの走査・途中への挿入を、参照の付け替えを1本ずつ図と表で追って攻略します。配列との違い、付け替えの順序という最大の落とし穴を実演します。
基本情報 科目B スタックとキューのトレース練習|LIFOとFIFOを操作表で1つずつ追う
科目Bの頻出データ構造「スタック(後入れ先出し・LIFO)」と「キュー(先入れ先出し・FIFO)」を、プッシュ/ポップ・エンキュー/デキューの操作を表に書いて1つずつ追うトレースで攻略。同じ入力でも取り出す順番が逆になる理由、頂点・先頭・末尾ポインタの動き、つまずきを具体例で実演します。
基本情報技術者試験を取る意味はあるか|FEのメリットと「意味ない」と言われる理由を整理
基本情報技術者試験(FE)は「意味ない」と言われることがある資格です。取得メリットと「役に立たない」と言われる理由を、就職・実務・上位試験への接続の3観点で整理し、誰に向くのかを正直に解説します。