平成28年度 春期 午前 問8
アルゴリズム
流れ図に関する問題
x と y を自然数とするとき,流れ図で表される手続を実行した結果として,適切なものはどれか。
図(書き起こし): 流れ図。
( 開始 )
↓
┌─────────────┐
│ q ← 0 │
│ r ← x │
└──────┬──────┘
↓
┌──> < r < y > ──Yes──> ( 終了 )
│ │
│ No
│ ↓
│ ┌─────────────┐
│ │ r ← r − y │
│ │ q ← q + 1 │
│ └──────┬──────┘
└──────────┘
逐語で言い直すと: 開始 → q に 0,r に x を代入 → 判定「r < y」が Yes なら終了,No なら
「r ← r − y」「q ← q + 1」を実行して判定へ戻る。
| q の値 | r の値 | |
|---|---|---|
| ア | x ÷ y の余り | x ÷ y の商 |
| イ | x ÷ y の商 | x ÷ y の余り |
| ウ | y ÷ x の余り | y ÷ x の商 |
| エ | y ÷ x の商 | y ÷ x の余り |
- アx ÷ y の余り x ÷ y の商
- イx ÷ y の商 x ÷ y の余り
- ウy ÷ x の余り y ÷ x の商
- エy ÷ x の商 y ÷ x の余り
答えと解説を見る
✓ これが正解イx ÷ y の商 x ÷ y の余り
解説
yを引ける回数がx÷yの商、残りが余りです。
この流れ図は、初期値としてqに0を、rに元の値xを置き、rがy以上である限り、rから毎回yを1回ずつ引きながらqを1ずつ増やす形になっています。判定の軸は、rから何回yを引けたかと、最後に残った値の意味の2つを取り出せるかどうかです。yを引く回数はxをyで割ったときの整数の割り算の商、そして最後に残る値、つまりrがy未満になったときの値は、その割り算の余りに一致します。したがって処理が終わった時点での2つの変数は、xをyで割ったときの商が回数を数えたqに、xをyで割ったときの余りが引き算の残りとしてrに、それぞれ現れます。ここで扱っているのは、除算を減算の繰返しで実現する古典的な考え方で、余りと商をそれぞれ別の変数に取り出す型です。
ほかの選択肢はなぜ違うのか
- アx ÷ y の余り x ÷ y の商:商と余りの割当てが逆で、qが余り、rが商とされています。ここでの流れ図では、yを引ける回数を数えたのがqで、最後にy未満になって残った値がrなので、割当てが入れ替わっていました。役割の対応が反対でした。
- ウy ÷ x の余り y ÷ x の商:xとyの立場を取り違えて、yをxで割ったときの余りと商になっています。設問の手順は、rにxを置き、そこからyを繰返し引く形なので、割られる数はxで、割る数がyの側でした。役割が入れ替わっていました。
- エy ÷ x の商 y ÷ x の余り:xとyの立場を取り違えたうえに、qとrの中身も反対になっています。割られる数と割る数の関係も、商と余りの取出し先も、両方が実際の流れ図と合わない形になり、記述の全体が食い違っていました。
出典:平成28年度 春期 基本情報技術者試験 午前 問8(改変:原典の図表をテキストに書き起こした)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)