変更要約: 初版
1.5擬似言語とプログラミング
基本情報技術者試験の科目Bで使われるIPA擬似言語の読み方を学びます。手続きの宣言、変数と代入(←)、条件分岐(if / elseif / else / endif)、繰り返し(for / while)、配列の添字の扱い、そしてトレース(コードを1行ずつ手で実行し値の変化を追う手法)の進め方を身につけます。
科目Bの20問中16問は擬似言語によるアルゴリズム問題です。特定のプログラミング言語を知らなくても解けるよう、IPAは独自の擬似言語の記法を定めています。この節ではコードを書く練習ではなく、与えられた擬似言語を正確に読み、トレースする力を養います。読み方さえ身につければ、前節までのアルゴリズム知識(探索・整列・計算量)を実際の出題形式で使えるようになります。
1.5.1手続き・変数・代入の基本記法
- 手続き=一連の処理をまとめた単位(他言語の関数・メソッドに相当)。
○型: 手続き名(引数の型: 引数名, ...)の形で宣言し、returnで戻り値を返す。呼び出し側は手続き名(実引数)の形で呼び出す。 - 変数は
型: 変数名で宣言する。代入は矢印記号←(本ノートでは英字表記<-)を使い、変数名 ← 式で右辺の値を左辺の変数に格納する。数学の等号「=」とは意味が異なる点に注意。 - 配列は
A[i]のように添字(インデックス)で要素を指定する。IPA擬似言語の添字は1から始まる(1-origin)のが原則で、多くのプログラミング言語(0-origin)と異なる点に注意が必要。
1.5.2条件分岐と繰り返し
- 条件分岐=
if (条件式) then 処理1 elseif (条件式2) then 処理2 else 処理3 endifの形。条件式を上から順に評価し、最初に真になった分岐だけを実行してendifまで抜ける。 - for ループ=
for (i を 1 から n まで 1 ずつ増やす) 処理 endforの形で、繰り返し回数があらかじめ決まっている場合に使う。while ループ=while (条件式) 処理 endwhileの形で、条件が真である間だけ処理を繰り返す(繰り返し回数が事前に決まっていない場合に使う)。 - トレースとは、擬似言語のコードを実際のコンピュータのように1行ずつ手で実行し、各変数の値がどう変化するかを表などに書き出しながら追跡する作業。変数の値を書き出す表を作ると、途中でのミスに気づきやすい。
「←は代入(右辺の値を左辺に格納)」「添字は1から始まる」「forは回数が決まっている繰り返し、whileは条件依存の繰り返し」が最頻出の基礎知識です。実際の出題は空欄補充(処理の一部が空欄で、正しい式・条件を選ばせる)とトレース(変数の最終的な値を問う)の2パターンが中心なので、手を動かして表に書き出す練習が最も効果的です。
次の擬似言語の手続きをトレースしてみましょう。○整数型: sum(整数型の配列: A, 整数型: n) は、配列 A と要素数 n を受け取り、整数型: total <- 0 で合計を保持する変数を0で初期化した後、for (i を 1 から n まで 1 ずつ増やす) で i を1からnまで1ずつ増やしながら total <- total + A[i] を繰り返し、最後に return total で合計を返す手続きです。ここで A = {1, 2, 3, 4, 5}、n = 5 として実際にトレースします。まず total = 0 から開始。i = 1 のとき total <- 0 + A[1](=1) = 1。i = 2 のとき total <- 1 + A[2](=2) = 3。i = 3 のとき total <- 3 + A[3](=3) = 6。i = 4 のとき total <- 6 + A[4](=4) = 10。i = 5 のとき total <- 10 + A[5](=5) = 15。i が n(=5)を超えたのでループを抜け、return total により 15 が返されます。この手順を表に書き出しながら1行ずつ確認する作業こそがトレースであり、慣れないうちは面倒に感じても、必ず手を動かして値を書き出すことでケアレスミスによる失点を大幅に減らせます。もしこの for を while (i <= n) を使った書き方に変えるなら、ループの内側で i を手動で i <- i + 1 と更新する処理を追加し忘れると無限ループに陥る点にも注意が必要です——for は繰り返し回数の管理を自動で行いますが、while は条件式に関わる変数の更新をすべて自分で書かなければなりません。
| i | A[i] | total(更新後) |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 2 | 3 |
| 3 | 3 | 6 |
| 4 | 4 | 10 |
| 5 | 5 | 15 |
ひっかけ: 「IPA擬似言語の配列添字は他の多くの言語同様0から始まる」は誤りです。IPA擬似言語は1-origin(1から始まる)が原則です。また「whileループもforループと同様に繰り返し回数の管理を自動で行う」も誤り=whileは条件式のみを見ており、条件に関わる変数の更新は自分で書かないと無限ループになります。
1.5.3この節のまとめ
- 代入=
<-(右辺→左辺)。配列添字は1-origin。if/elseif/else/endifは上から評価し最初の真の分岐だけ実行 - for=回数が決まった繰り返し、while=条件依存の繰り返し(更新忘れで無限ループに注意)
- トレース=1行ずつ手で実行し値を表に書き出す作業。空欄補充・最終値を問う出題の両方で必須のスキル
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. IPA擬似言語における配列の添字の扱いとして正しいものはどれか。
Q2. `for (i を 1 から n まで 1 ずつ増やす)` と `while (条件式)` を比較した記述として正しいものはどれか。
Q3. 手続き `sum(A, n)` が `total <- 0` から開始し、`i` を1からnまで1ずつ増やしながら `total <- total + A[i]` を繰り返して `return total` する。`A = {1, 2, 3, 4, 5}`、`n = 5` のときの戻り値はどれか。

