科目Bのプログラムは、たいてい ○ で始まる行から始まります。ここが「ひとまとまりの処理」の入口です。そして処理の途中で別のまとまりを呼び出し、終わったら呼んだ場所へ戻ってきます。この行ったり来たりを追えるようになると、読める問題が一気に増えます。
○ で始まる行は「宣言」
出典:擬似言語の記述形式(基本情報技術者試験用)
- ○手続名又は関数名
- 手続又は関数を宣言する。
- 手続名又は関数名(引数, …)
- 手続又は関数を呼び出し,引数を受け渡す。
○ が付いた行は「ここから proc1 という処理が始まりますよ」という見出しです。実行されるわけではありません。実行されるのは、呼び出されたときだけです。
プログラムに ○proc1() ○proc2() ○proc3() と3つ並んでいても、上から順に実行されるわけではありません。問題文が「手続proc2 を呼び出すと」と指定していれば、proc2 の中身から始まります。
プログラムを読むときは、まず問題文が「どれを呼び出す」と言っているかを確認してください。
手続と関数の違いは「名前の前に型が付くか」
記述形式では、手続も関数も同じ ○ で宣言します。見分け方は1つだけです。
| 実際に出てくる宣言 | 種類 | 読み方 |
|---|---|---|
○proc1() |
手続 | 受け取るものも返すものも無い |
○putRelatedItem(文字列型: item) |
手続 | 文字列を1つ受け取る。返さない |
○整数型: maximum(整数型: x, 整数型: y, 整数型: z) |
関数 | 整数を3つ受け取り、整数を返す |
○論理型: add(整数型: value) |
関数 | 整数を1つ受け取り、true か false を返す |
宣言の実例はいずれも令和5〜8年度 科目B 公開問題より
○ と名前の間に型が書いてあれば関数、無ければ手続です。これは変数の宣言(整数型: x)と同じ「コロンの前が型」の形がそのまま使われているだけです。
手続は処理をひとまとめにしたもの、関数はそれに加えて値を1つ返すもの。返す値の型が、名前の前に書かれます。
次の宣言は何を表していますか。
○整数型: maximum(整数型: x, 整数型: y, 整数型: z)
引数 ── 呼び出すときに渡すもの
括弧の中は「受け取るものの宣言」です。変数の宣言と同じ書き方で並びます。
○sort(整数型: first, 整数型: last)
この sort を、問題文はこう呼び出します。
出典:令和5年度 基本情報技術者試験 科目B 公開問題 問3
手続sort をsort(1, 5) として呼び出すと
このとき first に 1、last に 5 が入ります。
| 宣言のほう | 呼び出しのほう | 入る値 |
|---|---|---|
整数型: first(1つ目) |
sort(1, 5) |
1 |
整数型: last(2つ目) |
sort(1, 5) |
5 |
名前ではなく、書かれた順番で対応します。呼び出す側は値だけを並べ、受け取る側がそれに名前を付ける、と考えると読み違えません。
受け取るものが無いときは ○proc1() のように括弧の中が空になり、呼び出しも proc1() と書きます。括弧は省略されません。
○sort(整数型: first, 整数型: last) と宣言された手続を、sort(1, 5) として呼び出しました。手続の中で last の値はいくつですか。
return ── 表には無いが、出てくる
ひとつ知っておくと安心なことがあります。記述形式の表に return の行はありません。それでもプログラムには出てきます。
○8ビット型: complement(8ビット型: x) 8ビット型: y y ← …… y ← y + 00000001 return y
出典:令和8年度 基本情報技術者試験 科目B 公開問題 問2
読む手がかりは2つあります。
| 手がかり | この例では |
|---|---|
| 宣言の先頭に書かれた型 | ○8ビット型: complement(…) → 8ビット型の値を返す |
| 問題文の説明 | 「x に加算すると00000000 になる値を返す」 |
つまり return y は「y の値を、呼び出した相手に返す」と読めます。返された値は、呼び出した側でそのまま使えます。
返す値が無いのが手続です。○proc1() の中身には return が出てきません。処理を最後の行までやったら、呼んだ場所へ戻ります。
○論理型: add(整数型: value) の中に return true という行がありました。この行では何が起きますか。
実際の出題ではこう出る
手続の呼び出しだけでできている問題があります。変数も計算も出てきません。行ったり来たりを追えるかだけを問う問題です。
出典:令和5年度 基本情報技術者試験 科目B 公開問題 問2
次の記述中の に入れる正しい答えを,解答群の中から選べ。
次のプログラムにおいて,手続proc2 を呼び出すと, の順に出力される。
〔プログラム〕
○proc1() "A" を出力する proc3() ○proc2() proc3() "B" を出力する proc1() ○proc3() "C" を出力する
解答群
ア “A”,“B”,“B”,“C”イ “A”,“C”ウ “A”,“C”,“B”,“C”エ “B”,“A”,“B”,“C”オ “B”,“C”,“B”,“A”カ “C”,“B”キ “C”,“B”,“A”ク “C”,“B”,“A”,“C”
答えだけ先に見る
正解は ク(“C”,“B”,“A”,“C”)。proc3 が2回呼ばれるのが分かれ目です。このあと呼出しの流れを追います。
読む前に決めておくこと
始まりは ○proc2() の中身です。1行目から順に、上から下へ実行します。
途中で proc3() のような行に出会ったら、そこで止めて、呼ばれた側へ移ります。呼ばれた側を最後の行までやり終えてから、止めた行の次に戻ってきます。
紙の上では、いま自分がどの手続にいるかを指で押さえながら読むのが確実です。
追う前に、ひとつ予想してみましょう
proc2 を呼び出したとき、いちばん最初に出力されるのはどれですか。
1行ずつ動かして確かめます。「呼出しの流れ」の欄が、いまどの手続の中にいるかを表しています。
トレースシミュレータ 呼び出して、戻ってくる
出典:令和5年度 科目B 公開問題 問2
ループ開始前
いま計算していること
変数の状態
出力(ここまで)
トレース表(進めると1行ずつ積み上がります)
出力は “C”,“B”,“A”,“C”。正解は ク です。
キ “C”,“B”,“A” は、proc1 の最後にある proc3() を忘れた人の答えです。proc3 は2回呼ばれます ── 同じ手続を何度呼び出してもかまいません。
つまずきポイントまとめ
| まちがえ方 | 正しい理解 |
|---|---|
| 宣言を上から順に実行してしまう | ○ の行は見出し。実行されるのは呼び出されたときだけ |
| 呼び出した行で止まらず読み進める | 呼ばれた側を最後までやってから、止めた行の次に戻る |
| 戻ってくるのを忘れる | 呼ばれた側が終わったら必ず呼んだ場所に戻る。残りの行がある |
| 引数を名前で対応させる | 書かれた順番で対応する |
| 手続と関数の区別がつかない | ○ と名前の間に型があれば関数、無ければ手続 |
次に読む
本記事で引用した出典:擬似言語の記述形式(基本情報技術者試験用)/令和5年度・令和6年度・令和8年度 基本情報技術者試験 科目B 公開問題(独立行政法人情報処理推進機構)。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では問題文を改変せずに引用しています。

