基本情報技術者 2013年 春期 午前(科目A) 問08
問題文
とを自然数とするとき、流れ図で表される手続を実行した結果として、適切なものはどれか。


選択肢
ア:
イ:(正解)
ウ:
エ:
🔒 解説は解答すると表示されます
自然数の流れ図処理【午前解説】
正解の理由
正解は イ です。
流れ図の処理を追うと、初期では です。判定で が真なら終了し、偽()なら から を引き を 1 増やして判定に戻ります。これを繰り返すことで は となり、同時に不変式 を満たす q が得られます。したがって q が商、r が余りです。
流れ図の処理を追うと、初期では です。判定で が真なら終了し、偽()なら から を引き を 1 増やして判定に戻ります。これを繰り返すことで は となり、同時に不変式 を満たす q が得られます。したがって q が商、r が余りです。
解法ステップ
- 初期化を確認: を把握する。
- 判定条件を読む:条件は 。Yes で終了、No で のとき処理が進む。
- ループ処理を確認:No 側で を行い判定へ戻る。
- 不変式を導く:各ループ後に が成り立つことを確認する。
- 終了条件で が得られ、q が商、r が余りであると結論付ける。
選択肢別の誤答解説
- ア:q を「x ÷ y の余り」、r を「x ÷ y の商」としているが、流れ図では q が繰り返し加算され商に相当し、r が引かれて小さくなる余りなので逆です。
- イ:正解。q が の商、r が余りです。
- ウ:y ÷ x としているため除算の方向が逆です。流れ図は x から y を引くので x÷y を扱っています。
- エ:ウと同様に除数と被除数が逆になっており、さらに商・余りの位置も逆です。
よくある誤解
- 誤解1:判定の Yes/No を見誤り、ループの方向(終了が右、繰り返しが下)を逆に解釈する。これで商と余りが入れ替わる誤答が出ます。
- 誤解2:変数名の意味(q が積算される回数=商)を見落とし、q を余りと考えてしまう。流れを追って増減を確認すれば防げます。
- 誤解3: のケースを考えずに除算と同じ扱いを想定すると無限ループや未定義扱いになる点を見落とす。
補足コラム
- 擬似コード例(理解確認用):
q = 0
r = x
while not (r < y): # つまり r >= y の間
r = r - y
q = q + 1
# 終了後: q は商, r は余り
- ループ回数は最終的に q 回であり、計算量は (繰り返し引き算の回数)。効率的な整数除算アルゴリズムと比べると非効率ですが、原理的に正しい方法です。
- 注意: の場合は除算にならず、このフローは無限ループあるいは未定義の扱いになります。通常は を前提とします。
FAQ
Q1: もし最初から ならどうなりますか?
A1: 初期判定で が真になりすぐ終了するので (余りが被除数そのまま)です。
A1: 初期判定で が真になりすぐ終了するので (余りが被除数そのまま)です。
Q2: の場合は?
A2: 初期で 、判定 が真( の場合)で終了するため です。
A2: 初期で 、判定 が真( の場合)で終了するため です。
Q3: の場合は?
A3: から 1 を引き続けるので最終的に になります(1 で割った商は被除数、余りは 0)。
A3: から 1 を引き続けるので最終的に になります(1 で割った商は被除数、余りは 0)。
Q4: のときは?
A4: このフローは無限ループになります。実際の問題設定では除数 は 1 以上と仮定するのが自然です。
A4: このフローは無限ループになります。実際の問題設定では除数 は 1 以上と仮定するのが自然です。
関連キーワード: アルゴリズム、フローチャート、繰り返し処理、除算、剰余、商、ループ不変式、反復法、整数演算、手続き的アルゴリズム

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

