擬似言語の手続と関数の呼び出し|○ の読み方と「呼んで戻る」流れ【基本情報技術者試験 科目B】

基本情報技術者試験

現行FE シラバス Ver9.2 準拠擬似言語の記述形式は2022年から変更なし最終更新 2026-08-21

科目Bのプログラムは、たいてい ○ で始まる行から始まります。ここが「ひとまとまりの処理」の入口です。そして処理の途中で別のまとまりを呼び出し、終わったら呼んだ場所へ戻ってきます。この行ったり来たりを追えるようになると、読める問題が一気に増えます。

この試験の出題では

プログラムは2〜4個の部品でできています。呼び出しの深さも浅く、部品の中からさらに別の部品を呼ぶのは、せいぜい1段です。

そして問題文が「どのまとまりから始めるか」を必ず指定してくれます。どこから読み始めるかで迷う場面はありません。迷うのは「戻ったあと、どの行から続けるか」だけです。

部品 ── プログラムは、いくつかのまとまりに分かれている

ここまでの回で読んできたプログラムは、上から下へ一続きでした。ところが実際の出題は、処理がいくつかのまとまりに分かれています。

まとまりには名前が付いていて、名前を書くと、そのまとまりが動きます。動き終わったら、呼んだ場所へ戻ってきます。

syori()

この1行は「syori というまとまりを、いまここで動かす」という意味です。これを呼び出しといいます。

このまとまりには、手続と関数という2つの呼び名があります。違いは、呼んだ側に値が返ってくるかどうかだけです。見分け方はG3-3で扱います。この回では、どちらも同じ「部品」として読みます。

呼ぶと、どう動くのか

いちばん小さい形で、実際に追ってみます。渡すものも、返ってくるものもありません。まとまりが2つあるだけです。

○aisatsu()
  "こんにちは" を出力する

○main()
  "はじめ" を出力する
  aisatsu()
  "おわり" を出力する

main を呼び出したとします。上から順に追うと、こうなります。

実行した行 いまどこにいるか 出力
"はじめ" を出力する main はじめ
aisatsu() main → aisatsu へ移る —
"こんにちは" を出力する aisatsu こんにちは
(aisatsu が終わる) aisatsu → main へ戻る —
"おわり" を出力する main おわり

呼び出しで起きること

① そこで止まる呼び出しの行まで来たら、いったん中断する

② 呼ばれた側へ移るその中身を、最後の行まで実行する

③ 戻ってくる止めた行の続きから再開する

出力は はじめ → こんにちは → おわり。"おわり" がちゃんと出るのがポイントです。呼び出しは寄り道であって、そこで終わりではありません。

呼び出しの行でいったん止めて呼ばれた側へ移り、終わったら呼んだ行へ戻って続きを実行する

呼び出しは寄り道。戻るのは呼んだ行で、そこから続きを実行する

呼び出しの行に出会ったときの手順

  1. その行を書き留める(戻ってくる場所になる)
  2. 呼ばれた部品の1行目へ移る
  3. その部品を最後の行まで実行する
  4. 書き留めた行に戻り、その次の行から続ける

次のプログラムで main を呼び出しました。出力される順はどれですか。

○log()
  "*" を出力する

○main()
  log()
  "A" を出力する
  log()
  "B" を出力する

宣言 ── ○ は、部品の始まりを示す見出し

出典:IPA「擬似言語の記述形式」

○手続名又は関数名
手続又は関数を宣言する。
手続名又は関数名(引数, …)
手続又は関数を呼び出し,引数を受け渡す。

○ が付いた行は「ここから proc1 という処理が始まりますよ」という見出しです。実行されるわけではありません。実行されるのは、呼び出されたときだけです。

宣言の順番は、実行の順番ではない

プログラムに ○proc1() ○proc2() ○proc3() と3つ並んでいても、上から順に実行されるわけではありません。問題文が「手続proc2 を呼び出すと」と指定していれば、proc2 の中身から始まります。

プログラムを読むときは、まず問題文が「どれを呼び出す」と言っているかを確認してください。

渡すものが無いときも、括弧は書く

○proc1() のように括弧の中が空になり、呼び出しも proc1() と書きます。括弧が省略されることはありません。括弧の中に何かが書かれている形は、G3-2で扱います。

問題文に「手続proc2 を呼び出すと」と書かれていました。出力されるのはどれですか。

○proc1()
  "A" を出力する

○proc2()
  "B" を出力する

1行ずつ動かして確かめる

部品を3つにして、呼ばれた側からさらに別の部品を呼ぶ形にします。ここまでの3つ(止まる・移る・戻る)だけで追えます。

○ho()
  "ほ" を出力する

○ha()
  "は" を出力する
  ho()

○main()
  ho()
  "ま" を出力する
  ha()

追いかける前に ─ このプログラムは何をする?

main から始めます。やることは3つ並んでいるだけです。

① ho()寄り道して「ほ」を出し、戻ってくる

② "ま" を出力するそのまま「ま」を出す

③ ha()「は」を出したあと、その中からさらに ho() を呼ぶ

出力は ほ → ま → は → ほ。ho は2回呼ばれます。

同じ部品を何度呼んでもかまいません。そして呼ばれた側の中から、さらに別の部品を呼ぶこともできます(この試験ではせいぜい1段です)。

紙の上では、いま自分がどの部品にいるかを書き留めながら読むのが確実です。「呼出しの流れ」の欄が、それにあたります。

呼び出して、戻ってくる

当サイトオリジナルの例題


ループ開始前

いま計算していること

まだ計算していません

変数の状態

トレース表(進めると1行ずつ積み上がります)

2回目の「ほ」を落としやすい

ha の中に ho() があることを見落とすと、出力は ほ → ま → は で止まってしまいます。

呼び出しの行は、それ自体が「まだ続きがある」という合図です。部品の最後の行まで目を通してから戻ってください。

呼ばれた部品が最後の行まで終わりました。次に実行されるのはどこですか。

つまずきポイントまとめ

まちがえ方 正しい理解
宣言を上から順に実行してしまう ○ の行は見出し。実行されるのは呼び出されたときだけ
呼び出した行で止まらず読み進める 呼ばれた側を最後までやってから、止めた行の次に戻る
戻ってくるのを忘れる 呼ばれた側が終わったら必ず呼んだ場所に戻る。残りの行がある
同じ部品は1回しか呼べないと思う 何度でも呼べる。そのたびに1行目から実行される
いまどの部品にいるか分からなくなる 呼んだ行を書き留めてから移る

次に読む

この記事で引用した資料

  • 擬似言語の記述形式 科目Bの公開問題・サンプル問題の各冊子に掲載。冊子上の名称は年度により「基本情報技術者試験用」と「基本情報技術者試験,応用情報技術者試験用」があるが、本文は同一

いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では問題文を改変せずに引用しています。

本文の例題と練習問題は当サイトのオリジナルです。

Copied title and URL