擬似言語の未定義と「未定義の値」|空の箱をどう読むか【基本情報技術者試験 科目B】

基本情報技術者試験

現行FE シラバス Ver9.2 準拠擬似言語の記述形式は2022年から変更なし最終更新 2026-08-21

変数の宣言のところで、宣言しただけの箱は空っぽだと書きました。その状態には名前が付いています。未定義です。そして擬似言語には、いったん入れた値を消して空に戻す書き方まで用意されています。

未定義 ── 値が入っていない状態

出典:IPA「擬似言語の記述形式」〔未定義,未定義の値〕

変数に値が格納されていない状態を,“未定義”という。変数に“未定義の値”を代入すると,その変数は未定義になる。

正典に書かれているのは、この2文だけです。まず1文目 ── 整数型: x と書いただけの x が、未定義です。

整数型: x
整数型: y ← 5

x は未定義、y は 5。同じ1行の宣言でも、← があるかどうかで分かれます。

宣言しただけの空の箱が未定義、値を入れると定義され、未定義の値を入れるとまた空に戻る

未定義は「入っていないことが、はっきり決まっている」状態

「0が入っている」ではない

未定義は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] が 未定義)

◯◯ が 未定義 という日本語の書き方です。= や ≠ は使いません。

未定義が出てきたときの手順

  1. その変数(または箱)に、まだ値を入れる行が実行されていないかを確かめる
  2. 宣言の { } の中に 未定義の値 が書かれていないかを見る
  3. 未定義の箱は読まない。読む前に、必ず が 未定義 のような条件で調べている

4番目が読み方の要です。「未定義を読んだらどうなるか」は決められていないので、出題もそこを問いません。

実際の出題に、次の1行があります。この条件は何を調べていますか。

if (pointerList[p] が 未定義)

1行ずつ動かして確かめる

変数と配列の両方で、未定義 → 値が入る → また未定義という流れを見てください。

未定義 → 値が入る → また未定義

当サイトオリジナルの例題


ループ開始前

配列

▲ いま読んでいる▲ いま書いた

いま計算していること

まだ計算していません

変数の状態

トレース表(進めると1行ずつ積み上がります)

つまずきポイントまとめ

まちがえ方 正しい理解
未定義を「0が入っている」と思う 何も入っていない状態。0 は立派な値
未定義の値 の代入をエラーだと思う 正典に定められた書き方。入れた値を消せる
未定義の箱を要素数から外す 要素数は用意した箱の数。中身の有無は関係ない
未定義を = で比べようとする ◯◯ が 未定義 という日本語の書き方を使う
未定義の箱を読んだ先を考えてしまう 読む前に必ず調べている。そこは問われない

次に読む

この記事で引用した資料

いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では問題文を改変せずに引用しています。

シミュレータと練習問題は当サイトのオリジナルです。

Copied title and URL