令和5年度 ITパスポート試験 公開問題 問64 解説 プログラムのトレース
関数 sigma は, 正の整数を引数 max で受け取り, 1から max までの整数の総和を戻り値とする。プログラム中のaに入れる字句として, 適切なものはどれか。 〔プログラム〕 ○整数型: sigma(整数型: max) 整数型: calcX ← 0 整数型: n for (n を 1 から max まで 1 ずつ増やす) [ a ] endfor return calcX
- calcX ← calcX × n
- calcX ← calcX + 1
- calcX ← calcX + n ✓ 正答
- calcX ← n
解説
この問題は、プログラムの目的である「1からmaxまでの総和を求める」ために、ループ内で何をすべきかを考える問題です。プログラムは変数 calcX を 0 で初期化し、n が 1 から max まで変化するループの中で、毎回その値を calcX に足していく処理が必要となるため、正解は calcX ← calcX + n です。
プログラムの追跡(トレース)を行うと、処理の流れが明確になります。例えば max が 3 の場合、ループは以下のように進みます。
- 初期状態:calcX は 0 です。
- n = 1 のとき:calcX に 1 を加えて、calcX は 1 になります。
- n = 2 のとき:現在の calcX (1) に 2 を加えて、calcX は 3 になります。
- n = 3 のとき:現在の calcX (3) に 3 を加えて、calcX は 6 になります。
結果として、1 + 2 + 3 = 6 という正しい総和が計算されます。このように、ある変数に値を累積していく手法を、プログラミングの世界では「累計」や「アキュムレータ(累積器)」と呼びます。
この問題のパターンは、ITパスポート試験の擬似言語問題における基礎中の基礎です。総和を求める場合は変数に加算、総乗(階乗など)を求める場合は変数に積算するという基本操作を理解しておくことが重要です。試験では、変数の初期値とループ内の計算式の組み合わせによって、合計値、平均値、カウント数などを求める問題が頻出します。
計算内容が加算(+)ではなく乗算(×)であれば階乗を求める計算になり、加算ではなく + 1 であれば単にループ回数をカウントするだけの処理になります。選択肢のプログラムがどのような結果を生み出すかを一行ずつ書き出す「トレース」を行う習慣をつけておくと、複雑な条件分岐やループが含まれる問題でも着実に正解を導けるようになります。
- YouTube:【ITパスポート】擬似言語の基礎とトレースのやり方(参考動画)