擬似言語のforとifをトレースして合計値を求める
ITパスポート試験 令和7年度 問78 / アルゴリズムとプログラミング › アルゴリズムとプログラミング
過去問にチャレンジ
手続calcMod3を呼び出したときの出力はどれか。 〔プログラム〕
○calcMod3()
整数型: totalValue, i
totalValue ← 0
for (i を 1 から 7 まで 1 ずつ増やす)
if (i ÷ 3 の余り が 0 と等しい)
totalValue ← totalValue + i
endif
endfor
totalValue を出力する
- ア
2
- イ
3
- ウ
7
- エ
9
会話形式の解説
講師今回は擬似言語のプログラムを1行ずつ追いかける、いわゆるトレースの問題です。繰返しのforと条件分岐のifが組み合わさっているので、変数iの値ごとに何が起きるかを確かめていきましょう。
受験者ifの条件にある「i÷3の余りが0と等しい」がまだ少し分かりにくいです。割り算の答えが0になるという意味ですか。
講師商ではなく余りを見ています。3で割って余りが0ということは、iが3で割り切れる、つまり3の倍数かどうかを判定しているのです。よく出る定番の条件です。
受験者なるほど。では、iが1から7まで動く間に、3の倍数のときだけtotalValueにiを足すのですね。
講師そのとおりです。totalValueは最初に0にしておきます。では、iを1から順に書き出してみてください。
受験者iが1と2は割り切れないので足しません。iが3で0+3=3、4と5は足さず、6で3+6=9、7は余りが1なので足しません。最後は9です。
講師正解です。出力はループが終わった後の最終値なので9になります。3の倍数の3と6を足すと9になるので、検算もできますね。
受験者選択肢の3は、iが3のときの途中の値ですね。そこで止めてしまうと間違えそうです。
講師はい。その後のiが6でも加算されるので、3のままでは終わりません。また7は繰返しの上限の値で、7自体は割り切れないので足されません。2は3と6の個数と同じ数ですが、このプログラムが足しているのはiの値そのものなので、出力は2にはなりません。
受験者個数を数えるのか、iの値を合計するのかを区別して読むことが大事なのですね。
講師そうです。トレースでは、iの値、条件の成否、totalValueの値を表にして書き出すと計算ミスを防げます。それから「1から7まで」は7を含むので、最後のi=7も忘れずに判定しましょう。
まとめ
この問題は、擬似言語の手続をトレースして出力値を求めるものです。「i÷3の余りが0と等しい」は、iが3の倍数かを判定する条件です。iを1から7まで順に追うと、3と6のときだけtotalValueに加算され、0+3=3、3+6=9となるので、出力は9(エ)です。選択肢には途中結果の3やループの上限の7など、トレースの途中で目にする数値が並んでいるので、ループ終了後の最終値を答えるよう注意しましょう。
解答・解説
正解はエです
この問題のテーマ
擬似言語で書かれた手続をトレースする問題です。繰返し(for)と条件分岐(if)を組み合わせて、1から7のうち3で割り切れる数だけを合計したときの出力を問うています。
解き方の考え方
まず、totalValueが0から始まること、iが1から7まで1ずつ増えることを確認します。if文の「i÷3の余りが0と等しい」は、iが3で割り切れる(3の倍数である)かを判定する条件です。iを1から7まで順に書き出し、条件を満たすときだけtotalValueにiを足していきます。i=1, 2は加算なし、i=3で0+3=3、i=4, 5は加算なし、i=6で3+6=9、i=7は加算なしです。ループが終わった時点のtotalValueは9なので、出力は9になります。検算として、3の倍数の3と6を足すと3+6=9となり、正解のエと一致します。
選択肢ごとの解説
- ×ア 2アの2は、条件を満たす数(3と6)の「個数」にあたる値で、合計ではありません。プログラムは条件を満たしたときにtotalValueへiそのものを足しているため、出力が2になることはありません。
- ×イ 3イの3は、i=3の時点でのtotalValueの途中結果です。その後のi=6も3で割り切れるので加算が行われ、値は3のまま終わりません。
- ×ウ 7ウの7は繰返しの上限値で、合計値ではありません。7を3で割ると余りが1になるので、7は加算の対象にもなりません。
- ○エ 9エの9は、1から7のうち3で割り切れる3と6を足した値です。i=3で0+3=3、i=6で3+6=9となり、i=7では加算されないため、ループ終了後に9が出力されます。
補足
選択肢には、途中結果(3)、条件を満たした数の個数(2)、ループの上限値(7)といった、トレースの途中で目にする数値が並んでいます。足しているのが「1」なのか「i」なのかを見落とすと、個数と合計を取り違えやすいので注意が必要です。また、「1から7まで」は7を含むので、最後のi=7も忘れずに判定しましょう。
POINT
- 「i÷3の余りが0と等しい」は、iが3の倍数かどうかを判定する定番の条件です。
- 合計を求める変数は0で初期化し、条件を満たすたびに値を足していくのが基本の形です。
- トレース問題では、iの値ごとに条件の成否と変数の値を表にして書き出すと、計算ミスを防げます。
- 出力されるのはループが終わった後の最終値であり、途中結果ではありません。
