Contents
【問題】
【難易度】★★★☆☆(普通)
\( \ 30 \ \)件分の使用電力量のデータ処理について,次の(a)及び(b)に答えよ。
(a) 図1は,\( \ 30 \ \)件分の使用電力量の中から最大値と\( \ 30 \ \)件分の平均値を出力する一つのプログラムの流れ図を示す。図1中の(ア)~(エ)に当てはまる処理として,正しいものを組み合わせたのは次のうちどれか。
\[
\begin{array}{ccccc}
& (ア) & (イ) & (ウ) & (エ) \\
\hline
(1) & \mathrm {t}←\mathrm {d}\left[ 1 \right] & 0 & \mathrm {d}\left[ \mathrm {i} \right] < \mathrm {s} & \mathrm {s}←\mathrm {d}\left[ \mathrm {i} \right] \\
\hline
(2) & \mathrm {t}←0 & 2 & \mathrm {d}\left[ \mathrm {i} \right] > \mathrm {s} & \mathrm {s}←\mathrm {d}\left[ \mathrm {i} \right] \\
\hline
(3) & \mathrm {t}←\mathrm {d}\left[ 1 \right] & 2 & \mathrm {d}\left[ \mathrm {i} \right] < \mathrm {s} & \mathrm {d}\left[ \mathrm {i} \right] ←\mathrm {s} \\
\hline
(4) & \mathrm {t}←\mathrm {d}\left[ 1 \right] & 2 & \mathrm {d}\left[ \mathrm {i} \right] > \mathrm {s} & \mathrm {s}←\mathrm {d}\left[ \mathrm {i} \right] \\
\hline
(5) & \mathrm {t}←0 & 0 & \mathrm {d}\left[ \mathrm {i} \right] < \mathrm {s} & \mathrm {d}\left[ \mathrm {i} \right] ←\mathrm {s} \\
\hline
\end{array}
\]
(b) 図2は,\( \ 30 \ \)件の使用電力量を大きい順(降順)に並べ替える一つのプログラムの流れ図を示す。図2中の(オ)~(キ)に当てはまる処理として,正しいものを組み合わせたのは次のうちどれか。ただし,\( \ \mathrm {w} \ \)は一時的な退避用の変数と考えよ。
\[
\begin{array}{cccc}
& (オ) & (カ) & (キ) \\
\hline
(1) & \mathrm {d}\left[ \mathrm {i} \right] <\mathrm {d}\left[ \mathrm {j} \right] & \mathrm {d}\left[ \mathrm {j} \right] ←\mathrm {d}\left[ \mathrm {i} \right] & \mathrm {d}\left[ \mathrm {j} \right] ←\mathrm {w} \\
\hline
(2) & \mathrm {d}\left[ \mathrm {i} \right] <\mathrm {d}\left[ \mathrm {j} \right] & \mathrm {d}\left[ \mathrm {i} \right] ←\mathrm {d}\left[ \mathrm {j} \right] & \mathrm {d}\left[ \mathrm {j} \right] ←\mathrm {w} \\
\hline
(3) & \mathrm {d}\left[ \mathrm {i} \right] <\mathrm {d}\left[ \mathrm {j} \right] & \mathrm {d}\left[ \mathrm {j} \right] ←\mathrm {d}\left[ \mathrm {i} \right] & \mathrm {d}\left[ \mathrm {i} \right] ←\mathrm {w} \\
\hline
(4) & \mathrm {d}\left[ \mathrm {i} \right] >\mathrm {d}\left[ \mathrm {j} \right] & \mathrm {d}\left[ \mathrm {i} \right] ←\mathrm {d}\left[ \mathrm {j} \right] & \mathrm {d}\left[ \mathrm {j} \right] ←\mathrm {w} \\
\hline
(5) & \mathrm {d}\left[ \mathrm {i} \right] >\mathrm {d}\left[ \mathrm {j} \right] & \mathrm {d}\left[ \mathrm {j} \right] ←\mathrm {d}\left[ \mathrm {i} \right] & \mathrm {d}\left[ \mathrm {i} \right] ←\mathrm {w} \\
\hline
\end{array}
\]
【ワンポイント解説】
電力使用量のデータ処理アルゴリズムに関する問題です。
ゆっくりと時間をかければアルゴリズムを読み解いていくことはできますが,試験本番の緊張感の中だと大変焦ることになるので,相当な時間が余った場合か問17がどうしてもわからない場合を除き,選択しない方が無難かなと思います。
本問は平成20年問18からの再出題となります。
1.主なフローチャート記号
①開始・終了
プログラムの開始と終了を表します。最初と最後に必ずつけます。
②入力・出力
データの入出力を行う記号です。
③処理
データの作業・処理を行います。
④判断
選択肢が分かれる場合に分岐させるための記号となります。
⑤ループ
ループ開始と終了を表します。終了条件が成立するまで,繰り返します。
【解答】
(a)解答:(4)
(ア)
「合計を求める」のアルゴリズムを見ていくと,\( \ \mathrm {t}←\mathrm {t}+\mathrm {d}\left[ \mathrm {i} \right] \ \)となっており,これは値\( \ \mathrm {d}\left[ \mathrm {i} \right] \ \)を加えていくアルゴリズムで,その後の\( \ \mathrm {a} ←\mathrm {t} / \mathrm {k} \ \)で平均値\( \ \mathrm {a} \ \)を求めているため,\( \ \mathrm {t} \ \)は合計値であることがわかります。
したがって,(ア)の空欄に入れるべき\( \ \mathrm {t} \ \)は,一つ目のデータである\( \ \mathrm {t}←\mathrm {d}\left[ 1 \right] \ \)となります。
(イ)
「合計を求める」の処理の中身をみると,\( \ \mathrm {t}←\mathrm {t}+\mathrm {d}\left[ \mathrm {i} \right] \ \)となっており,(ア)より最初\( \ \mathrm {t}←\mathrm {d}\left[ 1 \right] \ \)を入れ,一番初めは\( \ \mathrm {d}\left[ \mathrm {1} \right] +\mathrm {d}\left[ \mathrm {2} \right] \ \)の処理をすれば良いので,(イ)は\( \ 2 \ \)となります。
(ウ)
(ウ)の中身をみると\( \ \mathrm {YES} \ \)の場合のみ最大値\( \ \mathrm {s} \ \)の処理をし,\( \ \mathrm {NO} \ \)の場合は処理をしないという内容なので,\( \ \mathrm {YES} \ \)の場合のみ最大値を入れ替えるという内容が読み取れます。したがって,新しい入力\( \ \mathrm {d}\left[ \mathrm {i} \right] \ \)がこれまでの最大値\( \ \mathrm {s} \ \)より大きいとき最大値を入れ替える必要があるので,\( \ \mathrm {d}\left[ \mathrm {i} \right] > \mathrm {s} \ \)となります。
(エ)
(エ)は最大値を入れ替える処理となるので,\( \ \mathrm {s}←\mathrm {d}\left[ \mathrm {i} \right] \ \)となります。
(b)解答:(2)
(オ)
(オ)の中身をみると\( \ \mathrm {YES} \ \)の場合に入れ替えの処理を行い,\( \ \mathrm {NO} \ \)の場合は処理をしないという内容が読み取れるので,\( \ \mathrm {d}\left[ \mathrm {i} \right] \ \)と\( \ \mathrm {d}\left[ \mathrm {j} \right] \ \)を比較し\( \ \mathrm {d}\left[ \mathrm {j} \right] \ \)の方が大きい場合に入れ替えを行う必要があるので,\( \ \mathrm {d}\left[ \mathrm {i} \right] <\mathrm {d}\left[ \mathrm {j} \right] \ \)となります。
(カ)
(カ)は一旦\( \ \mathrm {w} ←\mathrm {d}\left[ \mathrm {i} \right] \ \)に移した後,大きい値である\( \ \mathrm {d}\left[ \mathrm {j} \right] \ \)を前に持っていく処理になるので,\( \ \mathrm {d}\left[ \mathrm {i} \right] ←\mathrm {d}\left[ \mathrm {j} \right] \ \)となります。
(キ)
(キ)は一時的に\( \ \mathrm {w} \ \)としていた小さい値を\( \ \mathrm {d}\left[ \mathrm {j} \right] \ \)にする処理となるので,\( \ \mathrm {d}\left[ \mathrm {j} \right] ←\mathrm {w} \ \)となります。