反復処理の更新式とループ変数の見分け方
ITパスポート試験 令和4年度 問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:2 × num + i、b:iを1から7まで3ずつ増やす
- イ
a:2 × num + i、b:iを2から6まで2ずつ増やす
- ウ
a:num + 2 × i、b:iを1から7まで3ずつ増やす
- エ
a:num + 2 × i、b:iを2から6まで2ずつ増やす
会話形式の解説
講師まず各回でnumがいくつ増えたかを見ます。更新式と、繰り返しで使うiの値を順に確かめましょう。
受験者calcXでは1から3へは2、3から7へは4、7から13へは6増えています。iの値と関係がありそうです。
講師そのとおりです。calcXのiは1、2、3なので、増加量は毎回iの2倍です。更新式は「num+2×i」と分かります。
受験者「2×num+i」も最初は1から3になります。どこで違いが出ますか。
講師2回目は2×3+2=8となり、指定された7と合いません。この式では1→3→8→19と進むため、bの設定に関係なく選べません。
受験者ではcalcYでは、増加量の4、8、12からiの値を逆算すればよいのですね。
講師はい。「num+2×i」でそれぞれ4、8、12を加えるには、iが2、4、6と変わる必要があります。2から6まで2ずつ増やす設定です。
受験者もう一方の設定では、iが1、4、7になりますね。最初の増加量が2なので、calcYの1→5と合いません。
講師その設定だとnumは1→3→11→25です。最後は25でも、途中の3と11が指定された5と13に一致しません。
受験者つまり、更新式が「num+2×i」で、iを2、4、6と変える組合せを選びます。
講師正解はエです。calcYでは1+2×2=5、5+2×4=13、13+2×6=25となり、途中の値も戻り値も合います。
受験者最終値だけでなく、毎回の変化を確認することが大切なのですね。
講師はい。開始値と増分からiの値を書き出し、各回のnumを計算すると、最後だけ一致する組合せにも気付けます。
まとめ
calcXの増加量は2、4、6で、各回のiの2倍です。このため、更新式は「num+2×i」と分かります。calcYの増加量4、8、12に必要なiは2、4、6なので、適切な組合せはエです。最終値が同じになる別の組合せもあるため、途中の値まで確かめます。
解答・解説
正解はエです
この問題のテーマ
反復処理でnumを更新する式と、ループ変数iの値の組合せを問う問題です。
解き方の考え方
まずcalcXの増加量に注目します。1→3→7→13では、iが1、2、3のときにそれぞれ2、4、6増えるので、aは「num+2×i」です。次にcalcYの増加量4、8、12からiの値を求め、選択肢のbと照合します。
選択肢ごとの解説
- ×ア a:2 × num + i、b:iを1から7まで3ずつ増やすaの「2×num+i」をcalcXに当てはめると、1→3→8→19となります。指定された2回目以降の値と一致しません。
- ×イ a:2 × num + i、b:iを2から6まで2ずつ増やすbのi=2、4、6はcalcYに必要な値です。しかし、aの「2×num+i」ではcalcXの2回目が2×3+2=8となり、指定された7になりません。
- ×ウ a:num + 2 × i、b:iを1から7まで3ずつ増やすaの「num+2×i」はcalcXに合います。しかし、bのi=1、4、7をcalcYに使うと1→3→11→25となり、途中の値が一致しません。
- ○エ a:num + 2 × i、b:iを2から6まで2ずつ増やすaを「num+2×i」とすると、calcXは1+2×1=3、3+2×2=7、7+2×3=13です。bのi=2、4、6をcalcYに使うと、1+2×2=5、5+2×4=13、13+2×6=25となり、途中の値も戻り値も一致します。
補足
ウも最終値だけは25になります。反復処理の式を選ぶときは、最終値に加えて問題文に示された途中の推移も確かめます。
POINT
- 反復ごとの増加量から更新式を考えます。
- 「num+2×i」は、現在のnumにiの2倍を加える式です。
- ループ変数iの開始値・終了値・増分から、各反復で使う値を順に書き出します。
