program SeisekiSyukei15Unbiased;
const
MAX_STUDENTS = 15;
type
IntArray = array[1..MAX_STUDENTS] of integer;
var
scores, sortedScores: IntArray;
i, gokakuCount, totalSum: integer;
heikin, tyuoti, saikou, saitou, hyojunHensa: real;
procedure BubbleSort(var arr: IntArray; n: integer);
var
i, j, temp: integer;
begin
for i := 1 to n - 1 do
for j := 1 to n - i do
if arr[j] > arr[j+1] then
begin
temp := arr[j];
arr[j] := arr[j+1];
arr[j+1] := temp;
end;
end;
function CalculateSum(arr: IntArray; n: integer): integer;
var
i, total: integer;
begin
total := 0;
for i := 1 to n do
total := total + arr[i];
CalculateSum := total;
end;
function FindMax(arr: IntArray; n: integer): integer;
var
i, m: integer;
begin
m := arr[1];
for i := 2 to n do
if arr[i] > m then m := arr[i];
FindMax := m;
end;
function FindMin(arr: IntArray; n: integer): integer;
var
i, m: integer;
begin
m := arr[1];
for i := 2 to n do
if arr[i] < m then m := arr[i];
FindMin := m;
end;
function CountGokaku(arr: IntArray; n: integer): integer;
var
i, count: integer;
begin
count := 0;
for i := 1 to n do
if arr[i] >= 60 then
count := count + 1;
CountGokaku := count;
end;
// 【修正箇所】分母を n - 1 (14) にしてExcel等の統計関数と完全に一致させる標準偏差関数
function CalculateStdDev(arr: IntArray; n: integer; avg: real): real;
var
i: integer;
sumOfSquares, diff: real;
begin
sumOfSquares := 0.0;
for i := 1 to n do
begin
diff := arr[i] - avg;
sumOfSquares := sumOfSquares + (diff * diff);
end;
// ここを n - 1 に変更しています
CalculateStdDev := sqrt(sumOfSquares / (n - 1));
end;
procedure PrintHensati(arr: IntArray; n: integer; avg, stdDev: real);
var
i: integer;
h: real;
begin
writeln('--- 各自の偏差値(入力順) ---');
for i := 1 to n do
begin
if stdDev = 0 then
h := 50.0
else
h := 50.0 + 10.0 * (arr[i] - avg) / stdDev;
writeln('学生 ', i, ': 点数 = ', arr[i], ' -> 偏差値 = ', h:0:2);
end;
end;
begin
for i := 1 to MAX_STUDENTS do
begin
readln(scores[i]);
sortedScores[i] := scores[i];
end;
totalSum := CalculateSum(scores, MAX_STUDENTS);
heikin := totalSum / MAX_STUDENTS;
saikou := FindMax(scores, MAX_STUDENTS);
saitou := FindMin(scores, MAX_STUDENTS);
gokakuCount := CountGokaku(scores, MAX_STUDENTS);
hyojunHensa := CalculateStdDev(scores, MAX_STUDENTS, heikin);
BubbleSort(sortedScores, MAX_STUDENTS);
tyuoti := sortedScores[8];
writeln('件数=', MAX_STUDENTS);
writeln('平均=', heikin:0:2);
writeln('中央値=', tyuoti:0:2);
writeln('最高点=', saikou:0:2);
writeln('最低点=', saitou:0:2);
writeln('標準偏差=', hyojunHensa:0:2);
writeln('合格者数=', gokakuCount);
writeln;
PrintHensati(scores, MAX_STUDENTS, heikin, hyojunHensa);
end.
cHJvZ3JhbSBTZWlzZWtpU3l1a2VpMTVVbmJpYXNlZDsKCmNvbnN0CiAgTUFYX1NUVURFTlRTID0gMTU7Cgp0eXBlCiAgSW50QXJyYXkgPSBhcnJheVsxLi5NQVhfU1RVREVOVFNdIG9mIGludGVnZXI7Cgp2YXIKICBzY29yZXMsIHNvcnRlZFNjb3JlczogSW50QXJyYXk7CiAgaSwgZ29rYWt1Q291bnQsIHRvdGFsU3VtOiBpbnRlZ2VyOwogIGhlaWtpbiwgdHl1b3RpLCBzYWlrb3UsIHNhaXRvdSwgaHlvanVuSGVuc2E6IHJlYWw7Cgpwcm9jZWR1cmUgQnViYmxlU29ydCh2YXIgYXJyOiBJbnRBcnJheTsgbjogaW50ZWdlcik7CnZhcgogIGksIGosIHRlbXA6IGludGVnZXI7CmJlZ2luCiAgZm9yIGkgOj0gMSB0byBuIC0gMSBkbwogICAgZm9yIGogOj0gMSB0byBuIC0gaSBkbwogICAgICBpZiBhcnJbal0gPiBhcnJbaisxXSB0aGVuCiAgICAgIGJlZ2luCiAgICAgICAgdGVtcCA6PSBhcnJbal07CiAgICAgICAgYXJyW2pdIDo9IGFycltqKzFdOwogICAgICAgIGFycltqKzFdIDo9IHRlbXA7CiAgICAgIGVuZDsKZW5kOwoKZnVuY3Rpb24gQ2FsY3VsYXRlU3VtKGFycjogSW50QXJyYXk7IG46IGludGVnZXIpOiBpbnRlZ2VyOwp2YXIKICBpLCB0b3RhbDogaW50ZWdlcjsKYmVnaW4KICB0b3RhbCA6PSAwOwogIGZvciBpIDo9IDEgdG8gbiBkbwogICAgdG90YWwgOj0gdG90YWwgKyBhcnJbaV07CiAgQ2FsY3VsYXRlU3VtIDo9IHRvdGFsOwplbmQ7CgpmdW5jdGlvbiBGaW5kTWF4KGFycjogSW50QXJyYXk7IG46IGludGVnZXIpOiBpbnRlZ2VyOwp2YXIKICBpLCBtOiBpbnRlZ2VyOwpiZWdpbgogIG0gOj0gYXJyWzFdOwogIGZvciBpIDo9IDIgdG8gbiBkbwogICAgaWYgYXJyW2ldID4gbSB0aGVuIG0gOj0gYXJyW2ldOwogIEZpbmRNYXggOj0gbTsKZW5kOwoKZnVuY3Rpb24gRmluZE1pbihhcnI6IEludEFycmF5OyBuOiBpbnRlZ2VyKTogaW50ZWdlcjsKdmFyCiAgaSwgbTogaW50ZWdlcjsKYmVnaW4KICBtIDo9IGFyclsxXTsKICBmb3IgaSA6PSAyIHRvIG4gZG8KICAgIGlmIGFycltpXSA8IG0gdGhlbiBtIDo9IGFycltpXTsKICBGaW5kTWluIDo9IG07CmVuZDsKCmZ1bmN0aW9uIENvdW50R29rYWt1KGFycjogSW50QXJyYXk7IG46IGludGVnZXIpOiBpbnRlZ2VyOwp2YXIKICBpLCBjb3VudDogaW50ZWdlcjsKYmVnaW4KICBjb3VudCA6PSAwOwogIGZvciBpIDo9IDEgdG8gbiBkbwogICAgaWYgYXJyW2ldID49IDYwIHRoZW4KICAgICAgY291bnQgOj0gY291bnQgKyAxOwogIENvdW50R29rYWt1IDo9IGNvdW50OwplbmQ7CgovLyDjgJDkv67mraPnrofmiYDjgJHliIbmr43jgpIgbiAtIDEgKDE0KSDjgavjgZfjgaZFeGNlbOetieOBrue1seioiOmWouaVsOOBqOWujOWFqOOBq+S4gOiHtOOBleOBm+OCi+aomea6luWBj+W3rumWouaVsApmdW5jdGlvbiBDYWxjdWxhdGVTdGREZXYoYXJyOiBJbnRBcnJheTsgbjogaW50ZWdlcjsgYXZnOiByZWFsKTogcmVhbDsKdmFyCiAgaTogaW50ZWdlcjsKICBzdW1PZlNxdWFyZXMsIGRpZmY6IHJlYWw7CmJlZ2luCiAgc3VtT2ZTcXVhcmVzIDo9IDAuMDsKICBmb3IgaSA6PSAxIHRvIG4gZG8KICBiZWdpbgogICAgZGlmZiA6PSBhcnJbaV0gLSBhdmc7CiAgICBzdW1PZlNxdWFyZXMgOj0gc3VtT2ZTcXVhcmVzICsgKGRpZmYgKiBkaWZmKTsKICBlbmQ7CiAgLy8g44GT44GT44KSIG4gLSAxIOOBq+WkieabtOOBl+OBpuOBhOOBvuOBmQogIENhbGN1bGF0ZVN0ZERldiA6PSBzcXJ0KHN1bU9mU3F1YXJlcyAvIChuIC0gMSkpOwplbmQ7Cgpwcm9jZWR1cmUgUHJpbnRIZW5zYXRpKGFycjogSW50QXJyYXk7IG46IGludGVnZXI7IGF2Zywgc3RkRGV2OiByZWFsKTsKdmFyCiAgaTogaW50ZWdlcjsKICBoOiByZWFsOwpiZWdpbgogIHdyaXRlbG4oJy0tLSDlkIToh6rjga7lgY/lt67lgKTvvIjlhaXlipvpoIbvvIkgLS0tJyk7CiAgZm9yIGkgOj0gMSB0byBuIGRvCiAgYmVnaW4KICAgIGlmIHN0ZERldiA9IDAgdGhlbgogICAgICBoIDo9IDUwLjAKICAgIGVsc2UKICAgICAgaCA6PSA1MC4wICsgMTAuMCAqIChhcnJbaV0gLSBhdmcpIC8gc3RkRGV2OwogICAgd3JpdGVsbign5a2m55SfICcsIGksICc6IOeCueaVsCA9ICcsIGFycltpXSwgJyAtPiDlgY/lt67lgKQgPSAnLCBoOjA6Mik7CiAgZW5kOwplbmQ7CgpiZWdpbgogIGZvciBpIDo9IDEgdG8gTUFYX1NUVURFTlRTIGRvCiAgYmVnaW4KICAgIHJlYWRsbihzY29yZXNbaV0pOwogICAgc29ydGVkU2NvcmVzW2ldIDo9IHNjb3Jlc1tpXTsKICBlbmQ7CgogIHRvdGFsU3VtIDo9IENhbGN1bGF0ZVN1bShzY29yZXMsIE1BWF9TVFVERU5UUyk7CiAgaGVpa2luIDo9IHRvdGFsU3VtIC8gTUFYX1NUVURFTlRTOwogIHNhaWtvdSA6PSBGaW5kTWF4KHNjb3JlcywgTUFYX1NUVURFTlRTKTsKICBzYWl0b3UgOj0gRmluZE1pbihzY29yZXMsIE1BWF9TVFVERU5UUyk7CiAgZ29rYWt1Q291bnQgOj0gQ291bnRHb2tha3Uoc2NvcmVzLCBNQVhfU1RVREVOVFMpOwogIGh5b2p1bkhlbnNhIDo9IENhbGN1bGF0ZVN0ZERldihzY29yZXMsIE1BWF9TVFVERU5UUywgaGVpa2luKTsKCiAgQnViYmxlU29ydChzb3J0ZWRTY29yZXMsIE1BWF9TVFVERU5UUyk7CiAgdHl1b3RpIDo9IHNvcnRlZFNjb3Jlc1s4XTsgCgogIHdyaXRlbG4oJ+S7tuaVsD0nLCBNQVhfU1RVREVOVFMpOwogIHdyaXRlbG4oJ+W5s+Wdhz0nLCBoZWlraW46MDoyKTsKICB3cml0ZWxuKCfkuK3lpK7lgKQ9JywgdHl1b3RpOjA6Mik7CiAgd3JpdGVsbign5pyA6auY54K5PScsIHNhaWtvdTowOjIpOwogIHdyaXRlbG4oJ+acgOS9jueCuT0nLCBzYWl0b3U6MDoyKTsKICB3cml0ZWxuKCfmqJnmupblgY/lt649JywgaHlvanVuSGVuc2E6MDoyKTsKICB3cml0ZWxuKCflkIjmoLzogIXmlbA9JywgZ29rYWt1Q291bnQpOwogIHdyaXRlbG47CgogIFByaW50SGVuc2F0aShzY29yZXMsIE1BWF9TVFVERU5UUywgaGVpa2luLCBoeW9qdW5IZW5zYSk7CmVuZC4=