RGVscGhpCnByb2dyYW0gR3JhZGVTdGF0aXN0aWNzOwp1c2VzIG1hdGg7Cgpjb25zdAogICAgTUlOX1NUVURFTlRTID0gMTA7Cgp0eXBlCiAgICBURGF0YUFycmF5ID0gYXJyYXkgb2YgUmVhbDsKCnZhcgogICAgc2NvcmVzOiBURGF0YUFycmF5OwogICAgY291bnQsIGksIGosIHBhc3NDb3VudDogSW50ZWdlcjsKICAgIGlucHV0VmFsOiBSZWFsOwogICAgc3VtLCBtZWFuLCBtZWRpYW4sIG1pblNjb3JlLCBtYXhTY29yZSwgc3VtU3FEaWZmLCBzdGREZXY6IFJlYWw7CiAgICB0ZW1wOiBSZWFsOwoKYmVnaW4KICAgIGNvdW50IDo9IDA7CiAgICAvLyAxLiDmqJnmupblhaXlipvjgYvjgonngrnmlbDjgpLjgZnjgbnjgaboqq3jgb/ovrzjgoAKICAgIHdoaWxlIG5vdCBTZWVrRW9mIGRvCiAgICBiZWdpbgogICAgICAgIGlmIFJlYWRMaW5lKGlucHV0VmFsKSB0aGVuICAvLyDkuIDooYzjgZrjgaTjgIHjgb7jgZ/jga/jgrnjg5rjg7zjgrnljLrliIfjgorjgafoqq3jgb/ovrzjgb8KICAgICAgICBiZWdpbgogICAgICAgICAgICBjb3VudCA6PSBjb3VudCArIDE7CiAgICAgICAgICAgIFNldExlbmd0aChzY29yZXMsIGNvdW50KTsKICAgICAgICAgICAgc2NvcmVzW2NvdW50IC0gMV0gOj0gaW5wdXRWYWw7CiAgICAgICAgZW5kOwogICAgZW5kOwoKICAgIC8vIOODkOODquODh+ODvOOCt+ODp+ODs++8mjEw5Lq65Lul5LiK44GE44KL44GL56K66KqNCiAgICBpZiBjb3VudCAmbHQ7IE1JTl9TVFVERU5UUyB0aGVuCiAgICBiZWdpbgogICAgICAgIHdyaXRlbG4oJ+OCqOODqeODvDog55Sf5b6S44Gu5pWw44GvMTDkurrku6XkuIrjgavjgZnjgovlv4XopoHjgYzjgYLjgorjgb7jgZnjgILvvIjnj77lnKg6ICcsIGNvdW50LCAn5Lq677yJJyk7CiAgICAgICAgRXhpdDsKICAgIGVuZDsKCiAgICAvLyAyLiDntbHoqIjjga7oqIjnrpfvvIjlkIjoqIjjgIHmnIDpq5jngrnjgIHmnIDkvY7ngrnjgIHlkIjmoLzogIXmlbDvvIkKICAgIHN1bSA6PSAwOwogICAgbWluU2NvcmUgOj0gc2NvcmVzWzBdOwogICAgbWF4U2NvcmUgOj0gc2NvcmVzWzBdOwogICAgcGFzc0NvdW50IDo9IDA7CgogICAgZm9yIGkgOj0gMCB0byBjb3VudCAtIDEgZG8KICAgIGJlZ2luCiAgICAgICAgc3VtIDo9IHN1bSArIHNjb3Jlc1tpXTsKICAgICAgICBpZiBzY29yZXNbaV0gJmd0OyBtYXhTY29yZSB0aGVuIG1heFNjb3JlIDo9IHNjb3Jlc1tpXTsKICAgICAgICBpZiBzY29yZXNbaV0gJmx0OyBtaW5TY29yZSB0aGVuIG1pblNjb3JlIDo9IHNjb3Jlc1tpXTsKICAgICAgICBpZiBzY29yZXNbaV0gJmd0Oz0gNjAuMCB0aGVuIHBhc3NDb3VudCA6PSBwYXNzQ291bnQgKyAxOwogICAgZW5kOwoKICAgIG1lYW4gOj0gc3VtIC8gY291bnQ7CgogICAgLy8gMy4g5Lit5aSu5YCk6KiI566X44Gu44Gf44KB44Gr44K944O844OI77yI44OQ44OW44Or44K944O844OI77yJCiAgICBmb3IgaSA6PSAwIHRvIGNvdW50IC0gMiBkbwogICAgYmVnaW4KICAgICAgICBmb3IgaiA6PSAwIHRvIGNvdW50IC0gMiAtIGkgZG8KICAgICAgICBiZWdpbgogICAgICAgICAgICBpZiBzY29yZXNbal0gJmd0OyBzY29yZXNbaiArIDFdIHRoZW4KICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgIHRlbXAgOj0gc2NvcmVzW2pdOwogICAgICAgICAgICAgICAgc2NvcmVzW2pdIDo9IHNjb3Jlc1tqICsgMV07CiAgICAgICAgICAgICAgICBzY29yZXNbaiArIDFdIDo9IHRlbXA7CiAgICAgICAgICAgIGVuZDsKICAgICAgICBlbmQ7CiAgICBlbmQ7CgogICAgLy8g5Lit5aSu5YCk44Gu5rG65a6aCiAgICBpZiAoY291bnQgbW9kIDIpID0gMSB0aGVuCiAgICAgICAgbWVkaWFuIDo9IHNjb3Jlc1tjb3VudCBkaXYgMl0KICAgIGVsc2UKICAgICAgICBtZWRpYW4gOj0gKHNjb3Jlc1soY291bnQgZGl2IDIpIC0gMV0gKyBzY29yZXNbY291bnQgZGl2IDJdKSAvIDIuMDsKCiAgICAvLyA0LiDmqJnmupblgY/lt67jga7oqIjnrpcKICAgIHN1bVNxRGlmZiA6PSAwOwogICAgZm9yIGkgOj0gMCB0byBjb3VudCAtIDEgZG8KICAgIGJlZ2luCiAgICAgICAgc3VtU3FEaWZmIDo9IHN1bVNxRGlmZiArIHNxcihzY29yZXNbaV0gLSBtZWFuKTsKICAgIGVuZDsKICAgIC8vIOavjeaomea6luWBj+W3ru+8iOOBvuOBn+OBr+S4jeWBj+aomea6luWBj+W3ruOBq+OBmeOCi+WgtOWQiOOBryBjb3VudCAtIDEg44Gn5Ymy44KL77yJCiAgICBzdGREZXYgOj0gc3FydChzdW1TcURpZmYgLyBjb3VudCk7CgogICAgLy8gNS4g57WQ5p6c44Gu5Ye65YqbCiAgICB3cml0ZWxuKCctLS0g5oiQ57i+6ZuG6KiI57WQ5p6cIC0tLScpOwogICAgd3JpdGVsbign5a2m55Sf5pWwICAgIDogJywgY291bnQsICcg5Lq6Jyk7CiAgICB3cml0ZWxuKCflubPlnYfngrkgICAgOiAnLCBtZWFuOjA6Mik7CiAgICB3cml0ZWxuKCfkuK3lpK7lgKQgICAgOiAnLCBtZWRpYW46MDoyKTsKICAgIHdyaXRlbG4oJ+acgOmrmOeCuSAgICA6ICcsIG1heFNjb3JlOjA6Mik7CiAgICB3cml0ZWxuKCfmnIDkvY7ngrkgICAgOiAnLCBtaW5TY29yZTowOjIpOwogICAgd3JpdGVsbign5qiZ5rqW5YGP5beuICA6ICcsIHN0ZERldjowOjIpOwogICAgd3JpdGVsbign5ZCI5qC86ICF5pWwICA6ICcsIHBhc3NDb3VudCwgJyDkurogKDYw54K55Lul5LiKKScpOwogICAgd3JpdGVsbjsKICAgIAogICAgd3JpdGVsbignLS0tIOWQhOiHquOBruWBj+W3ruWApCAtLS0nKTsKICAgIGZvciBpIDo9IDAgdG8gY291bnQgLSAxIGRvCiAgICBiZWdpbgogICAgICAgIC8vIOaomea6luWBj+W3ruOBjDDvvIjlhajlk6HlkIzjgZjngrnmlbDvvInjga7loLTlkIjjga7ogIPmha4KICAgICAgICBpZiBzdGREZXYgJmd0OyAwIHRoZW4KICAgICAgICAgICAgdGVtcCA6PSA1MC4wICsgMTAuMCAqIChzY29yZXNbaV0gLSBtZWFuKSAvIHN0ZERldgogICAgICAgIGVsc2UKICAgICAgICAgICAgdGVtcCA6PSA1MC4wOwogICAgICAgIAogICAgICAgIHdyaXRlbG4oJ+W+l+eCuTogJywgc2NvcmVzW2ldOjY6MiwgJyAtJmd0OyDlgY/lt67lgKQ6ICcsIHRlbXA6MDoyKTsKICAgIGVuZDsKZW5kLg==
Delphi
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. 標準入力から点数をすべて読み込む
while not SeekEof do
begin
if ReadLine(inputVal) then // 一行ずつ、またはスペース区切りで読み込み
begin
count := count + 1;
SetLength(scores, count);
scores[count - 1] := inputVal;
end;
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;
// 母標準偏差(または不偏標準偏差にする場合は count - 1 で割る)
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
// 標準偏差が0(全員同じ点数)の場合の考慮
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.