メインコンテンツへスキップ
基本情報技術者基本情報科目B擬似言語アルゴリズム

基本情報 科目B 擬似言語トレースの練習|合計・最大値・線形探索を1行ずつ追う

科目Bの擬似言語が「記法は読めるのに答えが出せない」人へ。合計・最大値・線形探索の3つの基本アルゴリズムを、変数の値の変化を表に書きながら1行ずつ追うトレース練習を具体例で解説します。

公開:

基本情報 科目B 擬似言語トレースの練習

基本情報技術者試験の科目Bでよくあるのが、「記法(← や endif の意味)は分かるのに、いざ問題を解くと答えが出せない」というつまずきです。原因はほとんどの場合、コードを頭の中だけで追おうとして変数の値を見失う ことにあります。これを防ぐ唯一の確実な方法が トレース(変数の値の変化を表に書き出して1行ずつ追うこと) です。本記事は、合計・最大値・線形探索という科目Bの最頻出アルゴリズムを題材に、トレースを実際にやってみる練習帳です。

本記事は 過去問AI が学習用に作成したオリジナルの例題です。掲載している擬似言語は IPA の過去問・公式サンプルの転載ではなく、説明用に書き起こしたものです。擬似言語の正式な記述形式は必ず IPA 公式ページ で確認してください。記法そのものの読み方は 基本情報 科目Bの擬似言語 記法早見表 にまとめています。

トレースとは「変数の値の変化を表で書く」こと

トレースは難しい技術ではありません。プログラムに出てくる変数を表の列にして、処理が1行進むたびにその時点の値を書く だけです。頭の中で覚えようとするから崩れるのであって、紙に書けば誰でも追えます。本記事では次の前提で例題を進めます(科目Bの標準的な約束ごとです)。

  • 代入は ←(右の値を左の変数に入れる)。条件式の中の = は「等しいか?」の比較
  • 配列の 要素番号は 1 から始まる。A[1] が先頭、A[要素数] が末尾
  • 繰返しは for(回数指定)と while(前判定)を使う。endfor / endwhile / endif が範囲の終わり

記法そのものが不安なら、先に 記法早見表 で ← や endif を確認してから戻ってくると、ここから先がスムーズです。

例1:配列の合計を求める

配列 A = {3, 1, 4, 1, 5}(要素数 5)の合計を求めるコードです。

整数型: 合計 ← 0
整数型: i
for (i を 1 から 5 まで 1 ずつ増やす)
    合計 ← 合計 + A[i]
endfor

「合計」を 0 から始め、A[1] から A[5] まで順に足していきます。トレース表は、ループが 1 周するごとに i と そのときの A[i]、足したあとの 合計 を書きます。

ループ回iA[i]合計(処理後)
開始前−−0
1周目130 + 3 = 3
2周目213 + 1 = 4
3周目344 + 4 = 8
4周目418 + 1 = 9
5周目559 + 5 = 14

i が 5 を超えた時点でループが終わり、答えは 合計 = 14 です。ポイントは「合計 ← 合計 + A[i]」を 今の合計に足して入れ直す と読むこと。← を = と読むと「合計と A[i] が等しい」という意味不明な式に見えてしまいます。

例2:最大値を求める

同じ配列 A = {3, 1, 4, 1, 5} から最大値を探します。

整数型: 最大 ← A[1]
整数型: i
for (i を 2 から 5 まで 1 ずつ増やす)
    if (A[i] > 最大)
        最大 ← A[i]
    endif
endfor

最初に「最大」を A[1] で仮置きし、2 番目以降を順に比べて、大きければ入れ替えます。i が 2 から始まる こと(1 番目は仮置き済みなので比べ直さない)に注目してください。

ループ回iA[i]A[i] > 最大?最大(処理後)
開始前−A[1]=3−3
1周目211 > 3 → 偽3
2周目344 > 3 → 真4
3周目411 > 4 → 偽4
4周目555 > 4 → 真5

答えは 最大 = 5。if の条件が偽のときは「最大」を更新せず、そのまま次へ進む——この「何もしない」場合も表の行を必ず書くのが、追い損ねないコツです。

例3:線形探索(指定した値が何番目にあるか)

配列を先頭から順に調べ、探したい値 key と一致する位置を返します。ここでは key = 4 を探します。見つかったら早めにループを抜けるよう、継続条件に工夫を入れています。

整数型: i ← 1
整数型: 位置 ← -1
while ((i ≦ 5) and (位置 = -1))
    if (A[i] = key)
        位置 ← i
    endif
    i ← i + 1
endwhile

「位置」を最初は -1(まだ見つかっていない印)にしておき、一致したらそこに番号を入れます。継続条件 (i ≦ 5) and (位置 = -1) は「末尾まで来ておらず、かつ まだ見つかっていない間だけ続ける」という意味です。

