基本情報技術者試験 (FE) 科目 B — 擬似言語
関数と手続き — ○ から始まる定義の読み方
擬似言語の関数定義は ○ から始まる。戻り値を持つ関数は「○戻り値型: 名前(引数の型: 引数名, ...)」、戻り値のない手続きは「○名前(引数の型: 引数名, ...)」と書く。return で呼び出し元に値を返す。
関数 は ○ から始めて宣言する
処理をひとまとまりにして名前を付けたものが関数です。 基本情報の擬似言語では、関数定義の先頭に○ という記号を置きます。
○整数型: 最大値(整数型: a, 整数型: b)
if (a > b)
return a
endif
return b○整数型: の部分が「戻り値の型」、最大値 が関数名、(整数型: a, 整数型: b) が引数リストです。引数もそれぞれに型を書きます。return で呼び出し元に値を返し、そこで関数は終わります。
ブラウザで動かしてみる
最大値を返す関数を 2 回呼び出す例です。一行ずつ実行 を押していくと、関数呼び出しに入った瞬間に 引数 a, b が右側の変数テーブルに現れ、return で呼び出し元に戻ると消えていくのが目で追えます。
変数
出力
出力は 7 と 10 です。 引数の値を変えて再実行すると、同じ関数が違う入力で動く様子を確認できます。
戻り値のない「手続き」は ○名前(...) で書く
値を返さず、何かを実行するだけの処理は「手続き」と呼びます。 手続きの定義では、戻り値の型を書きません。
変数
出力
挨拶 は戻り値を持たないので、整数型: 結果 ← 挨拶("太郎") のように受け取ることは想定されていません。 「実行するだけ」の処理は手続き、「値を計算して返す」処理は関数、 と切り分けて考えると読み書きが楽になります。
関数の呼び出しは式の中でも使える
戻り値を持つ関数は、式の途中に埋め込んで使えます。
整数型: x ← 最大値(3, 7) // 変数に代入
整数型: y ← 最大値(3, 7) + 最大値(2, 5) // 式の中で複数回呼ぶ
if (最大値(a, b) > 10) // 条件式の中で呼ぶ
print("大きい")
endif関数呼び出しは 1 つの値のように振る舞うため、 変数を書ける場所ならほぼどこでも使えます。
再帰: 自分自身を呼び出す
関数の中で自分自身を呼び出すことを再帰と呼びます。 階乗 n! = n × (n-1)! のように「自分より 1 つ小さい問題」で表せる処理と相性が良い書き方です。
変数
出力
出力は 120 (= 5! = 5×4×3×2×1) です。一行ずつ実行 を押していくと、階乗(5) の中で 階乗(4) が呼ばれ、 さらにその中で 階乗(3) が呼ばれ… と、 変数テーブルにいくつもの n が (階乗) というラベル付きで積み上がっていく様子が観察できます。 必ず「これ以上再帰しない終了条件」(ここではn ≦ 1) を書くのが再帰のコツです。
試験でつまずきやすいポイント
- ○ を書き忘れる: 関数定義の先頭の ○ を忘れると、 その行はただの変数宣言や式として扱われて意味が変わる
- return 忘れ: 関数で return を書き忘れると呼び出し元が未定義の値を受け取る
- 引数の型と実引数の型がずれる: 整数型を要求する関数に 文字列を渡すと実行時エラー
- 再帰の終了条件: 終了条件を書き忘れると無限再帰になる。 「引数がどう変わっていくか」を追って、 必ず基底ケースに到達することを確認する
6 本のレッスンをすべて読み終えたら
変数・条件分岐・while・for・配列・関数と、 基本情報の擬似言語で使う主要な構文を一通り学びました。 次のステップはこの 4 つがおすすめです。
- 練習問題 を解いて、コードを目で追って出力を言い当てられるか確かめる (ここまで読めていれば解けるはずの基礎 10 問と、本番相当の 10 問がある)
- 実行シミュレーター に戻り、自分でコードを書いて動かしてみる
- 多言語横並び比較ツール で、擬似言語と Python / TypeScript を並べて読み比べる
- 過去問集を 1 冊解いて、実際の科目 B の設問形式に慣れる
よくある疑問
理解できたか試す / 自由に動かす
この構文をもっと練習する(おすすめ書籍)
擬似言語の記法の読み方から、トレースして答えを出すまでを一冊で通せる科目B特化本。手を動かして追う練習量を確保したいときの定番。
プログラミング未経験を前提に、記号の意味とアルゴリズムの考え方を最小単位から積み上げる入門書。変数や条件分岐で手が止まる段階に向く。
科目Bの出題パターンを網羅的に演習できる対策書。構文を理解した後、解法の型を身につける段階で効く。
本セクションはAmazonアソシエイトのリンクを含みます。
プログラムの読み方でつまずいたら。
たいてっくが、アルゴリズムの追い方から SQL・データベース設計まで、1対1で学習をサポートします。「コードを目で追っても何をしているか分からない」段階からで大丈夫です。まずは無料相談から。
「教え方も上手で、お人柄も良いメンターです。DB周りの知識はもちろん、何より、しっかり教えてあげようという姿勢がとてもありがたかったです。データベース、SQLの学習を考えている方にはおススメです。」
— H 様(DB・SQL コース受講)「体系的に知識を教えてくださり、実際の業務でも大変役立っております。特に短い時間で効率よく知識の習得や、練習をできているのは期待以上でした。」
— M 様(DB・SQL コース受講)「大変充実したコンテンツでわかりやすいご説明をありがとうございました。基本的な質問にも丁寧にご説明いただき、また業務のご相談にも乗って頂き大変有意義な時間でした。」
— K 様(DB・SQL コース受講)