電験三種 令和2年度(2020) 機械 問18(a) 過去問解説
【選択問題:問17と問18のどちらか一方を選んで解答する】
図は,$n$ 個の配列の数値を大きい順(降順)に並べ替えるプログラムのフローチャートである。次の(a)及び(b)の問に答えよ。
(a) 図中の(ア)〜(ウ)に当てはまる処理の組合せとして,正しいものを次の(1)〜(5)のうちから一つ選べ。

- (1) (ア)$\mathrm{a[i]} \gt \mathrm{a[j]}$,(イ)$\mathrm{a[j]} \leftarrow \mathrm{a[i]}$,(ウ)$\mathrm{a[i]} \leftarrow m$
- (2) (ア)$\mathrm{a[i]} \gt \mathrm{a[j]}$,(イ)$\mathrm{a[i]} \leftarrow \mathrm{a[j]}$,(ウ)$\mathrm{a[j]} \leftarrow m$
- (3) (ア)$\mathrm{a[i]} \lt \mathrm{a[j]}$,(イ)$\mathrm{a[j]} \leftarrow \mathrm{a[i]}$,(ウ)$\mathrm{a[i]} \leftarrow m$
- (4) (ア)$\mathrm{a[i]} \lt \mathrm{a[j]}$,(イ)$\mathrm{a[j]} \leftarrow \mathrm{a[i]}$,(ウ)$\mathrm{a[j]} \leftarrow m$
- (5) (ア)$\mathrm{a[i]} \lt \mathrm{a[j]}$,(イ)$\mathrm{a[i]} \leftarrow \mathrm{a[j]}$,(ウ)$\mathrm{a[j]} \leftarrow m$
答えと解説を見る
正解は(5)
解説
【考え方】大きい順に並べるので、後ろの方が大きいときに入れかえます。入れかえは m(一時置き場)を使った3つの手順です。
■1 (ア) 入れかえる条件
大きい順にしたいので、後ろの a[j] の方が大きいとき入れかえます。→ (ア) $\mathrm{a[i]} \lt \mathrm{a[j]}$
$\mathrm{a[i]} \gt \mathrm{a[j]}$ で入れかえると、小さい順になってしまいます。
■2 (イ)(ウ) 入れかえの手順
まず、m に a[i] を取っておきます。
次に、a[i] に a[j] を入れます。→ (イ) $\mathrm{a[i]} \leftarrow \mathrm{a[j]}$
最後に、a[j] に m(もとの a[i])を入れます。→ (ウ) $\mathrm{a[j]} \leftarrow m$
■3 m が必要なわけ
m を使わずに a[i]←a[j] をすると、もとの a[i] が消えてしまいます。だから一時置き場が必要です。
答えは(5)ピヨ。
出典:令和2年度(2020) 第三種電気主任技術者試験(電気技術者試験センター)機械 問18(a)