基本情報 科目B 擬似言語の読み方
基本情報技術者試験の科目Bで一番つまずきやすいのが、擬似言語のコードを読んで答える問題です。コツは、文法を暗記することよりも、代入・配列・ループを1行ずつトレースできる形にすること。この記事では、初見のコードをどう読めばよいかを、例題と表で順番に解説します。
手を動かして確認したい人へ:この記事の考え方は、擬似言語ステッパーでそのまま練習できます。コードを1行ずつ実行し、変数の値がどう変わるかを画面で見られます。
科目Bの擬似言語でまず見る場所
コード全体を上から読もうとすると、ループや配列で迷いやすくなります。最初に見るべき場所は3つです。
1. 変数と配列の宣言 — 何を記録する問題かが分かります。
2. ループの範囲 — 何回くり返すか、どの添字を使うかを確認します。
3. if文の条件 — 値が更新されるタイミングを見つけます。
この3つを先に拾うと、「何となく読む」状態から抜けられます。特に配列が出たら、添字が何番から始まり、何番まで使われるかを必ず書き出します。
代入は「右を計算して、左に上書き」
擬似言語では sum ← sum + i のような代入がよく出ます。これは「sum と sum+i が等しい」という意味ではありません。右辺の値を先に計算し、その結果で左辺の変数を上書きするという意味です。
| 処理 | 意味 | 例 |
|---|---|---|
x ← 3 | x に 3 を入れる | x は 3 になる |
x ← x + 1 | 今の x に 1 を足して、x を上書き | x が 3 なら 4 になる |
a[i] ← x | 配列 a の i 番目に x を入れる | i が 2 なら a[2] を更新 |
科目Bのミスの多くは、「更新前の値」と「更新後の値」が混ざることから起きます。代入を見たら、その行で表を更新する、と決めておくと安定します。
配列は「添字」と「値」を分けて見る
配列の問題では、a[i] の i は値そのものではなく、何番目を見るかを表す番号です。たとえば a ← {4, 1, 7, 3} なら、次のように表にします。
| 添字 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| a[添字] | 4 | 1 | 7 | 3 |
i ← 3 のとき、a[i] は a[3] なので値は 7 です。i は場所、a[i] は中身。ここを分けて考えるだけで、配列問題はかなり読みやすくなります。
例題1: 配列の合計をトレースする
次の擬似言語を見て、最後に sum がいくつになるか考えます。
整数型の配列: a ← {4, 1, 7, 3}
整数型: sum ← 0
整数型: i
for (i を 1 から 4 まで 1 ずつ増やす)
sum ← sum + a[i]
endfor
変数表を作ると、次のようになります。
| 周回 | i | a[i] | 更新前 sum | 更新後 sum |
|---|---|---|---|---|
| 開始前 | - | - | - | 0 |
| 1周目 | 1 | 4 | 0 | 4 |
| 2周目 | 2 | 1 | 4 | 5 |
| 3周目 | 3 | 7 | 5 | 12 |
| 4周目 | 4 | 3 | 12 | 15 |
答えは 15 です。ポイントは、sum ← sum + a[i] の右辺にある sum は「更新前のsum」だということです。
例題2: 最大値を探す
最大値を探す問題は、科目Bで頻出です。基本形は「仮の最大値を置き、より大きい値を見つけたら更新する」です。
整数型の配列: a ← {4, 1, 7, 3}
整数型: max ← a[1]
整数型: i
for (i を 2 から 4 まで 1 ずつ増やす)
if (a[i] > max)
max ← a[i]
endif
endfor
| 周回 | i | a[i] | 条件 a[i] > max | max |
|---|---|---|---|---|
| 開始前 | - | - | - | 4 |
| 1周目 | 2 | 1 | 1 > 4 は偽 | 4 |
| 2周目 | 3 | 7 | 7 > 4 は真 | 7 |
| 3周目 | 4 | 3 | 3 > 7 は偽 | 7 |
答えは 7。ここでは i が 2 から始まっている点にも注目です。max ← a[1] で1番目はすでに見ているので、ループは2番目からでよい、という考え方です。
for と while の読み分け
for は回数が見えやすいループ、while は条件が成り立つ間だけ続くループです。試験では、終了条件の読み間違いがそのまま誤答になります。
| 書き方 | 見るべきところ | 間違いやすい点 |
|---|---|---|
for (i を 1 から n まで) | 開始値・終了値・増え方 | 最後の値を含むかどうか |
while (i ≦ n) | 条件式と、i がどこで更新されるか | 更新忘れ・1回多い/少ない |
迷ったら、頭の中だけで考えずに i = 1, 2, 3... と実際に書きます。科目Bでは、1回ずれる選択肢がよく用意されています。
トレース表の作り方
紙に書くときは、きれいな表でなくても大丈夫です。次の形だけ守れば十分です。
列: 変数名、配列の注目値、条件判定
行: ループの周回、または代入が起きたタイミング
書く値: 更新前と更新後が混ざらないように、代入後の値を残す
時間がない本番では、すべての変数を書く必要はありません。答えに関係する変数だけを書けば十分です。たとえば合計問題なら i と sum、最大値問題なら i、a[i]、max を追います。
よくあるミス
Q. 配列の1番目と0番目で混乱します。
A. 基本情報の擬似言語では、配列の添字は1から始まる形で出てくることが多いです。問題文の添字の前提を必ず確認し、表の先頭に「1, 2, 3...」と書いてから解き始めると安全です。
Q. if文の中が実行されたか忘れます。
A. 条件判定の列を作り、真なら「○」、偽なら「×」と書くのがおすすめです。max更新のような問題では、この1列があるだけで見直しが速くなります。
Q. ループの最後で i がどうなるか分かりません。
A. for は終了値まで実行したあと、次の値に増やそうとして条件を外れます。答えに i の最終値が関係する場合は、ループ終了後の i も1行追加して確認しましょう。
次に練習するページ
擬似言語は、読むだけよりも実際にステップ実行した方が早く身につきます。
擬似言語ステッパー — 配列の合計・最大値・線形探索・バブルソートを1行ずつ実行できます。
基本情報 科目Bの解き方ガイド — 科目B全体の時間配分と勉強順を整理しています。
ソートアルゴリズム可視化 — 比較と交換の動きをアニメーションで確認できます。
探索アルゴリズム可視化 — 線形探索と二分探索の違いを見比べられます。
まとめ
科目Bの擬似言語は、難しい文法を大量に覚える試験ではありません。代入は右を計算して左に上書き、配列は添字と値を分ける、ループは周回ごとに表へ書く。この3つを徹底すれば、初見のコードでも落ち着いて読めます。