基本情報技術者試験の科目Bは、20問中16問がアルゴリズムとプログラミング。ここで挫折する人がいちばん多い関門です。
しかも出題は擬似言語という、この試験独自の書き方で行われます。PythonでもJavaでもない、IPAが定めた記法です。
「コードは読めるのに、擬似言語になると急に分からなくなる」。そう感じている人は、たいてい読み方の手順を知らないだけです。この記事では、その手順を実例で説明します。
この記事でわかること
- 擬似言語とは何か、なぜ2023年から全問これになったのか
- 最低限おぼえておく記法
- トレース表の作り方(この記事の本題)
- 繰り返しをどう追うか
- つまずきやすい3つのポイント
目次
擬似言語とは
擬似言語は、特定のプログラミング言語に依存せずにアルゴリズムを表すための記法です。2023年4月から、基本情報技術者試験の科目Bは全問がこの擬似言語で出題されるようになりました。
これは実は初学者にとって有利な変更です。
特定の言語を選ぶ形式だと「Pythonは書けるけどJavaは無理」という有利不利が出ますが、擬似言語なら全員が同じスタートラインに立てます。プログラミング経験がなくても不利にならないということです。
記法そのものはIPAが公開しています。まずは「読めればいい」ので、書けるようになる必要はありません。
最低限おぼえる記法
IPAが定めている主な記述形式です。この表の内容が頭に入っていれば、問題文は読めます。
| 記述形式 | 意味 |
|---|---|
| ○手続名又は関数名 | 手続又は関数を宣言する |
| 型名: 変数名 | 変数を宣言する(例:整数型: i) |
| 変数名 ← 式 | 変数に式の値を代入する |
| 手続名又は関数名(引数, …) | 手続又は関数を呼び出し、引数を受け渡す |
| /* 注釈 */ ・ // 注釈 | 注釈(コメント)を記述する |
| if (条件式) 〜 elseif 〜 else 〜 endif | 選択処理(条件分岐) |
| while (条件式) 〜 endwhile | 前判定繰返し処理 |
| do 〜 while (条件式) | 後判定繰返し処理 |
| for (制御記述) 〜 endfor | 繰返し処理 |
いちばん間違えやすいのは「←」と「=」です。
- ← は代入。「x ← 1」は「xに1を入れる」
- = は比較。「x = 1」は「xは1と等しいか?」
多くのプログラミング言語では代入が「=」なので、そこに引きずられると条件式を読み間違えます。
そのほか、覚えておくと楽なもの。
| 記号 | 意味 |
|---|---|
| mod | 剰余算(割った余り)。「7 mod 3」は 1 |
| and / or / not | 論理積・論理和・否定 |
| true / false | 論理型の定数 |
| 配列名[要素番号] | 配列の要素にアクセスする |
| { } | 配列の内容の始まりと終わり |
| 未定義 | 変数に値が格納されていない状態 |
二次元配列は、行番号, 列番号 の順に「,」で区切って指定します。
読めない原因は「頭の中で覚えようとしている」こと
擬似言語が読めない人のほとんどは、プログラムを目で追いながら、変数の値を頭の中で記憶しようとしています。
これは無理です。人間の短期記憶は、同時に扱える情報が4つ前後と言われています。変数が3つあってループが回れば、あっという間に破綻します。
解決策はひとつだけ。紙に書くことです。
これをトレース、書き出す表をトレース表と呼びます。上級者がやらないのは、経験で処理を圧縮できているからであって、最初から頭の中で追える人はいません。
CBT試験ではメモ用紙と筆記用具が配布されます。使わない手はありません。
トレース表の作り方
手順はたった3つです。
- 変数を横に並べた表を作る
- プログラムを1行ずつ実行して、1行ぶんずつ表を埋める
- 変わった値だけ書けばいい(変わらないものは前の行と同じ)
実例:2つの変数の値を入れ替える
次のプログラムを読んでみます。
| 行 | プログラム |
|---|---|
| 1 | 整数型: a ← 5 |
| 2 | 整数型: b ← 3 |
| 3 | 整数型: tmp |
| 4 | tmp ← a |
| 5 | a ← b |
| 6 | b ← tmp |
変数は a、b、tmp の3つ。この3つを横に並べた表を作って、1行ずつ埋めていきます。
| 実行した行 | a | b | tmp |
|---|---|---|---|
| 1〜3行目(宣言) | 5 | 3 | 未定義 |
| 4行目 tmp ← a | 5 | 3 | 5 |
| 5行目 a ← b | 3 | 3 | 5 |
| 6行目 b ← tmp | 3 | 5 | 5 |
結果は a = 3、b = 5。最初は a=5、b=3 だったので、きれいに入れ替わりました。
ここで大事なのは、5行目で a の値が上書きされる前に、4行目で tmp に退避させているという点です。tmp がないと、5行目で元の a の値が消えてしまい、6行目で戻せません。
表に書き出すと、この「なぜ tmp が要るのか」が目で見えます。頭の中だけでは気づけない部分です。
繰り返しのトレース
ループが出てくると一気に難しく感じますが、やることは同じです。表に「何周目か」と「条件の判定結果」の列を足すだけです。
実例:1から4までの合計を求める
| 行 | プログラム |
|---|---|
| 1 | 整数型: i ← 1 |
| 2 | 整数型: goukei ← 0 |
| 3 | while (i ≦ 4) |
| 4 | goukei ← goukei + i |
| 5 | i ← i + 1 |
| 6 | endwhile |
| 周回 | 判定 i ≦ 4 | goukei | i |
|---|---|---|---|
| 開始時 | — | 0 | 1 |
| 1周目 | 1≦4 → 真 | 0+1 = 1 | 2 |
| 2周目 | 2≦4 → 真 | 1+2 = 3 | 3 |
| 3周目 | 3≦4 → 真 | 3+3 = 6 | 4 |
| 4周目 | 4≦4 → 真 | 6+4 = 10 | 5 |
| 5周目 | 5≦4 → 偽 | — | ループを抜ける |
答えは goukei = 10(1+2+3+4)。
最後の「5周目で偽になって抜ける」行を必ず書いてください。
ここを書かずに4周目で止めると、「ループを抜けたときの i の値は?」という設問に答えられません。ループを抜けた瞬間の変数の値は、非常によく問われます。
つまずきやすい3つのポイント
1. 配列の要素番号が0始まりか1始まりか
これが最も多い失点です。擬似言語では要素番号を「[ ]」の中に指定しますが、0から始まるか1から始まるかは問題によって異なります。
問題文に「配列の要素番号は1から始まる」といった記述が必ずあるので、解き始める前にそこを確認して、メモ用紙の端に書いておくのが確実です。
2. 条件の境界(≦ と < の違い)
「i ≦ 4」と「i < 4」では、ループが回る回数が1回変わります。これも表に書けば一目で分かる種類のミスです。
逆に言えば、頭の中で追っているかぎり必ずどこかで間違えます。
3. 後判定(do 〜 while)は必ず1回は実行される
前判定の while は、条件が最初から偽なら1回も実行されません。一方、後判定の do 〜 while は処理を先に実行するので、条件がどうであれ最低1回は動きます。
この違いを突いてくる問題は定番です。while を見たら「前判定か後判定か」をまず確認してください。
練習のしかた
- 最初は必ず全部書く。面倒でも省略しない。慣れると自然に省略できるようになります
- 1問5分の配分を意識する。科目Bは20問100分なので、1問に5分しか使えません
- 解けなかった問題は、どこで表を間違えたかまで戻って確認する
IPAは科目Bのサンプル問題を公開しています。まずはそこで、実際に紙に表を書きながら解いてみてください。3問も解けば、手が勝手に表を書き始めます。
問題演習の量を増やしたい場合は、読み放題対象の本にも科目B・擬似言語に特化したものが複数あります。
まとめ
- 科目Bは20問中16問がアルゴリズム。擬似言語が最大の関門
- 擬似言語は特定の言語に依存しないので、プログラミング未経験でも不利にならない
- ←は代入、=は比較。ここを混同しない
- 読めない原因は頭の中で追っているから。トレース表を紙に書く
- ループは「抜けた瞬間の行」まで書く
- 配列の要素番号が0始まりか1始まりかを、解く前に確認する
擬似言語は「センスがないと読めないもの」ではありません。手順どおりに表を書けば、誰でも必ず答えにたどり着けます。まずは1問、紙に書いて解いてみてください。
試験全体の仕組み(受験料・合格基準・申込ルール・科目A免除制度など)は、こちらでまとめています。
※本記事の擬似言語の記述形式は、IPA 独立行政法人 情報処理推進機構が公開している基本情報技術者試験 科目Bの資料をもとに、2026年9月時点でまとめたものです。記述形式は改訂される場合がありますので、最新の内容はIPA公式サイトでご確認ください。
0 件のコメント:
コメントを投稿