ループ回iA[i]A[i] = 4?位置(処理後)i(処理後)
開始前1−−-11
1周目13偽-12
2周目21偽-13
3周目34真34
判定4−−位置=3 なので継続条件が偽 → 終了−

答えは 位置 = 3(4 は配列の 3 番目)。もし key が配列に無ければ、位置 は最後まで -1 のまま終わり、「見つからなかった」と分かります。配列が 1 始まりなので、返ってくる番号も 1 始まりである点に注意してください。なお、配列が ソート済み(並べ替え済み) のときは、先頭から順に見る線形探索より圧倒的に速い二分探索が使えます。lo・hi・mid の 3 変数を表で追う実演は 二分探索のトレース練習 にまとめました。

トレースで詰まらないための3つのコツ

  1. 1 行進むごとに、変わった変数の列を必ず書く。「変わらなかった」場合も同じ値を書き写すと、見落としが激減します。
  2. 配列の境界(1 から 要素数 まで)を最初に確定 させる。0 始まりと混同して A[0] を読もうとするミスが科目Bで最も多い失点源です。
  3. 条件式の真偽を声に出して読む。「A[i] > 最大、4 は 3 より大きい、真」と言葉にすると、if のどちらに進むか迷いません。

次のステップ

トレースの型ができたら、次は 速度 です。配列の図示・境界値の確定・トレース表という訓練法を体系化した 基本情報科目B|擬似言語アルゴリズム読解の3ステップ訓練法 で読む速度を上げましょう。つまずきが記法なのかトレースなのか切り分けたいときは 科目Bがわからない人へ、科目B 全体の進め方は 基本情報技術者 科目B完全対策 が地図になります。

手を動かす練習台としては、過去問AI の 基本情報 アルゴリズムとプログラミング分野の過去問 が使えます(こちらは科目A 相当の選択式で、科目B そのものの形式ではない点だけ意識してください)。各問題ページの AI コパイロットに「このコードを 1 行ずつトレースして、変数の値の変化を表にして」と頼めば、本記事と同じ追い方を対話でその場で再現できます。

よくある質問

Q. 擬似言語のトレースは紙に書かないとダメですか? 慣れるまでは紙に書くことを強くおすすめします。頭の中だけで追うと、ループが数回回った時点で変数の値を見失い、答えがずれます。本記事のように「変数を列にした表」を作り、1 行進むごとに値を書くだけで正答率が大きく変わります。慣れれば簡単な処理は暗算でも追えるようになります。

Q. 配列の番号はなぜ 1 から数えるのですか? IPA 公開のサンプル問題で、配列の要素番号が 1 から始まる前提で書かれているためです。Python など 0 始まりの言語に慣れていると A[0] を先頭と勘違いしがちで、これが科目Bで最も多い失点源です。「先頭は 1 番、末尾は 要素数 番」と覚え直してください(問題文に別の指定があればそれに従います)。

Q. ループが何回回るか分からなくなります。 for は「初期値から終了値まで何ずつ増やすか」が書いてあるので、回る回数は最初に確定できます。例1の「1 から 5 まで 1 ずつ」なら 5 回です。while は条件が偽になるまで続くので、トレース表に「i(処理後)」「継続条件の真偽」の列を足し、毎回その真偽を書けば、いつ抜けるかが目で分かります。

Q. 線形探索で「見つからなかった」場合はどう表現しますか? 本記事の例では、見つからないと変数「位置」が最初の -1 のまま最後まで変わらず終わります。このように「ありえない値(-1 など)を初期値にしておき、最後まで変わらなければ未発見」と判断するのは擬似言語で頻出のパターンです。トレース表の最終行で位置が -1 のままかどうかを確認しましょう。

まとめ

  • トレースは「変数を列にした表に、1 行進むごとに値を書く」だけ。頭で覚えず紙に書く
  • 合計は「合計 ← 合計 + A[i]」で足し込む。← は = ではなく代入
  • 最大値は A[1] を仮置きし、2 番目以降と比べて大きければ入れ替える
  • 線形探索は -1 を初期値にし、一致したら番号を入れる。配列は 1 始まり
  • 条件が偽で「何もしない」行も必ず書くと見落としが消える

記法 → トレース → 速度、の順で積み上げれば科目Bは必ず読めるようになります。

基本情報技術者 の過去問で実戦演習する

記事の内容を実戦で確認しましょう。AI コパイロット付きで分からない点はその場で解決できます。

この記事に関連する過去問

関連記事

※ 本記事は 過去問AI が独自にまとめた学習ガイドです。試験要項の最新情報は必ず IPA 公式ページで確認してください。