ITパスポート試験

問96

ITパスポート過去問 令和4年度(2022年)問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に入れる字句の適切な組合せはどれか。

選択肢

正解と解き方・学習ポイント(AI解説)

正解:
あなたの回答:未回答

calcX(1)のnumの変化(1→3→7→13)から、for文の各繰り返しで実行されている代入式aを特定します。次に、そのaをcalcY(1)にも適用し、numの変化(1→5→13→25)を満たすためにfor文の制御変数iがどの値を取る必要があるかを逆算して、for文の条件bを特定します。aがnum + 2×i、bがiを2から6まで2ずつ増やすの組合せが条件を満たします。

不正解

aが2×num+iなので、calcXでi=2のときnum=2×3+2=8となり、必要な7と一致しません。したがって不適切です。

不正解

aが2×num+iなので、calcXでi=2のときnum=2×3+2=8となり、必要な7と一致しません。したがって不適切です。

不正解

aがnum+2×iなのでcalcXは一致します。しかしbがiを1から7まで3ずつ増やす(i=1,4,7)になり、calcYの1回目がnum=1+2×1=3となって必要な5と一致しません。したがって不適切です。

正解

aをnum+2×i、bをiを2から6まで2ずつ増やす(i=2,4,6)とすると、calcXは1→3→7→13、calcYは1→5→13→25となり、どちらも条件に一致します。したがって適切です。

Point

この問題は、プログラムを上から順に実行したときの変数の値の変化を追跡し、代入式と繰り返し条件を推定する力を確認するものです。

解くために必要な知識

この問題を解くには、for文の繰返し回数と、ループ内の代入による変数の更新を、順に計算して確認できることが必要です。

用語の整理

用語 意味
引数 inData 関数に渡される入力値です。最初にnumへ代入されます。
戻り値 関数が最後にreturnで返す値です。
変数 num ループ内の計算結果で更新され、最終的に戻り値になります。
変数 i for文のループ変数です。指定された範囲で増加します。
for文 iの開始値、終了値、増分を決めて、繰返し処理を行う構文です。

for文の読み取り方

iが取りうる値を列挙する

for(iを開始値から終了値まで増分で増やす)と書かれている場合、iは次のように変化します。

  • 例1:iを1から3まで1ずつ増やす

    • i = 1, 2, 3
  • 例2:iを2から6まで2ずつ増やす

    • i = 2, 4, 6
  • 例3:iを1から7まで3ずつ増やす

    • i = 1, 4, 7

ループ内の代入は逐次反映する

ループ内で num ← 式 を実行すると、次の繰返しでは更新後のnumを使って式を計算します。

トレースのやり方

表で「iの値」と「更新後のnum」を並べる

この問題のようにnumの変化が与えられている場合は、次の手順が有効です。

  • iの値を列挙する

  • 各回の計算で、更新後のnumを計算する

  • 与えられた変化(例:1→3→7→13)と一致するか確認する

問題の解法手順

解く手順

1. calcXの結果からaを確定する

calcX(1)は、最初にnum=1です。for文は「iを1から3まで1ずつ増やす」なので、iは1,2,3の順に3回実行されます。

候補のaを当てはめて、numの変化が1→3→7→13になるかを確認します。

i a = 2×num + i の場合のnum a = num + 2×i の場合のnum
1 2×1+1=3 1+2×1=3
2 2×3+2=8(不一致) 3+2×2=7
3 以降も不一致 7+2×3=13

このため、aはnum + 2×iです。

2. calcYの結果からbを確定する

calcY(1)も最初にnum=1です。numが1→5→13→25と3回変化しているので、for文は3回実行されます。ここでもaはnum + 2×iを使います。

bの候補ごとに、iの取り方とnumの変化を確認します。

bの候補 iの値 1回目のnum 2回目のnum 3回目のnum
iを1から7まで3ずつ増やす 1,4,7 1+2×1=3(不一致) - -
iを2から6まで2ずつ増やす 2,4,6 1+2×2=5 5+2×4=13 13+2×6=25

よって、bは「iを2から6まで2ずつ増やす」です。

3. 組合せを選ぶ

a=num + 2×i、b=iを2から6まで2ずつ増やすなので、「エ」を選びます。

選択肢ごとの解説

不正解

aが2×num+iなので、calcXでi=2のときnum=2×3+2=8となり、必要な7と一致しません。したがって不適切です。

不正解

aが2×num+iなので、calcXでi=2のときnum=2×3+2=8となり、必要な7と一致しません。したがって不適切です。

不正解

aがnum+2×iなのでcalcXは一致します。しかしbがiを1から7まで3ずつ増やす(i=1,4,7)になり、calcYの1回目がnum=1+2×1=3となって必要な5と一致しません。したがって不適切です。

正解

aをnum+2×i、bをiを2から6まで2ずつ増やす(i=2,4,6)とすると、calcXは1→3→7→13、calcYは1→5→13→25となり、どちらも条件に一致します。したがって適切です。

まとめ

calcX(1)のnumの変化(1→3→7→13)から、for文の各繰り返しで実行されている代入式aを特定します。次に、そのaをcalcY(1)にも適用し、numの変化(1→5→13→25)を満たすためにfor文の制御変数iがどの値を取る必要があるかを逆算して、for文の条件bを特定します。aがnum + 2×i、bがiを2から6まで2ずつ増やすの組合せが条件を満たします。

テクノロジ系 > 基礎理論 > アルゴリズムとプログラミング