program TestStatistics;
uses
sysutils, math;
const
NUM_STUDENTS = 10;
PASS_SCORE = 60;
type
TScoreArray = array[1..NUM_STUDENTS] of Integer;
var
scores: TScoreArray = (50, 48, 78, 70, 85, 95, 98, 62, 40, 60);
i, j, temp, sum, maxScore, minScore, passCount: Integer;
sortedScores: TScoreArray;
mean, median, variance, stdDev, deviationValue: Double;
begin
// --- 初期化と基本統計の計算 ---
sum := 0;
maxScore := scores[1];
minScore := scores[1];
passCount := 0;
sortedScores := scores; // 中央値計算用に配列をコピー
for i := 1 to NUM_STUDENTS 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] >= PASS_SCORE then passCount := passCount + 1;
end;
mean := sum / NUM_STUDENTS;
// --- 中央値の計算 (バブルソートで昇順に整列) ---
for i := 1 to NUM_STUDENTS - 1 do
for j := 1 to NUM_STUDENTS - i do
if sortedScores[j] > sortedScores[j+1] then
begin
temp := sortedScores[j];
sortedScores[j] := sortedScores[j+1];
sortedScores[j+1] := temp;
end;
// 要素数が10(偶数)なので、中央の2つの値の平均を中央値とする
median := (sortedScores[5] + sortedScores[6]) / 2.0;
// --- 標準偏差の計算 ---
variance := 0;
for i := 1 to NUM_STUDENTS do
begin
variance := variance + sqr(scores[i] - mean);
end;
variance := variance / NUM_STUDENTS;
stdDev := sqrt(variance);
// --- 結果の出力 ---
writeln('=== 全体の統計結果 ===');
writeln('平均点 : ', mean:0:2);
writeln('中央値 : ', median:0:2);
writeln('最高点 : ', maxScore);
writeln('最低点 : ', minScore);
writeln('標準偏差 : ', stdDev:0:2);
writeln('合格者数 : ', passCount, '名 (', PASS_SCORE, '点以上)');
writeln;
writeln('=== 各学生の偏差値 ===');
for i := 1 to NUM_STUDENTS do
begin
// 標準偏差が0でないことを確認して偏差値を計算
if stdDev > 0 then
deviationValue := 50.0 + 10.0 * (scores[i] - mean) / stdDev
else
deviationValue := 50.0;
writeln('学生 ', i:2, ' (点数: ', scores[i]:2, ') -> 偏差値: ', deviationValue:0:2);
end;
end.
cHJvZ3JhbSBUZXN0U3RhdGlzdGljczsKCnVzZXMKICBzeXN1dGlscywgbWF0aDsKCmNvbnN0CiAgTlVNX1NUVURFTlRTID0gMTA7CiAgUEFTU19TQ09SRSA9IDYwOwoKdHlwZQogIFRTY29yZUFycmF5ID0gYXJyYXlbMS4uTlVNX1NUVURFTlRTXSBvZiBJbnRlZ2VyOwoKdmFyCiAgc2NvcmVzOiBUU2NvcmVBcnJheSA9ICg1MCwgNDgsIDc4LCA3MCwgODUsIDk1LCA5OCwgNjIsIDQwLCA2MCk7CiAgaSwgaiwgdGVtcCwgc3VtLCBtYXhTY29yZSwgbWluU2NvcmUsIHBhc3NDb3VudDogSW50ZWdlcjsKICBzb3J0ZWRTY29yZXM6IFRTY29yZUFycmF5OwogIG1lYW4sIG1lZGlhbiwgdmFyaWFuY2UsIHN0ZERldiwgZGV2aWF0aW9uVmFsdWU6IERvdWJsZTsKCmJlZ2luCiAgLy8gLS0tIOWIneacn+WMluOBqOWfuuacrOe1seioiOOBruioiOeulyAtLS0KICBzdW0gOj0gMDsKICBtYXhTY29yZSA6PSBzY29yZXNbMV07CiAgbWluU2NvcmUgOj0gc2NvcmVzWzFdOwogIHBhc3NDb3VudCA6PSAwOwogIHNvcnRlZFNjb3JlcyA6PSBzY29yZXM7IC8vIOS4reWkruWApOioiOeul+eUqOOBq+mFjeWIl+OCkuOCs+ODlOODvAoKICBmb3IgaSA6PSAxIHRvIE5VTV9TVFVERU5UUyBkbwogIGJlZ2luCiAgICBzdW0gOj0gc3VtICsgc2NvcmVzW2ldOwogICAgCiAgICBpZiBzY29yZXNbaV0gPiBtYXhTY29yZSB0aGVuIG1heFNjb3JlIDo9IHNjb3Jlc1tpXTsKICAgIGlmIHNjb3Jlc1tpXSA8IG1pblNjb3JlIHRoZW4gbWluU2NvcmUgOj0gc2NvcmVzW2ldOwogICAgaWYgc2NvcmVzW2ldID49IFBBU1NfU0NPUkUgdGhlbiBwYXNzQ291bnQgOj0gcGFzc0NvdW50ICsgMTsKICBlbmQ7CgogIG1lYW4gOj0gc3VtIC8gTlVNX1NUVURFTlRTOwoKICAvLyAtLS0g5Lit5aSu5YCk44Gu6KiI566XICjjg5Djg5bjg6vjgr3jg7zjg4jjgafmmIfpoIbjgavmlbTliJcpIC0tLQogIGZvciBpIDo9IDEgdG8gTlVNX1NUVURFTlRTIC0gMSBkbwogICAgZm9yIGogOj0gMSB0byBOVU1fU1RVREVOVFMgLSBpIGRvCiAgICAgIGlmIHNvcnRlZFNjb3Jlc1tqXSA+IHNvcnRlZFNjb3Jlc1tqKzFdIHRoZW4KICAgICAgYmVnaW4KICAgICAgICB0ZW1wIDo9IHNvcnRlZFNjb3Jlc1tqXTsKICAgICAgICBzb3J0ZWRTY29yZXNbal0gOj0gc29ydGVkU2NvcmVzW2orMV07CiAgICAgICAgc29ydGVkU2NvcmVzW2orMV0gOj0gdGVtcDsKICAgICAgZW5kOwoKICAvLyDopoHntKDmlbDjgYwxMO+8iOWBtuaVsO+8ieOBquOBruOBp+OAgeS4reWkruOBrjLjgaTjga7lgKTjga7lubPlnYfjgpLkuK3lpK7lgKTjgajjgZnjgosKICBtZWRpYW4gOj0gKHNvcnRlZFNjb3Jlc1s1XSArIHNvcnRlZFNjb3Jlc1s2XSkgLyAyLjA7CgogIC8vIC0tLSDmqJnmupblgY/lt67jga7oqIjnrpcgLS0tCiAgdmFyaWFuY2UgOj0gMDsKICBmb3IgaSA6PSAxIHRvIE5VTV9TVFVERU5UUyBkbwogIGJlZ2luCiAgICB2YXJpYW5jZSA6PSB2YXJpYW5jZSArIHNxcihzY29yZXNbaV0gLSBtZWFuKTsKICBlbmQ7CiAgdmFyaWFuY2UgOj0gdmFyaWFuY2UgLyBOVU1fU1RVREVOVFM7CiAgc3RkRGV2IDo9IHNxcnQodmFyaWFuY2UpOwoKICAvLyAtLS0g57WQ5p6c44Gu5Ye65YqbIC0tLQogIHdyaXRlbG4oJz09PSDlhajkvZPjga7ntbHoqIjntZDmnpwgPT09Jyk7CiAgd3JpdGVsbign5bmz5Z2H54K5ICAgOiAnLCBtZWFuOjA6Mik7CiAgd3JpdGVsbign5Lit5aSu5YCkICAgOiAnLCBtZWRpYW46MDoyKTsKICB3cml0ZWxuKCfmnIDpq5jngrkgICA6ICcsIG1heFNjb3JlKTsKICB3cml0ZWxuKCfmnIDkvY7ngrkgICA6ICcsIG1pblNjb3JlKTsKICB3cml0ZWxuKCfmqJnmupblgY/lt64gOiAnLCBzdGREZXY6MDoyKTsKICB3cml0ZWxuKCflkIjmoLzogIXmlbAgOiAnLCBwYXNzQ291bnQsICflkI0gKCcsIFBBU1NfU0NPUkUsICfngrnku6XkuIopJyk7CiAgd3JpdGVsbjsKCiAgd3JpdGVsbignPT09IOWQhOWtpueUn+OBruWBj+W3ruWApCA9PT0nKTsKICBmb3IgaSA6PSAxIHRvIE5VTV9TVFVERU5UUyBkbwogIGJlZ2luCiAgICAvLyDmqJnmupblgY/lt67jgYww44Gn44Gq44GE44GT44Go44KS56K66KqN44GX44Gm5YGP5beu5YCk44KS6KiI566XCiAgICBpZiBzdGREZXYgPiAwIHRoZW4KICAgICAgZGV2aWF0aW9uVmFsdWUgOj0gNTAuMCArIDEwLjAgKiAoc2NvcmVzW2ldIC0gbWVhbikgLyBzdGREZXYKICAgIGVsc2UKICAgICAgZGV2aWF0aW9uVmFsdWUgOj0gNTAuMDsKCiAgICB3cml0ZWxuKCflrabnlJ8gJywgaToyLCAnICjngrnmlbA6ICcsIHNjb3Jlc1tpXToyLCAnKSAtPiDlgY/lt67lgKQ6ICcsIGRldmlhdGlvblZhbHVlOjA6Mik7CiAgZW5kOwplbmQu