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

基本情報技術者試験

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

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

期間限定クーポンPR|Udemy の講座科目B オリジナル模試 3回分・60問42%OFF 1,500円2,600円中身を見る ›

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

出典: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 が入っている箱と区別できません。未定義なら「入っていない」とはっきり分かります。網掛けや空欄で図示されるのは、この状態です。

配列にも、未定義の箱がある

配列は箱ごとに未定義かどうかが決まります。実際の出題では、この形がよく出ます。

出典:令和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 がその役です。

次の2行を実行したあと、aの要素数 と a の中身はどうなっていますか。配列の要素番号は1から始まります。

整数型の配列: a ← {4, 7, 1}
a[2] ← 未定義の値

未定義かどうかを、条件で調べる

未定義であること自体を、if の条件にできます。

if (a[i] が 未定義)

a[i] にまだ値が入っていなければ、条件が成り立ちます。◯◯ が 未定義 という日本語の書き方です。= や ≠ は使いません。

本物もこう書かれる

(令和8年度 基本情報技術者試験 科目B 公開問題 問4)

    if ( a が 未定義)

枠で囲んだ a が空欄です。が 未定義 の条件が、空欄つきで出題されています。

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

  1. その変数(または箱)に、まだ値を入れる行が実行されていないかを確かめる
  2. 宣言の { } の中に 未定義の値 が書かれていないかを見る
  3. が 未定義 の行があれば、そこで値が入っているかどうかを調べていると読む

未定義の値は return で返されることもあり(令和7年度 問3)、配列に未定義が残るかどうかが問われることもあります(サンプル問題 問11)。ただし、未定義と計算・比較した結果は問われません。記述形式に決められていないからです。

次のプログラムを実行したあと、a の中身はどうなっていますか。配列の要素番号は1から始まります。

整数型の配列: a ← {6, 2, 未定義の値, 9}
整数型: i
for (i を 1 から aの要素数 まで 1 ずつ増やす)
  if (a[i] が 未定義)
    a[i] ← 0
  endif
endfor

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

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

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

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


ループ開始前

配列

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

いま計算していること

まだ計算していません

変数の状態

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

つまずきポイントまとめ

まちがえ方 正しい理解
未定義を「0が入っている」と思う 何も入っていない状態。0 は立派な値
未定義の値 の代入をエラーだと思う 正典に定められた書き方。入れた値を消せる
未定義の箱を要素数から外す 要素数は用意した箱の数。中身の有無は関係ない
未定義を = で比べようとする ◯◯ が 未定義 という日本語の書き方を使う
未定義と計算・比較した結果を考えてしまう 記述形式に定めが無く、問われない。未定義かどうかは が 未定義 で調べる

次に読む

この記事で引用した資料

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

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

タイトルとURLをコピーしました