ITパスポート試験 / 令和4年度 ITパスポート試験 公開問題 / 問96
certification-simodake-work

令和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. ✓ 正答

解説

この問題は、プログラムの処理を順番に追いかけるトレースという手法で解きます。

まずプログラム1(calcX)について、変数 num の変化を確認します。初期値は num=1num = 1 で、ループの中で ii が 1, 2, 3 と変化します。

  • i=1i=1 のとき: num=13num = 1 \rightarrow 3(差は2)
  • i=2i=2 のとき: num=37num = 3 \rightarrow 7(差は4)
  • i=3i=3 のとき: num=713num = 7 \rightarrow 13(差は6)

この変化から、ループ内の計算式 aa には、前回の numnum2×i2 \times i を足すという法則が成り立ちます。これにより a=num+2×ia = num + 2 \times i と導き出せます。

次にプログラム2(calcY)でも同じ aa の式を使用し、numnum が 1 → 5 → 13 → 25 と変化する状況を考えます。

  • 初期値: num=1num = 1
  • 1回目: num=1+2×i=5    2×i=4    i=2num = 1 + 2 \times i = 5 \implies 2 \times i = 4 \implies i = 2
  • 2回目: num=5+2×i=13    2×i=8    i=4num = 5 + 2 \times i = 13 \implies 2 \times i = 8 \implies i = 4
  • 3回目: num=13+2×i=25    2×i=12    i=6num = 13 + 2 \times i = 25 \implies 2 \times i = 12 \implies i = 6

この ii の変化(2, 4, 6)は、「2から6まで2ずつ増やす」という条件と一致します。したがって、正解は選択肢エとなります。

アルゴリズム問題における変数のトレース 本問のように、プログラムの途中で変数の値がどう書き換わっていくかを一つずつ追いかける手法をトレースと呼びます。ITパスポート試験では、複雑なコードの理解を問う際、この手順を確実に実行できるかが合否を分けます。試験中には、メモ用紙に「変数名」と「その時の値」を書き出す表(トレース表)を作成することをおすすめします。

プログラミングと制御構文 この問題では for文による繰り返し処理が使われています。制御構文(順次・分岐・繰り返し)は、プログラムの基本的な骨組みです。特に繰り返し回数や条件の設定は、境界値(今回の場合は ii の開始値や終了値など)のミスが起きやすいため、本問のように実際に具体的な数値を入れて確かめる癖をつけておきましょう。

  • プログラミングの基礎:繰り返し(ITパスポート学習サイト)

学習の記録にははてなブックマーク!

気づいたこと・覚えたことをコメントにメモしよう