変数の宣言のところで、宣言しただけの箱は空っぽだと書きました。その状態には名前が付いています。未定義です。そして擬似言語には、いったん入れた値を消して空に戻す書き方まで用意されています。
第1部 擬似言語の教科書 地図+20回
G1擬似言語の地図(入口)G2-1変数と宣言G2-2データ型G2-3代入「←」G3-1部品を呼ぶ/戻るG3-2引数G3-3戻り値・手続と関数G4-1配列と要素番号G4-2配列の読み書きG5選択処理 ifG6-1繰返し forG6-2配列を for で回すG7繰返し whileG8-1算術演算子と優先順位G8-2and / or / notG9-12次元配列G9-22重ループG10大域変数と局所変数G11未定義G12-1演算子 . の読み方G12-2クラスとはG12-3コンストラクタ
未定義 ── 値が入っていない状態
出典:IPA「擬似言語の記述形式」〔未定義,未定義の値〕
変数に値が格納されていない状態を,“未定義”という。変数に“未定義の値”を代入すると,その変数は未定義になる。
正典に書かれているのは、この2文だけです。まず1文目 ── 整数型: x と書いただけの x が、未定義です。
整数型: x 整数型: y ← 5
x は未定義、y は 5。同じ1行の宣言でも、← があるかどうかで分かれます。
未定義は「入っていないことが、はっきり決まっている」状態
未定義は0でも空文字でもありません。何も入っていないという状態そのものです。
だから {5個の 0}(全部0で埋める)と {5個の 未定義の値}(全部空にしておく)は別のものです。前者はもう値が入っていて、後者はまだ入っていません。
次の3行を実行し終えたとき、p と q はどうなっていますか。
整数型: p ← 3 整数型: q q ← p
「未定義の値」を代入すると、空に戻る
正典の2文目です。未定義の値 という書き方そのものが、代入できる値のように扱われます。
整数型: x ← 5 x ← 未定義の値
1行目で x は 5。2行目でまた未定義に戻ります。代入は上書きなので、5 はどこにも残りません。
(令和7年度 基本情報技術者試験 科目B 公開問題 問3)
stack[stackPos] ← 未定義の値
スタックから値を取り出したあと、その場所を空に戻している行です。取り出したのだから、もう入っていないことにする ── 状態を正しく保つために書かれています。
なぜ、わざわざ空に戻すのか
プログラムが「どこまでが有効な値か」を、値そのもので表しているからです。
0 で埋めてしまうと、本当に 0 が入っている箱と区別できません。未定義なら「入っていない」とはっきり分かります。網掛けや空欄で図示されるのは、この状態です。
次の3行のあと、x はどうなっていますか。
整数型: x ← 7 x ← x + 1 x ← 未定義の値
配列にも、未定義の箱がある
配列は箱ごとに未定義かどうかが決まります。実際の出題では、この形がよく出ます。
出典:令和7年度 問3/令和6年度 問4/令和7年度 問5(いずれもプログラムの一部)
大域: 整数型の配列: stack ← {4, 3, 未定義の値, 未定義の値}
整数型の配列: work ← {(n1 + n2)個の 未定義の値}
実数型の二次元配列: result ← {row行col列の 未定義の値}
1つ目は途中まで埋まっている配列。2つ目と3つ目は場所だけ先に取って、中身はこれから入れるという形です。G4-2 で見た「◯個の △」の △ に 未定義の値 を置いたものです。
{4, 3, 未定義の値, 未定義の値} の要素数は 4 です。中身が入っている箱だけを数えるのではありません。
「いくつ入っているか」を知りたいときは、別の変数がそれを持っています。令和7年度 問3 では stackPos がその役です。
次の宣言のあと、aの要素数 と a[3] はどうなっていますか。
整数型の配列: a ← {10, 20, 未定義の値, 未定義の値, 未定義の値}
未定義かどうかを、条件で調べる
未定義であること自体を、if の条件にできます。
出典:令和8年度 基本情報技術者試験 科目B 公開問題 問4(プログラムの一部)
if (pointerList[p] が 未定義)
◯◯ が 未定義 という日本語の書き方です。= や ≠ は使いません。
未定義が出てきたときの手順
- その変数(または箱)に、まだ値を入れる行が実行されていないかを確かめる
- 宣言の
{ }の中に未定義の値が書かれていないかを見る - 未定義の箱は読まない。読む前に、必ず
が 未定義のような条件で調べている
4番目が読み方の要です。「未定義を読んだらどうなるか」は決められていないので、出題もそこを問いません。
実際の出題に、次の1行があります。この条件は何を調べていますか。
if (pointerList[p] が 未定義)
1行ずつ動かして確かめる
変数と配列の両方で、未定義 → 値が入る → また未定義という流れを見てください。
未定義 → 値が入る → また未定義
当サイトオリジナルの例題
ループ開始前
配列
いま計算していること
変数の状態
出力
トレース表(進めると1行ずつ積み上がります)
つまずきポイントまとめ
| まちがえ方 | 正しい理解 |
|---|---|
| 未定義を「0が入っている」と思う | 何も入っていない状態。0 は立派な値 |
未定義の値 の代入をエラーだと思う |
正典に定められた書き方。入れた値を消せる |
| 未定義の箱を要素数から外す | 要素数は用意した箱の数。中身の有無は関係ない |
未定義を = で比べようとする |
◯◯ が 未定義 という日本語の書き方を使う |
| 未定義の箱を読んだ先を考えてしまう | 読む前に必ず調べている。そこは問われない |
次に読む
この記事で引用した資料
- 擬似言語の記述形式 科目Bの公開問題・サンプル問題の各冊子に掲載。冊子上の名称は年度により「基本情報技術者試験用」と「基本情報技術者試験,応用情報技術者試験用」があるが、本文は同一
- 基本情報技術者試験 科目B サンプル問題(2022年12月26日公開)
- 令和6年度 基本情報技術者試験 科目B 公開問題(2024年7月5日公開)
- 令和7年度 基本情報技術者試験 科目B 公開問題(2025年7月4日公開)
- 令和8年度 基本情報技術者試験 科目B 公開問題(2026年7月1日公開)
いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では問題文を改変せずに引用しています。
シミュレータと練習問題は当サイトのオリジナルです。

