前回の aisatsu() は、呼ぶだけで何も渡していませんでした。ここからは値を渡して呼びます。渡された値は、呼ばれた側で名前の付いた箱になります。この箱を引数といいます。
第1部 擬似言語の教科書 地図+20回
G1擬似言語の地図(入口)G2-1変数と宣言G2-2データ型G2-3代入「←」G3-1部品を呼ぶ/戻るG3-2引数G3-3戻り値・手続と関数G4-1配列と要素番号G4-2配列の読み書きG5選択処理 ifG6-1繰返し forG6-2配列を for で回すG7繰返し whileG8-1算術演算子と優先順位G8-2and / or / notG9-12次元配列G9-22重ループG10大域変数と局所変数G11未定義G12-1演算子 . の読み方G12-2クラスとはG12-3コンストラクタ
この回で分かること
呼び出しの tasu(2, 3) と、宣言の ○tasu(整数型: a, 整数型: b) が、どう対応しているのか。
対応の決まりは1つだけです。ここを取り違えると、プログラムの中身が全部ずれます。
引数 ── 呼び出すときに、値を渡す
名前のうしろに括弧が付いた部品を見てください。
○hyouji(整数型: n) n を出力する
括弧の中の 整数型: n が、受け取るものの宣言です。変数の宣言とまったく同じ書き方が、そのまま括弧の中に置かれています。
呼ぶときは、値だけを書きます。
hyouji(4)
自動販売機は、お金を入れてボタンを押すと動きます。入れる金額を変えれば、買えるものも変わります。機械は1台でも、入れるものしだいで結果が変わるわけです。
部品の呼び出しも同じで、括弧の中に入れたものが、中の動きを変えます。この「入れるもの」が引数です。
この1行で hyouji が動きます。そのとき n には 4 が入っています。だから n を出力する は 4 を出力するになります。
渡す値を変えれば、同じ部品が何度でも使い回せる
引数のうれしさ
中身の書き方は1つでも、渡す値を変えれば違う結果になる。
hyouji(4) なら 4 が、hyouji(9) なら 9 が出力されます。部品を値の数だけ用意する必要はありません。
次のプログラムで main を呼び出しました。何が出力されますか。
○hyouji(整数型: n) n を出力する ○main() hyouji(7)
対応するのは、名前ではなく順番
受け取るものが2つになると、どちらがどちらかが問題になります。
○ten(整数型: a, 整数型: b) a を出力する b を出力する
これを ten(2, 3) として呼びました。中では、こうなっています。
| 宣言のほう | 呼び出しのほう | 中に入った値 |
|---|---|---|
整数型: a(1つ目) |
ten(2, 3) |
2 |
整数型: b(2つ目) |
ten(2, 3) |
3 |
引数の対応を確かめる手順
- 宣言の括弧の中を、左から番号を振って読む(1つ目、2つ目…)
- 呼び出しの括弧の中も、左から番号を振る
- 同じ番号どうしを結ぶ。名前は見ない
なぜ順番で決まるのか
呼び出す側は値を並べるだけで、名前を付けるのは受け取る側だからです。
ten(2, 3) のどこにも a や b は出てきません。名前は宣言のほうにしか書かれていないので、結びつける手がかりは並び順しかないのです。
次のように宣言された手続を、calc(3, 8) として呼び出しました。手続の中で x はいくつですか。
○calc(整数型: y, 整数型: x)
渡せるのは、値だけではない
括弧の中には変数も書けます。そのときに渡るのは、そのときの中身です。
○main() 整数型: kazu ← 5 hyouji(kazu)
hyouji に渡るのは kazu という名前ではなく、その中に入っている 5 です。呼ばれた側では、それが n という名前になります。
呼び出す側では kazu、呼ばれた側では n。同じ値に、場所によって違う名前が付いているだけです。
呼ばれた側を読むときは、括弧の中の名前だけを見れば足ります。呼び出し側で何という名前だったかを覚えておく必要はありません。
(令和5年度 基本情報技術者試験 科目B 公開問題 問3)
○sort(整数型: first, 整数型: last)
問題文には「手続sort を sort(1, 5) として呼び出すと」とあります。first に 1、last に 5 が入る ── ten(2, 3) とまったく同じ読み方です。
次のプログラムで main を呼び出しました。何が出力されますか。
○hyouji(整数型: n) n を出力する ○main() 整数型: kazu ← 5 hyouji(kazu) kazu ← 9 hyouji(kazu)
1行ずつ動かして確かめる
同じ hyouji を、違う値で2回呼びます。n の中身がどう入れ替わるかを見てください。
同じ部品を、違う値で2回呼ぶ
当サイトオリジナルの例題
ループ開始前
いま計算していること
変数の状態
出力(ここまで)
トレース表(進めると1行ずつ積み上がります)
上のシミュレータで、hyouji から戻ると n が消えているのに気づいたでしょうか。
引数は、その部品が動いている間だけ存在する箱です。呼んだ側からは見えませんし、次に呼んだときはまた新しく入り直します。どの範囲まで見えるのかは、G10 大域変数と局所変数で正面から扱います。
実際の出題ではこう出る
引数は、こういう形で問題文に現れます。すべて同じ読み方で足ります。
| 実際に出てくる宣言 | 呼び出しの書き方 | 中でどうなるか |
|---|---|---|
○proc1() |
proc1() |
渡すものは無い。それでも括弧は書く |
○putRelatedItem(文字列型: item) |
putRelatedItem("A") |
item に "A" が入って動く |
○sort(整数型: first, 整数型: last) |
sort(1, 5) |
first に 1、last に 5 が入る |
宣言の実例はいずれも令和5〜6年度 科目B 公開問題より
○proc1() のように括弧の中が空になり、呼び出しも proc1() と書きます。括弧が省略されることはありません。だから括弧が付いている行は、部品の宣言か呼び出しのどちらかだと見当が付きます。
つまずきポイントまとめ
| まちがえ方 | 正しい理解 |
|---|---|
| 引数を名前で対応させる | 書かれた順番で対応する。名前は受け取る側が付けたもの |
| 変数を渡すと名前ごと渡ると思う | 渡るのはそのときの中身。呼ばれた側では別の名前になる |
| 呼ばれた側で引数の宣言を探してしまう | 括弧の中の 整数型: n が宣言そのもの。中に改めて書かれない |
| 戻ったあとも引数が残っていると思う | その部品が動いている間だけの箱。戻ると消える |
次に読む
この記事で引用した資料
- 擬似言語の記述形式 科目Bの公開問題・サンプル問題の各冊子に掲載。冊子上の名称は年度により「基本情報技術者試験用」と「基本情報技術者試験,応用情報技術者試験用」があるが、本文は同一
- 令和5年度 基本情報技術者試験 科目B 公開問題(2023年7月6日公開)
- 令和6年度 基本情報技術者試験 科目B 公開問題(2024年7月5日公開)
いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では問題文を改変せずに引用しています。

