令和4年度 ITパスポート試験 公開問題 問96
テクノロジアルゴリズム擬似言語・プログラム読解
関数calcXと関数calcYは,引数inDataを用いて計算を行い,その結果を戻り値とする。関数calcXをcalcX(1)として呼び出すと,関数calcXの変数numの値が,1 → 3 → 7 → 13と変化し,戻り値は13となった。関数calcYをcalcY(1)として呼び出すと,関数calcYの変数numの値が,1 → 5 → 13 → 25と変化し,戻り値は25となった。プログラム中のa,bに入れる字句の適切な組合せはどれか。

図の説明テキスト
〔プログラム 1〕
○整数型: calcX(整数型: inData)
整数型: num, i
num ← inData
for (i を 1 から 3 まで 1 ずつ増やす)
num ← a
endfor
return num
〔プログラム 2〕
○整数型: calcY(整数型: inData)
整数型: num, i
num ← inData
for ( b )
num ← a
endfor
return num
解答・解説
正解: エ. a: , b: を 2 から 6 まで 2 ずつ増やす
〔プログラム 1〕および〔プログラム 2〕の動作と、問題文で示された変数 num の値の変化から、空欄 a および b に入る適切な式と条件を特定します。
空欄 a の特定
〔プログラム 1〕の関数 calcX(1) の動作を確認します。inData に 1 が渡されるため、ループ開始前の num は 1 です。for 文により、変数 i は 1 から 3 まで 1 ずつ増えます()。
問題文より、変数 num は 1 → 3 → 7 → 13 と変化します。
選択肢に提示されている式を順に当てはめて検証します。
- の場合
- 1回目 (,
num= 1): - 2回目 (,
num= 3): (※7 にならないため不適)
- 1回目 (,
- の場合
- 1回目 (,
num= 1): - 2回目 (,
num= 3): - 3回目 (,
num= 7):
- 1回目 (,
すべての変化と一致するため、空欄 a には が入ることがわかります。
空欄 b の特定
〔プログラム 2〕の関数 calcY(1) の動作を確認します。
同様に inData に 1 が渡されるため、ループ開始前の num は 1 です。
問題文より、変数 num は 1 → 5 → 13 → 25 と変化します。
特定した空欄 a の式 num + 2 * i を用いて、各ループで必要となる i の値を逆算します。
- 1回目のループ (
numが 1 から 5 に変化): - 2回目のループ (
numが 5 から 13 に変化): - 3回目のループ (
numが 13 から 25 に変化):
したがって、変数 i は 2, 4, 6 と変化することがわかります。これは「 を 2 から 6 まで 2 ずつ増やす」という条件に該当します。
各選択肢の解説
- ア: a の式として を用いると、
calcXの2回目のループでnumが 8 になってしまうため誤りです。また、b の条件()もcalcYでのnumの変化に合致しません。 - イ: a の式として を用いると、
calcXの2回目のループでnumが 8 になってしまうため誤りです。 - ウ: b の条件でループを実行すると、 は 1, 4, 7 となります。これでは
calcYの1回目のループで となり、値が 5 にならないため誤りです。 - エ: a、b ともに正しい式・条件が入っており、正解です。