情報35【電験3種 機械】30件の使用電力量データの最大値・平均値算出と降順ソート!平成20年度 B問題18 完全解説

電験3種 機械科目 情報 平成20年度 B問題18 データを大きい順に並べる!アルゴリズムを追う

今回は平成20年度 機械科目 B問題18を解説します。情報34(令和4年度下期B問題18)と同一テーマ・同一アルゴリズム構造の問題で、配列d(30)を使って最大値・平均値を出力する流れ図(図1)の空欄(ア)〜(エ)を求める(a)と、降順に並べ替える流れ図(図2)の空欄(オ)〜(キ)を求める(b)から構成されます。

解き方は情報34と同じ考え方です。(a)は最大値・合計の初期化とループ開始位置、最大値更新の判定式を求め、(b)は単純交換法型の二重ループで退避用変数wを使った3ステップの交換処理を穴埋めします。

目次

平成20年度 機械科目 B問題18:問題文と選択肢

まずは、実際の試験問題を確認してみましょう。

電験3種 機械科目 情報 平成20年度 B問題18 問題文
平成20年度 機械科目 B問題18 問題文

出典:一般財団法人 電気技術者試験センター「平成20年度 第三種電気主任技術者試験」機械科目 B問題18

電験3種 機械科目 【情報】 平成20年度 B問題18

 30件分の使用電力量のデータ処理について,次の(a)及び(b)に答えよ。

(a) 図1は,30件分の使用電力量の中から最大値と30件分の平均値を出力する一つのプログラムの流れ図を示す。図1中の(ア),(イ),(ウ)及び(エ)に当てはまる処理として,正しいものを組み合わせたのは次のうちどれか。

(b) 図2は,30件の使用電力量を大きい順(降順)に並べ替える一つのプログラムの流れ図を示す。図2中の(オ),(カ)及び(キ)に当てはまる処理として,正しいものを組み合わせたのは次のうちどれか。

(ア)(イ)(ウ)(エ)
(1)d(1)→t0,k,1d(i)<sd(i)→s
(2)0→t2,k,1d(i)>sd(i)→s
(3)d(1)→t2,k,1d(i)<ss→d(i)
(4)d(1)→t2,k,1d(i)>sd(i)→s
(5)0→t0,k,1d(i)<ss→d(i)
(オ)(カ)(キ)
(1)d(i)<d(j)d(i)→d(j)w→d(j)
(2)d(i)<d(j)d(j)→d(i)w→d(j)
(3)d(i)<d(j)d(i)→d(j)w→d(i)
(4)d(i)>d(j)d(j)→d(i)w→d(j)
(5)d(i)>d(j)d(i)→d(j)w→d(i)
図1・図2 30件の使用電力量データの最大値・平均値算出/降順ソートの流れ図(自作図)
図1・図2 30件の使用電力量データの最大値・平均値算出/降順ソートの流れ図(自作図)

出題のポイント:最大値を探すアルゴリズム

(a)は「最大値と平均値を求める」流れ図——定番のアルゴリズムなので、型を覚えておくと確実です。

空欄答え意味
(ア)d(1)→t★合計の初期値は最初のデータ
(イ)2, k, 1ループは2 から。1 は初期化で使用済み
(ウ)d(i)>s★今の値が最大値より大きいか
(エ)d(i)→s大きければ最大値を更新

最大値を探すには、まず1つめを仮の最大値とする——それより大きいものが出てきたら入れ替えるこれを最後まで繰り返せば、真の最大値が残ります

合計も同じく1つめから始める——だからループは2 番目からになります。0 から始めてループを1 からにしても同じ結果ですが、最大値の初期化には0 は使えません(負の値があると誤る)。

(ウ)の不等号の向きが最大の分かれ目——最大値を探すなら「大きいか」「小さいか」なら最小値を探すことになります

答え(a)の正解は (4)です。
図1・図2 30件の使用電力量データの最大値・平均値算出/降順ソートの流れ図(自作図)
図1・図2 30件の使用電力量データの最大値・平均値算出/降順ソートの流れ図(自作図)
最大値と平均値の探索手順および降順の単純交換法の要点
最大値探索はd(1)で初期化し、降順交換はd(i)<d(j)のときに行います。

(b) 並べ替えと値の交換

2つの変数の値を入れ替える——単純そうで、じつは工夫が要る操作です。

手順処理状態
d(i)→w★退避(w に逃がす)
d(j)→d(i)d(i) が上書きされる
w→d(j)退避した値を戻す

いきなり d(j)→d(i) とすると、元の d(i) が消えてしまいます——だから先に w へ退避する必要があるのです。

「コップの水を入れ替えるには、3つめのコップが要る」——それと同じ理屈です。退避用の変数を使う3段階が、値の交換の定石になります。

