ITパスポート 2010年 秋期 問69
問題文
二つの変数とに対して、次の手続を(1)から順に実行する。処理が終了したとき、の値は幾らになるか。
〔手続〕
(1) に2を代入し、に3を代入する。
(2) の値から1を引いたものをに代入する。
(3) の値との値を加えたものをに代入する。
(4) なら手続(2)に戻り、なら処理を終了する。
選択肢
ア:4
イ:5(正解)
ウ:7
エ:8
🔒 解説は解答すると表示されます
反復による累積加算【ITパスポート解説】
正解の理由
手続では毎回「まず y を1減らし、その減らした値を x に足す」操作を繰り返します。初めに なので、減算して加算する値の順は となり、これらを x に順に足します。したがって最終的な は
2 + (2 + 1) = 5 となり、選択肢イが正しいです。
(操作の順序「y を減らす→その y を x に加える」が重要です。順序を取り違えると答えが変わります。)
解法ステップ
- 初期状態:(問題の(1)より)。
- 1回目の繰り返し:
- (2) →
- (3) →
- (4) (2≠1)なので繰り返す
- 2回目の繰り返し:
- (2) →
- (3) →
- (4) なので処理終了
- 結果:(選択肢イ)
一般化すると、初期値を とした場合、各繰り返しで足される値は です。よって(ただし次の注意を参照)最終的な は
となります。
重要な条件:上の式は初期 のときに成り立ちます。もし (例: や )だと、手続の順序上 y はさらに小さくなり続けて にならないため、処理は終了せず無限ループになります。
選択肢別の誤答解説
-
ア: 4
誤りの典型は「繰り返しが1回だけ行われる」と誤解することです。1回だけなら になりますが、実際は y が 2 のときもう一度繰り返します。 -
イ: 5
正しい。上記の手順どおりに2回の繰り返しで になります。 -
ウ: 7
これは「元の y 値(3)を足してしまう」など、操作の順序を誤った場合に出やすい値です。手続ではまず y を減らすため、3 を直接足すことはありません。 -
エ: 8
典型的なミスは「(3) の加算を y を減らす前の値で行う」と誤解するパターンです。その場合 2 + 3 + 2 + 1 = 8 のように計算してしまいますが、手続の定義と順序に反します。
よくある誤解
-
「加算は元の y を使う」と思い込む
→ 問題文の操作順((2) で y を減らす→(3) で加える)を必ず確認してください。順序が答えを決めます。 -
一般式の適用範囲を見落とす
→ 一般式 は初期 の場合だけです。 では y が 1 に到達せず無限ループになります。 -
端点(y=1 の扱い)を見落とす
→ 初期 y=1 のときも (2) と (3) は一度実行され、その後無限に続く点を理解しておきましょう。
補足コラム
-
等差数列の和の公式を覚えると便利です。1 から までの和は なので今回の和 は です。
-
手続の設計で「前置(先に減らす)か後置(後で減らす)か」は非常に重要です。プログラミングではループ条件や順序の違いで結果が変わる典型例です。
-
実際に動きを確かめたい場合の簡単なシミュレーション(Python例):
def simulate(a, m, steps=100):
x=a; y=m
for i in range(steps):
y = y - 1
x = x + y
if y == 1:
return x
return None # steps 回以上回って終了しない(無限ループの疑い)
print(simulate(2, 3)) # 出力: 5
FAQ
Q1: 「初期 y=1 のときはどうなる?」
A1: 手続では (2) と (3) が一度実行され、y は 0 になります。以降 y はどんどん小さくなり 1 には戻らないので、処理は終了せず無限ループになります。
A1: 手続では (2) と (3) が一度実行され、y は 0 になります。以降 y はどんどん小さくなり 1 には戻らないので、処理は終了せず無限ループになります。
Q2: 「一般式は他の問題でも使えますか?」
A2: 同じ構造(y を 1 ずつ減らし、その値を累積する)なら使えます。ただし初期値がどうか(m の大小)を必ず確認してください。
A2: 同じ構造(y を 1 ずつ減らし、その値を累積する)なら使えます。ただし初期値がどうか(m の大小)を必ず確認してください。
Q3: 「なぜ m≥2 を条件にするのか?」
A3: m≥2 のときだけ「減らしていった最小の値が 1 になる」ためループが終わります。m≤1 だと最終的に 1 にならず終了条件が満たされません。
A3: m≥2 のときだけ「減らしていった最小の値が 1 になる」ためループが終わります。m≤1 だと最終的に 1 にならず終了条件が満たされません。
関連キーワード: 反復処理、ループ、累積加算、等差数列の和、無限ループ

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

