基本情報 科目Bの擬似言語 記法早見表
基本情報技術者試験の科目Bでつまずく人の多くは、アルゴリズムそのものより 擬似言語の記法(書き方の約束ごと) で止まっています。「← って何?」「endif はどこまでが範囲?」「配列の番号は 0 と 1 のどちら始まり?」——この入り口でもたつくと、肝心のトレースに入れません。本記事は科目B の擬似言語で使う記法を 一つずつ読み方つきで整理した早見表 です。記法さえ頭に入れば、初見のコードでも落ち着いて追えるようになります。
本記事は 過去問AI が独自にまとめた学習ガイドです。擬似言語の正式な記述形式・最新の仕様は必ず IPA 公式ページ で確認してください。本記事の表記は学習用に分かりやすく言い換えたものです。
擬似言語は「特定の言語」ではない
擬似言語は C や Python のような特定のプログラミング言語ではなく、IPA が試験用に定めた 共通の書き方 です。だから特定言語の文法暗記は不要で、問われるのは「コードを 1 行ずつ追って動作を再現するトレース力」です。逆に言うと、記法という共通ルールさえ覚えれば、どの問題でも同じ読み方が通用 します。まずはその共通ルールを押さえましょう。
宣言:変数・配列・手続の準備
- 変数の宣言:型名のあとにコロンを置いて変数名を書きます。読み方は「この名前の入れ物を、この型で用意する」。例:整数型: i は「整数を入れる i という変数を用意」。
- 型の種類:整数型・実数型・文字列型・論理型などがあります。論理型は true(真)/false(偽)のどちらかを取ります。
- 配列の宣言:複数の値をまとめて入れる箱が配列です。「○○型の配列: 名前」のように宣言します。
- 手続・関数の宣言:処理のまとまりに名前を付けたものです。定義の行は先頭に ○ を付けて示し、引数(受け取る値)をかっこ内に書きます。値を返す関数は戻り値の型も書きます。関数の中で return を書くと、その値を呼び出し元に返します。
代入とコメント
- 代入(←):左向きの矢印 ← は「右の値を左の変数に入れる」記号です。例:sum ← 0 は「sum に 0 を入れる」、sum ← sum + x は「今の sum に x を足した結果を、改めて sum に入れる」。=(イコール)ではなく ← が代入 という点が最初の関門です。
- 比較の=:一方、条件式の中の = は「等しいか?」を問う比較です。代入の ← と混同しないこと。
- コメント(注釈):/* と */ で囲んだ部分、または // から行末までは 注釈 で、処理には影響しません。問題文がヒントとして注釈を付けることがあるので読み飛ばさないこと。
演算子の読み方
- 算術演算:+ − × ÷ で四則演算を表します。
- 比較演算:=(等しい)、≠(等しくない)、>・<(大小)、≧・≦(以上・以下)。条件式の中で使います。
- 論理演算:and(かつ)、or(または)、not(〜でない)。複数の条件を組み合わせるときに使います。例:(x ≧ 0) and (x ≦ 9) は「x が 0 以上 かつ 9 以下」。
選択処理:if / elseif / else
条件によって処理を分けるのが選択処理です。読み方は「上から順に条件を見て、最初に成立したブロックだけを実行する」。
if (条件式1) 条件式1 が成立したときの処理 elseif (条件式2) 条件式1 は不成立で 条件式2 が成立したときの処理 else どの条件も不成立だったときの処理 endif
- endif は「ここで if の範囲が終わり」を示す目印です。endif までが一続きの分岐だと意識すると、どこまでが条件内の処理か迷いません。
- elseif や else は無くても構いません。条件に当てはまる処理だけが実行され、当てはまらなければ何もしないで endif の先へ進みます。
繰返し:while / do / for
同じ処理を何度も実行するのが繰返しです。科目B では 3 つの形が出ます。
-
前判定(while):条件を 先に 確認し、成立している間だけ繰り返します。最初から条件が不成立なら 1 回も実行されません。
while (条件式) 繰り返す処理 endwhile
-
後判定(do 〜 while):処理を 先に 1 回 実行してから条件を確認します。条件に関係なく 必ず 1 回は実行される のが前判定との違いです。
do 繰り返す処理 while (条件式)
-
回数指定(for):制御変数を初期値から終了値まで一定の増分で動かしながら繰り返します。読み方は「変数を 初期値 から 終了値 まで 増分 ずつ増やす」。
for (i を 1 から n まで 1 ずつ増やす) 繰り返す処理 endfor
endwhile・endfor も endif と同じく「繰返しの範囲はここまで」を示す目印です。
配列:番号は 1 から始まる
- 要素の参照:配列名のうしろに角かっこで番号を書くと、その位置の値を指します。例:data[1] は data の 1 番目。
- 番号は 1 始まり:IPA 公開のサンプル問題では 配列の要素番号は 1 から始まる 前提で書かれています。Python など 0 始まりの言語に慣れていると間違えやすい最大のポイントです。「先頭は 1 番」と上書きして覚えてください(問題文に別の指定があればそれに従う)。
- 長さ(要素数):配列の要素の個数を使う場面が頻出です。最後の要素は「要素数番目」になります。ループの境界(1 から要素数まで)を最初に確定させるとミスが減ります。
- 二次元配列:行と列の 2 つの番号で位置を指す配列もあります。表のマス目をイメージすると追いやすくなります。
クラス・参照:連結リストや木構造で出てくる記法
配列の次の関門が、単方向リスト(連結リスト)や木構造などの データ構造 です。これらの問題では、各要素を クラス で表します。上の表の基本の記述形式には無い記法ですが、IPA 公開のサンプル問題・公開問題でも次のように使われています。問題ごとに、そのクラスがどんな メンバ変数 を持つかの説明が図や表で必ず添えられるので、まずそこを読むのが出発点です。
- メンバ変数とドット(.):1 つのクラスは複数の値(メンバ変数)をまとめて持ちます。メンバは 変数名.メンバ名 のように ドット(.) でたどります。例:要素 curr が「次の要素」を指すメンバ next を持つなら curr.next、格納された値のメンバ val なら curr.val と書きます。
- 参照(インスタンスへの参照):クラス型の変数には、実体そのものではなく インスタンスの参照(それがどこにあるかを指す情報)が入ります。だから prev ← prev.next は「prev を、いまの次の要素を指すように 付け替える」という意味になります。値のコピーではなく「指し先の移動」と読むのがコツです。
- 未定義(終端・空を表す):参照が何も指していない状態を 未定義 と書きます。空リストの先頭や、末尾要素の「次」が未定義です。while (prev.next が 未定義でない) のように「未定義かどうか」で末尾を判定します。初期化は 大域: ListElement: listHead ← 未定義の値 のように、参照を未定義から始めます。
- 大域変数(大域: 付きの宣言):先頭に 大域: を付けて宣言した変数は、複数の手続から共有されます。リストの先頭要素を保持する listHead などに使われます。
- コンストラクタ(新しい要素を作る):クラス名(引数) と書くと、その引数で初期化された 新しいインスタンスが作られ、その参照が返り ます。例:curr ← ListElement(qVal) は「文字 qVal を持つ新しい要素を作り、その参照を curr に入れる」という意味です。
連結リストや木構造は、配列の「番号で位置を指す」感覚とは別に、参照を 1 本ずつ付け替える イメージがつかめると一気に読めるようになります。図に要素を丸で、next を矢印で描き、矢印の付け替えを 1 行ずつ追うのがおすすめです。正式な記述形式・最新の仕様は必ず IPA 公式ページ で確認してください。
記法を覚えたら、すぐ手を動かす
記法は読むだけでは定着しません。実際のコードで「← を見たら代入」「endif までが分岐」「配列は 1 始まり」を 手を動かして確認 するのが最短です。過去問AI の 基本情報 アルゴリズムとプログラミング分野の過去問 は科目A 相当の選択式ですが、処理の流れを追う設問は記法に慣れる練習台になります(科目B そのものの形式ではない点だけ意識して使ってください)。詰まったら各問題ページの AI コパイロットに「このコードを 1 行ずつ日本語に訳して」と頼めば、記号の意味からトレースまで対話で確認できます。記法を覚えたあとに「では実際どう追うのか」を例題で確かめたいなら、合計・最大値・線形探索のトレース練習 で、変数の値の変化を表に書きながら 1 行ずつ追う流れをそのまま追体験できます。
記法の次にやること
記法が読めるようになったら、次は 読む速度 を上げる段階です。配列の図示・境界値の確定・トレース表という具体的な訓練法は 基本情報科目B|擬似言語アルゴリズム読解の3ステップ訓練法 で扱っています。記法でつまずいているのか、トレースでつまずいているのか、つまずきの種類を切り分けたいときは 科目Bがわからない人へ を先に読むと回り道を避けられます。科目B 全体の進め方は 基本情報技術者 科目B完全対策 で体系的にまとめています。
まとめ
- 擬似言語は特定言語ではなく試験用の共通記法。記法を覚えれば全問に通用 する
- 代入は = ではなく ←。条件式の中の = は比較
- 分岐は if / elseif / else / endif。endif までが一続きの範囲
- 繰返しは while(前判定)・do〜while(後判定=必ず 1 回実行)・for(回数指定)
- 配列の 要素番号は 1 から始まる(0 始まりの言語と混同しない)
- 連結リストや木構造は要素を クラス で表し、メンバは 変数名.メンバ名(ドット)でたどる。空・終端は 未定義
- 記法を覚えたら過去問で手を動かし、速度は 3 ステップ訓練で上げる
よくある質問
Q. 擬似言語の ← はどういう意味ですか? 代入を表す記号です。「右の値を左の変数に入れる」という意味で、sum ← 0 なら「sum に 0 を入れる」です。数学の等号(=)とは異なり、左右が等しいことを表すのではない点に注意してください。条件式の中に出てくる = のほうが「等しいか?」を問う比較です。
Q. 擬似言語の配列の番号は 0 と 1 のどちらから始まりますか? IPA 公開のサンプル問題では、配列の要素番号は 1 から始まる前提で書かれています。Python などの 0 始まりに慣れていると間違えやすいので、「先頭は 1 番」と覚え直してください。ただし問題文に別の指定がある場合はそれに従います。正式な仕様は IPA 公式ページで確認してください。
Q. endif や endwhile は何のためにありますか? それぞれ「if 文の範囲はここまで」「while 文の範囲はここまで」という終わりの目印です。どこまでが分岐や繰返しの中の処理なのかを示しており、ここを見失うとトレースが崩れます。インデント(字下げ)と end〜 の対応を意識すると、処理のまとまりを正確に追えます。
Q. 擬似言語を読むのに特定のプログラミング言語の学習は必要ですか? 必須ではありません。擬似言語は IPA が試験用に定めた共通の書き方で、特定言語の文法暗記は問われません。本記事の記法(代入・分岐・繰返し・配列)という共通ルールを押さえ、あとはコードを 1 行ずつ追うトレースを繰り返せば、未経験からでも読めるようになります。
Q. 擬似言語のドット(.)は何を表しますか? クラスのメンバ変数をたどる記号です。curr.next なら「要素 curr が持つメンバ変数 next」を指します。単方向リスト(連結リスト)や木構造の問題では、各要素をクラスで表し、その要素が持つ値や「次の要素への参照」をドットで取り出します。問題文に必ずそのクラスの説明(持っているメンバ変数の一覧)が添えられるので、まずそこを確認してください。
Q. 擬似言語の「未定義」とはどういう状態ですか? 変数(特に参照)が何も指していない・値が入っていない状態を指します。連結リストなら、空リストの先頭や、末尾要素の「次」が未定義です。while (prev.next が 未定義でない) のように「未定義かどうか」を条件にして末尾までたどる、といった使い方をします。クラス型の変数は実体ではなくインスタンスの参照を持つため、「まだどこも指していない」を未定義で表す、と理解すると読みやすくなります。