今回は令和4年度下期 機械科目 B問題18を解説します。30件分の使用電力量データについて、配列d[30]から最大値と平均値を出力するプログラムの流れ図(第1図)の空欄(ア)〜(エ)を求める(a)と、30件のデータを大きい順(降順)に並べ替える流れ図(第2図)の空欄(オ)〜(キ)を求める(b)の2段構成の問題です。
(a)は最大値変数sと合計変数tの初期化、ループの開始位置、最大値更新の判定式という定番パターンです。(b)はバブルソート型の二重ループで、退避用変数wを使った3ステップの値交換処理(w←d[i],d[i]←d[j],d[j]←w)を穴埋めします。
令和4年度下期 機械科目 B問題18:問題文と選択肢
まずは、実際の試験問題を確認してみましょう。

電験3種 機械科目 【情報】 令和4年度下期 B問題18
30件分の使用電力量のデータ処理について,次の(a)及び(b)に答えよ。
(a) 第1図は,30件分の使用電力量の中から最大値と30件分の平均値を出力する一つのプログラムの流れ図を示す。第1図中の(ア)〜(エ)に当てはまる処理として,正しいものを組み合わせたのは次のうちどれか。
(b) 第2図は,30件の使用電力量を大きい順(降順)に並べ替える一つのプログラムの流れ図を示す。第2図中の(オ)〜(キ)に当てはまる処理として,正しいものを組み合わせたのは次のうちどれか。ただし,wは一時的な退避用の変数と考えよ。
(ア) (イ) (ウ) (エ) (1) t←d[1] 0 d[i]<s s←d[i] (2) t←0 2 d[i]>s s←d[i] (3) t←d[1] 2 d[i]<s d[i]←s (4) t←d[1] 2 d[i]>s s←d[i] (5) t←0 0 d[i]<s d[i]←s
(オ) (カ) (キ) (1) d[i]<d[j] d[j]←d[i] d[j]←w (2) d[i]<d[j] d[i]←d[j] d[j]←w (3) d[i]<d[j] d[j]←d[i] d[i]←w (4) d[i]>d[j] d[i]←d[j] d[j]←w (5) d[i]>d[j] d[j]←d[i] d[i]←w

出題のポイント:初期化・比較・交換の順を読む

最大値と合計をd[1]で初期化したら、d[1]を重ねて処理しないようi=2から走査します。降順ソートでは、左側が右側より小さいときに交換し、元のd[i]を失わないようwへ退避してから上書きします。
ポイント解説:先頭要素の利用と安全な値交換

(a)は配列から最大値を探索しながら合計も計算する典型的なフローチャートです。最大値変数sと合計変数tを最初の要素d[1]で初期化し、2番目の要素からループを開始する点がポイントです。
(b)はバブルソート型の二重ループによる降順整列です。退避用変数wを使って「w←d[i]」「d[i]←d[j]」「d[j]←w」という3ステップで値を交換します。
問題の解説:最大値探索と降順交換の空欄を確定する

STEP1 (a) 初期化処理(ア)(イ)を求める
最大値s←d[1]と同時に,合計変数もt←d[1]で初期化するのが(ア)。
d[1]は初期化済みのため,ループはi=2(イ)からk=30までとする。
STEP2 (a) 合計の積算とループ範囲を確認する
各要素についてt←t+d[i]で合計を継続的に加算する(すでにフローチャートに明記された処理)。
STEP3 (a) 最大値更新の判定(ウ)(エ)を求める
新しい要素d[i]が現在の最大値sより大きければ更新するので,判定(ウ)はd[i]>s。
YES側の処理(エ)はs←d[i](最大値の更新)。
以上より(ア)t←d[1](イ)2(ウ)d[i]>s(エ)s←d[i]の組合せである(4)が(a)の正解です。
STEP4 (b) 交換条件(オ)と交換処理(カ)(キ)を求める
降順に並べたいので,d[i]がd[j]より小さければ(順序が逆なら)交換が必要。判定(オ)はd[i]<d[j]。
交換はw←d[i](退避)→(カ)d[i]←d[j](d[j]の値をd[i]へ)→(キ)d[j]←w(退避していた元のd[i]をd[j]へ)の3ステップ。
以上より(オ)d[i]<d[j](カ)d[i]←d[j](キ)d[j]←wの組合せである(2)が(b)の正解です。
答え:(a)-(4),(b)-(2)
💡 覚え方
最大値探索は「s←最初の要素で初期化→2番目からループ→新値が大きければ更新」の定番パターン。値の交換は退避用変数wを使い「w←d[i],d[i]←d[j],d[j]←w」の3ステップで行う。
⚠️ よくある間違い
ループの開始位置をi=1としてしまい,d[1]同士の無意味な比較を発生させない(すでにs,tの初期値として使用済みのためi=2から)。交換の3ステップの順序(退避→上書き→書き戻し)を入れ替えない。
まとめ
| (a)(ア) | t←d[1] |
| (a)(イ) | 2 |
| (a)(ウ) | d[i]>s |
| (a)(エ) | s←d[i] |
| (b)(オ) | d[i]<d[j] |
| (b)(カ) | d[i]←d[j] |
| (b)(キ) | d[j]←w |
| 答え | (a)-(4),(b)-(2) |
▼あわせて解きたい関連問題
・30件の使用電力量データの最大値・平均値算出と降順ソート(平成20年度の類題):【機械】平成20年度B問題18
・配列を使ったバブルソートのアルゴリズム:【機械】平成29年度B問題18

コメント