令和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とプログラム2
図の説明テキスト

〔プログラム 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: num+2×i\text{num} + 2 \times i, b: ii を 2 から 6 まで 2 ずつ増やす

〔プログラム 1〕および〔プログラム 2〕の動作と、問題文で示された変数 num の値の変化から、空欄 a および b に入る適切な式と条件を特定します。

空欄 a の特定

〔プログラム 1〕の関数 calcX(1) の動作を確認します。
inData に 1 が渡されるため、ループ開始前の num は 1 です。
for 文により、変数 i は 1 から 3 まで 1 ずつ増えます(i=1,2,3i = 1, 2, 3)。
問題文より、変数 num は 1 → 3 → 7 → 13 と変化します。

選択肢に提示されている式を順に当てはめて検証します。

  • 2×num+i2 \times \text{num} + i の場合
    • 1回目 (i=1i = 1, num = 1): 2×1+1=32 \times 1 + 1 = 3
    • 2回目 (i=2i = 2, num = 3): 2×3+2=82 \times 3 + 2 = 8 (※7 にならないため不適)
  • num+2×i\text{num} + 2 \times i の場合
    • 1回目 (i=1i = 1, num = 1): 1+2×1=31 + 2 \times 1 = 3
    • 2回目 (i=2i = 2, num = 3): 3+2×2=73 + 2 \times 2 = 7
    • 3回目 (i=3i = 3, num = 7): 7+2×3=137 + 2 \times 3 = 13

すべての変化と一致するため、空欄 a には num+2×i\text{num} + 2 \times i が入ることがわかります。

空欄 b の特定

〔プログラム 2〕の関数 calcY(1) の動作を確認します。
同様に inData に 1 が渡されるため、ループ開始前の num は 1 です。
問題文より、変数 num は 1 → 5 → 13 → 25 と変化します。
特定した空欄 a の式 num + 2 * i を用いて、各ループで必要となる i の値を逆算します。

  • 1回目のループ (num が 1 から 5 に変化):
    1+2×i=5  ⟹  2×i=4  ⟹  i=21 + 2 \times i = 5 \implies 2 \times i = 4 \implies i = 2
  • 2回目のループ (num が 5 から 13 に変化):
    5+2×i=13  ⟹  2×i=8  ⟹  i=45 + 2 \times i = 13 \implies 2 \times i = 8 \implies i = 4
  • 3回目のループ (num が 13 から 25 に変化):
    13+2×i=25  ⟹  2×i=12  ⟹  i=613 + 2 \times i = 25 \implies 2 \times i = 12 \implies i = 6

したがって、変数 i は 2, 4, 6 と変化することがわかります。これは「ii を 2 から 6 まで 2 ずつ増やす」という条件に該当します。

各選択肢の解説

  • ア: a の式として 2×num+i2 \times \text{num} + i を用いると、calcX の2回目のループで num が 8 になってしまうため誤りです。また、b の条件(i=1,4,7i = 1, 4, 7)も calcY での num の変化に合致しません。
  • イ: a の式として 2×num+i2 \times \text{num} + i を用いると、calcX の2回目のループで num が 8 になってしまうため誤りです。
  • ウ: b の条件でループを実行すると、ii は 1, 4, 7 となります。これでは calcY の1回目のループで 1+2×1=31 + 2 \times 1 = 3 となり、値が 5 にならないため誤りです。
  • エ: a、b ともに正しい式・条件が入っており、正解です。

Spineチーム