program GradeStatistics;
uses math;
const
MIN_STUDENTS = 10;
type
TDataArray = array of Real;
var
scores: TDataArray;
count, i, j, passCount: Integer;
inputVal: Real;
sum, mean, median, minScore, maxScore, sumSqDiff, stdDev: Real;
temp: Real;
begin
count := 0;
// 1. 標準入力(stdin)から点数をすべて読み込む
while not SeekEof do
begin
read(inputVal); // 【修正】ReadLine から read に変更
count := count + 1;
SetLength(scores, count);
scores[count - 1] := inputVal;
end;
// バリデーション:10人以上いるか確認
if count < MIN_STUDENTS then
begin
writeln('エラー: 生徒の数は10人以上にする必要があります。(現在: ', count, '人)');
Exit;
end;
// 2. 統計の計算(合計、最高点、最低点、合格者数)
sum := 0;
minScore := scores[0];
maxScore := scores[0];
passCount := 0;
for i := 0 to count - 1 do
begin
sum := sum + scores[i];
if scores[i] > maxScore then maxScore := scores[i];
if scores[i] < minScore then minScore := scores[i];
if scores[i] >= 60.0 then passCount := passCount + 1;
end;
mean := sum / count;
// 3. 中央値計算のためにソート(バブルソート)
for i := 0 to count - 2 do
begin
for j := 0 to count - 2 - i do
begin
if scores[j] > scores[j + 1] then
begin
temp := scores[j];
scores[j] := scores[j + 1];
scores[j + 1] := temp;
end;
end;
end;
// 中央値の決定
if (count mod 2) = 1 then
median := scores[count div 2]
else
median := (scores[(count div 2) - 1] + scores[count div 2]) / 2.0;
// 4. 標準偏差の計算
sumSqDiff := 0;
for i := 0 to count - 1 do
begin
sumSqDiff := sumSqDiff + sqr(scores[i] - mean);
end;
stdDev := sqrt(sumSqDiff / count);
// 5. 結果の出力
writeln('--- 成績集計結果 ---');
writeln('学生数 : ', count, ' 人');
writeln('平均点 : ', mean:0:2);
writeln('中央値 : ', median:0:2);
writeln('最高点 : ', maxScore:0:2);
writeln('最低点 : ', minScore:0:2);
writeln('標準偏差 : ', stdDev:0:2);
writeln('合格者数 : ', passCount, ' 人 (60点以上)');
writeln;
writeln('--- 各自の偏差値 ---');
for i := 0 to count - 1 do
begin
if stdDev > 0 then
temp := 50.0 + 10.0 * (scores[i] - mean) / stdDev
else
temp := 50.0;
writeln('得点: ', scores[i]:6:2, ' -> 偏差値: ', temp:0:2);
end;
end.
cHJvZ3JhbSBHcmFkZVN0YXRpc3RpY3M7CnVzZXMgbWF0aDsKCmNvbnN0CiAgICBNSU5fU1RVREVOVFMgPSAxMDsKCnR5cGUKICAgIFREYXRhQXJyYXkgPSBhcnJheSBvZiBSZWFsOwoKdmFyCiAgICBzY29yZXM6IFREYXRhQXJyYXk7CiAgICBjb3VudCwgaSwgaiwgcGFzc0NvdW50OiBJbnRlZ2VyOwogICAgaW5wdXRWYWw6IFJlYWw7CiAgICBzdW0sIG1lYW4sIG1lZGlhbiwgbWluU2NvcmUsIG1heFNjb3JlLCBzdW1TcURpZmYsIHN0ZERldjogUmVhbDsKICAgIHRlbXA6IFJlYWw7CgpiZWdpbgogICAgY291bnQgOj0gMDsKICAgIAogICAgLy8gMS4g5qiZ5rqW5YWl5Yqb77yIc3RkaW7vvInjgYvjgonngrnmlbDjgpLjgZnjgbnjgaboqq3jgb/ovrzjgoAKICAgIHdoaWxlIG5vdCBTZWVrRW9mIGRvCiAgICBiZWdpbgogICAgICAgIHJlYWQoaW5wdXRWYWwpOyAvLyDjgJDkv67mraPjgJFSZWFkTGluZSDjgYvjgokgcmVhZCDjgavlpInmm7QKICAgICAgICBjb3VudCA6PSBjb3VudCArIDE7CiAgICAgICAgU2V0TGVuZ3RoKHNjb3JlcywgY291bnQpOwogICAgICAgIHNjb3Jlc1tjb3VudCAtIDFdIDo9IGlucHV0VmFsOwogICAgZW5kOwoKICAgIC8vIOODkOODquODh+ODvOOCt+ODp+ODs++8mjEw5Lq65Lul5LiK44GE44KL44GL56K66KqNCiAgICBpZiBjb3VudCA8IE1JTl9TVFVERU5UUyB0aGVuCiAgICBiZWdpbgogICAgICAgIHdyaXRlbG4oJ+OCqOODqeODvDog55Sf5b6S44Gu5pWw44GvMTDkurrku6XkuIrjgavjgZnjgovlv4XopoHjgYzjgYLjgorjgb7jgZnjgILvvIjnj77lnKg6ICcsIGNvdW50LCAn5Lq677yJJyk7CiAgICAgICAgRXhpdDsKICAgIGVuZDsKCiAgICAvLyAyLiDntbHoqIjjga7oqIjnrpfvvIjlkIjoqIjjgIHmnIDpq5jngrnjgIHmnIDkvY7ngrnjgIHlkIjmoLzogIXmlbDvvIkKICAgIHN1bSA6PSAwOwogICAgbWluU2NvcmUgOj0gc2NvcmVzWzBdOwogICAgbWF4U2NvcmUgOj0gc2NvcmVzWzBdOwogICAgcGFzc0NvdW50IDo9IDA7CgogICAgZm9yIGkgOj0gMCB0byBjb3VudCAtIDEgZG8KICAgIGJlZ2luCiAgICAgICAgc3VtIDo9IHN1bSArIHNjb3Jlc1tpXTsKICAgICAgICBpZiBzY29yZXNbaV0gPiBtYXhTY29yZSB0aGVuIG1heFNjb3JlIDo9IHNjb3Jlc1tpXTsKICAgICAgICBpZiBzY29yZXNbaV0gPCBtaW5TY29yZSB0aGVuIG1pblNjb3JlIDo9IHNjb3Jlc1tpXTsKICAgICAgICBpZiBzY29yZXNbaV0gPj0gNjAuMCB0aGVuIHBhc3NDb3VudCA6PSBwYXNzQ291bnQgKyAxOwogICAgZW5kOwoKICAgIG1lYW4gOj0gc3VtIC8gY291bnQ7CgogICAgLy8gMy4g5Lit5aSu5YCk6KiI566X44Gu44Gf44KB44Gr44K944O844OI77yI44OQ44OW44Or44K944O844OI77yJCiAgICBmb3IgaSA6PSAwIHRvIGNvdW50IC0gMiBkbwogICAgYmVnaW4KICAgICAgICBmb3IgaiA6PSAwIHRvIGNvdW50IC0gMiAtIGkgZG8KICAgICAgICBiZWdpbgogICAgICAgICAgICBpZiBzY29yZXNbal0gPiBzY29yZXNbaiArIDFdIHRoZW4KICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgIHRlbXAgOj0gc2NvcmVzW2pdOwogICAgICAgICAgICAgICAgc2NvcmVzW2pdIDo9IHNjb3Jlc1tqICsgMV07CiAgICAgICAgICAgICAgICBzY29yZXNbaiArIDFdIDo9IHRlbXA7CiAgICAgICAgICAgIGVuZDsKICAgICAgICBlbmQ7CiAgICBlbmQ7CgogICAgLy8g5Lit5aSu5YCk44Gu5rG65a6aCiAgICBpZiAoY291bnQgbW9kIDIpID0gMSB0aGVuCiAgICAgICAgbWVkaWFuIDo9IHNjb3Jlc1tjb3VudCBkaXYgMl0KICAgIGVsc2UKICAgICAgICBtZWRpYW4gOj0gKHNjb3Jlc1soY291bnQgZGl2IDIpIC0gMV0gKyBzY29yZXNbY291bnQgZGl2IDJdKSAvIDIuMDsKCiAgICAvLyA0LiDmqJnmupblgY/lt67jga7oqIjnrpcKICAgIHN1bVNxRGlmZiA6PSAwOwogICAgZm9yIGkgOj0gMCB0byBjb3VudCAtIDEgZG8KICAgIGJlZ2luCiAgICAgICAgc3VtU3FEaWZmIDo9IHN1bVNxRGlmZiArIHNxcihzY29yZXNbaV0gLSBtZWFuKTsKICAgIGVuZDsKICAgIHN0ZERldiA6PSBzcXJ0KHN1bVNxRGlmZiAvIGNvdW50KTsKCiAgICAvLyA1LiDntZDmnpzjga7lh7rlipsKICAgIHdyaXRlbG4oJy0tLSDmiJDnuL7pm4boqIjntZDmnpwgLS0tJyk7CiAgICB3cml0ZWxuKCflrabnlJ/mlbAgICAgOiAnLCBjb3VudCwgJyDkuronKTsKICAgIHdyaXRlbG4oJ+W5s+Wdh+eCuSAgICA6ICcsIG1lYW46MDoyKTsKICAgIHdyaXRlbG4oJ+S4reWkruWApCAgICA6ICcsIG1lZGlhbjowOjIpOwogICAgd3JpdGVsbign5pyA6auY54K5ICAgIDogJywgbWF4U2NvcmU6MDoyKTsKICAgIHdyaXRlbG4oJ+acgOS9jueCuSAgICA6ICcsIG1pblNjb3JlOjA6Mik7CiAgICB3cml0ZWxuKCfmqJnmupblgY/lt64gIDogJywgc3RkRGV2OjA6Mik7CiAgICB3cml0ZWxuKCflkIjmoLzogIXmlbAgIDogJywgcGFzc0NvdW50LCAnIOS6uiAoNjDngrnku6XkuIopJyk7CiAgICB3cml0ZWxuOwogICAgCiAgICB3cml0ZWxuKCctLS0g5ZCE6Ieq44Gu5YGP5beu5YCkIC0tLScpOwogICAgZm9yIGkgOj0gMCB0byBjb3VudCAtIDEgZG8KICAgIGJlZ2luCiAgICAgICAgaWYgc3RkRGV2ID4gMCB0aGVuCiAgICAgICAgICAgIHRlbXAgOj0gNTAuMCArIDEwLjAgKiAoc2NvcmVzW2ldIC0gbWVhbikgLyBzdGREZXYKICAgICAgICBlbHNlCiAgICAgICAgICAgIHRlbXAgOj0gNTAuMDsKICAgICAgICAKICAgICAgICB3cml0ZWxuKCflvpfngrk6ICcsIHNjb3Jlc1tpXTo2OjIsICcgLT4g5YGP5beu5YCkOiAnLCB0ZW1wOjA6Mik7CiAgICBlbmQ7CmVuZC4=