擬似言語の読み方とトレース表:代入・添字・ループを順に追う
コードを読んでいる途中で変数の値が分からなくなったら、何を書けばよいでしょうか?
変化する変数と条件判定を表に残します。代入、添字、ループの順に確認し、最大値探索のトレース表を作ってみましょう。
擬似言語の基本文法と見落とし厳禁の3大ルール
FE科目Bの擬似言語は、実在のプログラミング言語(CやJava)よりも文法が極めてシンプルに整理されています。まず以下の基本記号と構造を頭に入れましょう。
構文・演算子 | 記法例 | 処理の意味と着眼点 |
|---|---|---|
代入演算子 | x ← a + b | 左辺の変数に右辺の計算結果を格納する。数学の『等しい』ではなく『代入』である点に注意。 |
比較演算子 | a = b, a ≠ b, a ≦ b | 等しい(=)、等しくない(≠)、以上・以下。真(True)または偽(False)を返す。 |
論理演算 | and, or, not | 条件の結合。評価順や短絡評価が必要な場合は、問題の注記・規約を確認する。 |
前判定ループ | while (条件) do ... endwhile | 条件が真である間、処理を繰り返す。初回から偽なら1回も実行されない。 |
回数指定ループ | for (i を 1 から n まで 1 ずつ増やす) | 初期値から終了値まで指定間隔で変数を更新しながら繰り返す。終了後の変数iの値に注意。 |
条件分岐 | if (条件) then ... else ... endif | 条件成立時はthen節、不成立時はelse節を実行する。 |
【超重要:配列の添字ルール】:擬似言語問題では、問題文の冒頭に「配列の添字は 0 から始まる」または「添字は 1 から始まる」という規約が必ず明記されています。
これを読み飛ばすと、ループ回数や参照インデックスが1つズレて選択肢を全滅させる原因になります。問題を開いた瞬間に添字の開始番号をチェックしましょう。
変数の更新をトレース表へ残す
変数が多い処理を頭の中だけで追うと、更新前と更新後の値を混同しやすくなります。必要な変数を表に残し、直前の状態と比較して進めます。
トレース表は、変数の値と条件判定を見失わないための道具です。手書きでは、値が変わる行と戻り値を中心に記録します。
トレース表を素早く・ミスなく書くための鉄則は以下の3点です。
Step、ループカウンタ(iやj)、参照値(A[i])、比較条件、保持変数(maxやsum)を列としてメモ用紙に枠を作る。
上書きされた変数は斜線(/)で消し、そのすぐ右か下に新しい数値を書き足す。履歴を残すことで巻き戻し確認ができる。
規則と終了条件が確認できる場合に限り、同じ更新をまとめます。条件分岐、添字の境界、更新の順序が変わる箇所は省略しません。
典型例で学ぶトレース実戦:最大値探索アルゴリズム
配列の中から最大値を見つけ出す定番ロジックを例に、実際のトレース手順を見てみましょう。
○整数型: FindMax(整数型の配列: A, 整数型: n)
整数型: maxVal, i
maxVal ← A[0]
for (i を 1 から n - 1 まで 1 ずつ増やす)
if (A[i] > maxVal) then
maxVal ← A[i]
endif
endfor
return maxVal入力データとして要素数 3 の配列 A = [3, 7, 2](添字は 0 から始まる、n = 3)を与えた場合、トレース表は次のように作成します。
実行ステップ | ループ i | 参照要素 A[i] | 条件判定 (A[i] > maxVal) | 変数 maxVal の値 | 備考・処理内容 |
|---|---|---|---|---|---|
初期化 | 未実行 (-) | 未参照 (-) | - | 3 | A[0] の値 3 を初期値として代入 |
ループ 1回目 | 1 | 7 | 7 > 3 → 真 (True) | 3 → 7 に更新 | A[1]=7 が現在の maxVal より大きいため更新 |
ループ 2回目 | 2 | 2 | 2 > 7 → 偽 (False) | 7 のまま保持 | A[2]=2 は小さいため更新なし |
ループ終了 | 終了後の値に依存しない | 参照しない | 指定範囲の反復が完了 | 7 | maxVal=7を返す |
表に記録すると、更新した値と保持した値を区別できます。条件判定と終了条件を確認し、最終的な戻り値を説明します。
配列の添字操作と「境界値エラー」の落とし穴
科目Bの設問で正解の選択肢を見分ける最大のポイントが、「境界値(最初と最後)の動作」です。
初期値の確認:ループ変数の初期値が 0 なのか 1 なのか。配列の先頭要素を正しく参照しているか。
終了条件の不等号:『< n』なのか『≦ n』なのか。1回多く回りすぎて配列外参照エラー(IndexOutOfBounds)を起こさないか。
極端なケースでの検証:要素数が 1 個の場合、あるいは要素がすべて同じ値の場合でも正しく動作するかを頭の片隅でチェックする。
時間配分:見直し対象を決めて先に進む
FEはIRTに基づく評価点で採点されます。科目A・Bはそれぞれ1,000点満点中600点以上が合格基準です。単純な正答数から、何問正解すれば合格するかは断定できません。
100分で20問を解く試験において、最も危険なのは「難解なパズル問題に15分以上ハマってしまい、後半の簡単な問題を解き残すこと」です。
問題の種類 | 特徴と難易度 | タイムマネジメントと対応方針 |
|---|---|---|
情報セキュリティ(4問) | 文章読解と基本知識中心。計算が少なく素早く解ける。 | 文章を読み、根拠を確かめて解答する。時間は演習結果に応じて配分する。 |
アルゴリズム:理解しやすい問題 | 配列操作、基本探索、ソート、スタック・キューなど。 | 【標準解答】1問あたり5分を目安にトレース表を書いて堅実に正解を積み上げる。 |
アルゴリズム:時間がかかる問題 | 複雑な再帰呼び出し、高度な木構造操作、長大な分岐網。 | 読み始めても方針が決まらない場合は、見直し対象にして先へ進む。判断時間は一律に固定しない。 |
時間配分:100分で20問なので平均は5分ですが、各問を必ず5分で解く必要はありません。進められない問題を見直し対象にし、解ける問題を先に進めます。見直し用の時間も残します。
実戦演習:擬似言語の穴埋め問題を解いてみよう
以下のプログラムは、整数型の配列 data に含まれる正の整数のうち、「偶数だけを足し合わせた合計」を求める関数です。空欄に入る最も適切なものを考えてみましょう。
○整数型: SumEvens(整数型の配列: data, 整数型: n)
整数型: sum, i
sum ← 0
for (i を 0 から n - 1 まで 1 ずつ増やす)
if ( 【 a 】 ) then
sum ← sum + data[i]
endif
endfor
return sum【空欄 a の選択肢】
data[i] % 2 = 0
data[i] % 2 ≠ 0
i % 2 = 0
sum % 2 = 0
解説と解答
正解:ア(data[i] % 2 = 0)
問題文の目的は「配列内の偶数の合計」です。偶数とは「2で割った余り(剰余演算 %)が 0 になる数値」を指します。
配列の要素 data[i] を 2 で割った余りが 0 のときに合計へ加算するため、正しく偶数のみが足し合わされます。
余りが 0 でない(1 になる)奇数を抽出してしまうため誤りです。
配列の要素ではなく「添字(インデックス)i」の偶奇を判定してしまっているため誤りです(偶数番目の要素の合計になってしまう)。
現在の合計値 sum の偶奇を判定しても意味がないため誤りです。
採点方式とコードの条件を最初に確認する
科目Bの出題割合は、アルゴリズムとプログラミングが約8割、情報セキュリティが約2割です。これは「16問=800点」のような固定配点を意味しません。
FindMaxは要素数nが1以上である前提です。空配列ではA[0]を参照できないため、入力を制限するか別の処理を設けます。
SumEvensの剰余はIPAの記法ならmodで表せます。代入は右辺の現在値を計算してから左辺を更新します。空配列のループ回数、引数の受渡し、for終了後の変数の値は、問題の規定を確認します。
まとめ:今日から始める科目B突破の3ステップ
トレースの練習は、更新順序や境界値の見落としを減らします。まず短いコードで、入力から戻り値まで説明できることを目標にします。
基本文法を覚える:代入 ←、ループ、そして配列の添字(0始まり/1始まり)の規約を確実に確認する習慣をつける。
トレース表を紙に書く:頭の中だけで考えず、変数の移り変わりを手元で書き出す練習を毎日1〜2問ずつ継続する。
セキュリティ4問を得点源にする:アルゴリズムの失点をカバーできるよう、セキュリティ分野の基本用語と対策シナリオを完璧に仕上げる。
出典と仕様を確認する
IPA:FEシラバス Ver.9.2
IPA:試験で使用する用語・プログラム言語 Ver.5.1
IPA:試験要綱 Ver.5.6(採点方式・合格基準)
IPA:科目Bのサンプル問題
次におすすめの学習
編集・検証について
編集・検証:IT資格ラボ編集部
IPAが公開する試験要綱・シラバス・過去問題と、各技術の公式資料を優先して内容を確認しています。制度変更や誤りを確認した場合は、記事を見直して更新します。
編集方針・情報源・訂正方針を見る