(オ)の判定 d(i)<d(j)「順序が逆なら入れ替える」という意味。降順に並べたいので、前のほうが小さければ交換 します。

d(i)=12とd(j)=20を退避変数wで交換し降順にする3ステップ
w=d(i)、d(i)=d(j)、d(j)=wの順で交換し、(b)は選択肢(2)です。
答え(a)の正解は (4)、(b)の正解は (2)です。交換の3手順(退避・上書き・書き戻し)——順序を間違えるとデータが壊れます

⚠️ よくある間違い
(1)の (カ) d(i)→d(j)向きが逆——これでは d(j) が消えてしまいます
矢印の向きを1つずつ確認してください。「→」は右へ代入——d(j)→d(i) なら「d(j) の値を d(i) へ入れる」 です。
実際に3つの箱を書いて、値の動きを追うのが確実。w に退避した値が最後に d(j) へ戻る——これで元の d(i) と d(j) が入れ替わります

並べ替えアルゴリズムの型

本問の方式は、隣どうしではなく総当たりで比べる形——選択ソートや単純交換法と呼ばれます。

方式やり方比較回数
単純交換法(バブルソート)隣どうしを比べて交換n(n−1)/2
選択ソート最大(最小)を選んで先頭と交換n(n−1)/2
クイックソート基準値で2組に分けて再帰★n log n(速い)

二重ループなら比較回数は n2 に比例——30件なら約450回です。データが増えると急激に時間がかかることになります。

だから大量のデータには、より速いアルゴリズムが使われます——クイックソートなら n log n1万件なら n2 が1億回、n log n なら約13万回——桁違いの差になります。

電験3種で問われるのは基本形——二重ループと値の交換が読めれば十分です。「流れ図が読める」ことが目的だからです。

⏱️ 本番での進め方
①(a) 最大値も合計も1つめで初期化。ループは2 から。
②(ウ) 最大値を探すので「大きいか」。不等号の向きに注意。
③(b) 交換は3手順:退避→上書き→書き戻し。
④ 矢印の向きを1つずつ確認する。逆だとデータが壊れる。

💡 覚え方
「最大値探しは1つめを仮の答えにして更新」——0 から始めてはいけないそして「交換には3つめの箱が要る」——退避→上書き→書き戻しの3手順です。

同一テーマ・同一アルゴリズムの問題が令和4年度下期 B問題18にあります(情報:最大値・平均値と並べ替えの流れ図)。セットで解いておくと確実です。

最大値と合計の初期化から30件の走査と出力までを示す手順表
空欄はd(1)→t、2,k,1、d(i)>s、d(i)→sで選択肢(4)です。

流れ図の記号を確認する

流れ図(フローチャート)は記号が決まっています——形を見れば何をする箱か分かるようになっています。

記号名前意味
長円端子開始・終了
長方形処理計算や代入
ひし形★判断YES/NO で分岐
六角形★ループ端繰り返しの開始と終了
平行四辺形入出力データの読み書き

本問の(イ)は六角形のループ端——「変数名、初期値、終値、増分」を書くのが決まりです。「2, k, 1」なら「i を2 からk まで1 ずつ」 という意味になります。

増分が1 なら省略されることもあるので、選択肢の書き方に合わせて読む必要があります。

初期値をどう決めるか

最大値の初期値に0 を使ってはいけない——データがすべて負なら、0 が最大値として残ってしまうからです。

求めるもの安全な初期値0 を使うと
合計0 でよい問題なし
最大値★1つめのデータ負のデータで誤る
最小値★1つめのデータ正のデータで誤る

「1つめを仮の答えにする」のが最も安全——どんな値が来ても正しく動きます本問の(ア)がまさにこの形です。

合計は0 から始めてよいのですが、本問は最大値と同じループで処理するため、そろえて1つめからにしています。だからループが2 から始まる——(ア)と(イ)は連動しているのです。

まとめ

(a)(ア)d(1)→t
(a)(イ)2,k,1
(a)(ウ)d(i)>s
(a)(エ)d(i)→s
(b)(オ)d(i)<d(j)
(b)(カ)d(j)→d(i)
(b)(キ)w→d(j)
答え(a)-(4),(b)-(2)

▼あわせて解きたい関連問題
・30件の使用電力量データの最大値・平均値算出と降順ソート(令和4年度下期):【機械】令和4年度下期B問題18
・n個の配列を降順に並べ替えるフローチャートと交換回数:【機械】令和2年度B問題18

📚 次に解くべき関連問題
【機械】令和4年度下期B問題18(情報34)
【機械】令和2年度B問題18(情報36)
【機械】令和4年度下期A問題13(情報39)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次