科目Bの擬似言語は、特定のプログラミング言語を知っているかではなく、与えられた規則で値を追えるかを見ます。関数へ渡した値、配列の要素、繰返しの終了条件を分けて書けば、長いコードでも小さな状態変化の連続として読めます。
この分野で身に付けること
- 変数、引数、戻り値の値の流れを説明できる。
- 配列やキューの添字と有効範囲を追える。
- 再帰で、進む段階と戻る段階の両方を表せる。
1. 変数は、代入した時点で値が変わる
変数名は箱の名前のようなもので、代入文が実行されるとその箱の中身が変わります。右辺は先に現在の値で計算され、その結果が左辺へ入ると考えます。a = a + 1 のような文を数学の等式と同じに読まず、更新として扱うことが大切です。
関数を読むときは、呼出し側の変数、関数の引数、関数内のローカル変数、戻り値を別の列に書きます。同じ名前が出ても、どの範囲で使える値かを確認してください。問題の仕様が参照渡しか値渡しかを示していれば、その規則に従います。
2. 繰返しは、開始・継続・更新を確認する
forやwhileでは、初期値、継続条件、更新式の三つを並べて読みます。添字がどこまで進むか、最後の要素を含むか、条件が偽になるのはいつかを表にします。内側の繰返しが外側の変数に依存する場合は、外側の一回ごとに内側の範囲を書き直します。
条件の中で配列の範囲外を参照しないかも確認します。実務のコードでは入力が空の場合なども考えますが、試験問題では明示された前提を守ることが優先です。前提を超えた動作を想像しすぎず、指定された値だけでトレースします。
3. 再帰は、止まる条件と戻り値を一組で見る
再帰関数は自分自身を呼び出しますが、必ず終了条件と、終了条件へ近付く引数の変化があります。まず呼び出しがどこまで進むかを矢印で書き、終了条件に達した値を決めます。その後、戻り値が呼出し元へどう足されるか、掛けられるかを逆向きに追います。
スタックの細かい実装を知らなくても、呼出しごとに引数と戻り値を一行ずつ書けば読めます。元の変数が一つだけだと思い込まず、各呼出しに別の引数の値があることを意識します。
用語・考え方の比較
| 要素 | 見る場所 | 確認すること |
|---|---|---|
| 引数 | 関数を呼ぶ瞬間 | 何の値が渡るか |
| ローカル変数 | 関数の内部 | 呼出しごとにどの値か |
| 戻り値 | 関数が終わる瞬間 | 呼出し元でどこへ使われるか |
例:各桁の和を再帰で求める
digitSum(729) が、十進表記の各桁の和を返す関数だとします。
- 729は、9 + digitSum(72)に分けられる。
- 72は、2 + digitSum(7)、7は、7 + digitSum(0)に分けられる。
- digitSum(0)から戻ると、7、9、18の順に戻り値ができる。
ここで確認:進む段階だけで終わらず、戻り値を使う段階まで追うことが再帰の要点です。
確認してから、演習へ進む
間違えやすいポイント
- 代入の左辺と右辺を同時に新しい値として扱わない。
- 配列の有効な添字と、要素数を同じものとしない。
- 再帰で終了条件だけを見て、戻り値の計算を省略しない。
自分で確かめる三つの手順
- 変数ごとに列を作り、代入文一つごとに値を書く。
- 関数呼出しごとに、引数と戻り値を別行にする。
- キューではheadとtailが何を指すかを問題文の定義から書く。
この分野の演習問題
ガイドを読んだ後は、対応する9問で、理由を説明しながら理解を確かめましょう。 正答率は振り返りのための記録であり、本試験の評価点や合否を予測するものではありません。
- 問18:次の処理が終了したとき、整数型の変数xとyの値はどうなるか。 整数型: x ← 2 整数型: y ← 5 整数型: t t ← x x ← y y ← t
- 問37:整数変数xの値は10である。関数addThreeへxを値渡しすると、関数内の仮引数pにはxの値のコピーが入り、pを変更しても呼出し元のxは変わらない。次の関数を呼び出し、y ← addThree(x)を実行した後のxとyはどれか。 ○ 整数型: addThree(整数型: p) p ← p + 3 return p
- 問38:空のキューに対して、追加(10)、追加(20)、取出し、追加(30)、取出しの順で操作する。追加は末尾に入れ、取出しは先頭を取り除いて返す。このとき、2回目の取出しで返される値はどれか。
- 問51:次の処理が終了したとき、countの値はいくつか。forの開始値と終了値はどちらも含む。modは整数除算の余りを表す。 整数型: count ← 0 整数型: i, j for (i を 1 から 4 まで 1 ずつ増やす) for (j を 1 から i まで 1 ずつ増やす) if ((i + j) mod 2 = 0) count ← count + 1 endif endfor endfor
範囲と参照資料
このページは本サイト独自の学習用解説です。試験範囲や用語の最終確認には、IPA:試験要綱・シラバス ↗を確認してください。制度や出題範囲は変更されることがあります。