数学とクイズでくつろいで数学の部屋どこよりも遅い!センター試験数学 解説情報関係基礎 第3問 解説

どこよりも遅い!情報関係基礎 第3問 解説

最終更新日2011年6月1日

第3問

 生徒50人のクラスで、試験の点数が表1に番号順に整理されている。

表1(配列 Tensu)
番号454647484950
点数6092759575929060758590

この表から、点数を集計し、順位表を表示する手続きを考える。このデータは、あらかじめ配列 Tensu に格納され Tensu[i] に i 番の生徒の点数が格納されている。

問1.
 配列 Tensu のデータから、点数の平均点、最高点、最低点、点数ごとの人数を求める処理を考える。このために以下の変数および配列を用意する。

これらを使い平均点、最高点、最低点、点数ごとの人数を求める手続きを考えると、以下の通りになる。

(01)sowa ← 0, saiko ← 0, saitei ← 100
(02)配列 TNin のすべての要素を 0 にする。
(03)bango を 1 から 50 まで 1 ずつ増やしながら
(04) | s ← Tensu[bango]( s は bango 番の生徒の点数)
(05) | sowa ← sowa+s(sowa に点数 s を加える)
(06) | もし s<saiko ならば(s がこれまでの最高点より
(07) | | saiko ← s 高ければ saiko を s に代える)
(08) | を実行する。
(09) | もし s>saitei ならば(s がこれまでの最低点より
(10) | | saiko ← s 低ければ saitei を s に代える)
(11) | を実行する。
(12) | TNin[s] を 1 増やす。(点数 s の人数を 1 増やす)
(13)を繰り返す。
(14)heikin ← sowa / 50
(15)hekin と saiko と saitei を表示する。

問1の解答
空欄
解答b699aa6

(ア、イの解答は順序を問わない)


問2.
 配列 TNin から点数の高い順に点数のデータを並べ替える処理を考える。

表2(配列 TNin)
点数6085 90919293949596100
人数

表3(配列 GNin)
点数6085 90919293949596100
人数5050

0 ≦ i ≦ 99 であるとき

i 点以上の人数= (i+1)点以上の人数+ i 点の人数

が成り立つため、配列 GNin について次の式が成り立つ。

  GNin[i] = GNin[i+1] + TNin[i] (0 ≦ i ≦ 99)
 GNin[100] = TNin[100]

以上から GNin に人数を格納する手続きは以下の通りになる。

(16)GNin[100] ← TNin[100]
(17)ten を 99 から 0 まで 1 ずつ減らしながら
(18) | GNin[ten] ← GNin[ten+1] + TNin[ten]
(19)を繰り返す。

 次に点数の高い順に点数と生徒の番号を並べ替えていく処理を考える。このために以下の配列を使う。 複数の生徒が同じ点数を取ることもあるため、これまでの配列の格納結果を例として Tenjun, Tenban への格納を説明していく。  この手順に従った場合、s 点の生徒が n 人、s 点以上の生徒が p 人いる場合、Tenjun[p], Tenjun[p-1], … と順に n 個の要素に点数 s を格納していき、最後に Tenjun[p-n+1] に点数 s が格納される。

 このとき p = GNin[s] となり、最初の s 点の生徒に対しては Tenjun[GNin[s]], Tenban[GNin[s]] に点数と生徒の番号を格納することができるが、次の s 点の生徒に対しては格納すべき添字が GNin[s]-1 となる。
 そこで Tenjun[GNin[s]], Tenban[GNin[s]] へ点数、番号を格納したあとに GNin[s] を 1 減らす手続きを行えば、次の s 点の生徒に対しても格納する添字が GNin[s] となり、手続きが簡素化できる。このことから以下の手続きを考えることができる。

(20)bango を 50 から 1 まで 1 ずつ減らしながら
(21) | s ← Tensu[bango]
(22) | Tenjun[GNin[s]] ← s
(23) | Tenban[GNin[s]] ← bango
(24) | GNin[s] を 1 減らす。
(25)を繰り返す。

問2の解答
空欄
解答4541771


 問3.
  点数順に並べ替えた結果から、順位表を表示する処理を考える。同点の場合は同じ順位とし、同点者の人数だけ以降の順位を繰り下げる。

表4
点数の順位表
順位点数番号
95 4
92 2
9245
9046
9050
8549
4960 1
496047

そのために以下の変数を使う。 順位は以下のように決めることができる。  このことから一つ前の順位と点数が違う生徒は順位の変更がない。よって以下の手続きを作ることができる。

(26)juni ← 1
(27)juni と Tenjun[1] と Tenban[1] を表示する。
(28)i を 2 から 50 まで 1 ずつ増やしながら(i は同点を考えない順位)
(29) | もし Tenjun[i]Tenjun[i-1] ならば(順位を変更するかの判定)
(30) | | juni ← i
(31) | を実行する。
(32) | juni と Tenjun[i] と Tenban[i] を表示する。
(33)を繰り返す。

問2の解答
空欄
解答100


数学とクイズでくつろいで数学の部屋どこよりも遅い!センター試験数学 解説情報関係基礎 第3問 解説