「分岐や繰返しが入ると、追えなくなる…」
「そもそも何のためにこの書き方なの?」
基本情報の科目Bを開いて、最初に身構えるのがこの見慣れない表記です。でも、正体を知れば恐れる必要はありません。
擬似言語とは、特定の言語に依存せず手順だけを共通の記号で書いた表記法です。実在の言語ではなく、科目Bのために手順の骨格だけを取り出したものと考えてください。
この記事では、なぜ科目Bがこの表記を使うのかを押さえ、3つの制御構造と代入記号の向きを確認し、実際に変数の値を1行ずつ手で追う「トレース」をあなたと一緒にやってみます。最後に、試験での問われ方まで示します。基本情報 科目Bのアルゴリズム対策に直接効きます。
1. なぜ科目Bは擬似言語で出題するのか

基本情報の科目Bは、アルゴリズムとプログラミングが出題の中心を占め、その問題文は擬似言語で記述されるとIPAが公表しています。ここで疑問が湧きます。なぜ Python や Java のような本物の言語を使わないのか。
理由は受験者の得意言語に左右されず、手順を読む力そのものを測るためです。もし Python で出題すれば、Python 経験者が有利になります。特定の言語に依存しない共通の記号で書けば、初学者もベテランも同じ土俵で手順を追うことになります。
だから、あなたが目指すのは記号の丸暗記ではありません。上から1行ずつ、書かれた手順のとおりに処理を追えること。これが科目Bで問われる力の本体です。前提となる考え方は アルゴリズム基礎とは で整理しています。手順を設計図として捉える視点を先に持っておくと、擬似言語の読み取りが安定します。
2. 手順は3つの部品でできている(順次・選択・繰返し)

どんなに複雑な手順も、突き詰めると順次・選択(分岐)・繰返し(反復)の3部品の組み合わせでできています。まずこの3つを対応表で押さえてください。
| 制御構造 | 意味 | 擬似言語での見え方 |
|---|---|---|
| 順次 | 書かれた順に上から実行する | 1行ずつ縦に並ぶ |
| 選択(分岐) | 条件によって処理を分ける | if 条件 … else … |
| 繰返し(反復) | 条件が成り立つ間、同じ処理を回す | while 条件 / for 変数を範囲で |
あなたが問題文を読むとき、まずこの3部品のどれが使われているかに印をつけると、構造が一気に見えてきます。とくに選択の中に繰返しが入る「入れ子」が読みの山場です。どこで条件を見て、どこへ戻るのか。矢印で経路をなぞる感覚で追うと、頭の中の動きが安定します。
3. 代入記号「←」が示している向き

擬似言語で最初につまずきやすいのが、代入の記号です。数学のイコール「=」ではなく、「←」で右辺の値を左辺の変数へ入れると書きます。
たとえば「合計 ← 合計 + i」は、等式ではありません。「今の合計に i を足した結果を、あらためて合計に入れ直す」という操作の向きを表しています。数学のイコールだと「合計=合計+i」は矛盾に見えますが、代入だと考えれば「上書き」なので何の問題もありません。あなたが混乱するとしたら、たいていこの一点です。
もう一つ、擬似言語では条件の書き方も日本語に近く整えられています。「もし 得点 ≧ 60 ならば『合格』を表示する、そうでなければ『不合格』を表示する」のように、日本語のメモとほぼ同じ流れで読めます。記号に身構えるより、書かれている日本語の意味をそのまま追うほうが、あなたには速く正確です。
4. 1から10までの合計を、手でトレースしてみる

読む力は、目で追うだけでは伸びません。変数の値を紙の上で1つずつ更新していく「トレース」が、いちばん効きます。次の3行の手順を、あなたも実際に手で追ってみましょう。
①合計 ← 0 / ②i を 1 から 10 まで 1 ずつ増やしながら繰返す / ③合計 ← 合計 + i。この繰返しで、合計はどう変わっていくか。最初の数回を表にしました。
| i の値 | ③の計算 | 繰返し後の合計 |
|---|---|---|
| 1 | 0 + 1 | 1 |
| 2 | 1 + 2 | 3 |
| 3 | 3 + 3 | 6 |
| 4 | 6 + 4 | 10 |
| … | … | … |
| 10 | 45 + 10 | 55 |
合計は最終的に 55 になります。ここで大事なのは答えそのものより、「i が1つ進むたびに合計の箱が書き換わる」様子を、あなたが目で確かめたことです。この作業を数問こなすと、繰返しの動きが体に入ります。頭の中だけで追おうとせず、値を紙に書き出す。これが遠回りに見えて最短です。慣れると、表を書かなくても頭の中で同じトレースが走るようになります。
5. 配列・手続きと、試験で狙われる読み方

基本構文の次に出てくるのが配列と手続き(関数)です。配列は同じ型の値を並べて「配列名[添字]」で1つずつ取り出す仕組み、手続きは一連の処理に名前を付け、引数で値を受け取り戻り値で結果を返す仕組みです。配列はほぼ繰返しとセットで、要素を順に処理します。この先の連結リストやスタックは データ構造とは でまとめています。
現場でも、仕様を言語に依存しない形で共有したい場面では、擬似言語に近い書き方でロジックをメモします。SE歴15年以上の経験から言うと、手続きを読む要点は「何を渡し、何が返るか」を先に確認することです。呼び出し側と手続きの内部を分けて追えば、入れ子でもあなたは混乱しません。
次のステップ
擬似言語が科目A・科目Bのどこに位置づくかを俯瞰したいなら、基本情報技術者試験の試験範囲と勉強法ガイド で全体像を先に押さえると、学習の順序が決まります。
読む力がついたかを確かめるなら、基本情報技術者 科目B アルゴリズムの問題集 で、実際の擬似言語を手でトレースして慣れておくのが近道です。