program StudentStatsWithData;
uses math;
const
TOTAL_STUDENTS = 24;
{ ご提示いただいた実際のデータ(24人分) }
RAW_DATA: array[0..TOTAL_STUDENTS - 1] of Integer = (
42, 48, 50, 50, 51, 73, 64, 77, 74, 90,
48, 43, 57, 55, 94, 41, 38, 52, 44, 68,
71, 74, 78, 81
);
var
Scores: array[0..TOTAL_STUDENTS - 1] of Integer;
I, J, Temp, PassCount: Integer;
Sum, Average, Variance, StdDev, Median: Real;
begin
{ 1. 定数配列から作業用配列へデータをコピー }
Sum := 0;
PassCount := 0;
for I := 0 to TOTAL_STUDENTS - 1 do
begin
Scores[I] := RAW_DATA[I];
Sum := Sum + Scores[I];
if Scores[I] >= 60 then
PassCount := PassCount + 1;
end;
{ 2. 基本統計量の計算 }
Average := Sum / TOTAL_STUDENTS;
{ 3. 中央値を求めるためのソート(バブルソート) }
for I := 0 to TOTAL_STUDENTS - 2 do
for J := 0 to TOTAL_STUDENTS - 2 - I do
if Scores[J] > Scores[J + 1] then
begin
Temp := Scores[J];
Scores[J] := Scores[J + 1];
Scores[J + 1] := Temp;
end;
{ 最高点と最低点はソート後の配列の両端から取得 }
{ (Scores配列は昇順に並び替えられています) }
if TOTAL_STUDENTS mod 2 <> 0 then
Median := Scores[TOTAL_STUDENTS div 2]
else
Median := (Scores[(TOTAL_STUDENTS div 2) - 1] + Scores[TOTAL_STUDENTS div 2]) / 2.0;
{ 4. 標準偏差の計算 }
Variance := 0;
for I := 0 to TOTAL_STUDENTS - 1 do
Variance := Variance + Sqr(Scores[I] - Average);
Variance := Variance / TOTAL_STUDENTS;
StdDev := Sqrt(Variance);
{ 5. 結果の出力 }
WriteLn('==================================');
WriteLn('【集計結果(実際のデータ 24人分)】');
WriteLn('==================================');
WriteLn('平均点 : ', Average:0:2);
WriteLn('中央値 : ', Median:0:1);
WriteLn('最高点 : ', Scores[TOTAL_STUDENTS - 1]);
WriteLn('最低点 : ', Scores[0]);
WriteLn('標準偏差 : ', StdDev:0:2);
WriteLn('合格者数 : ', PassCount, ' 人 / ', TOTAL_STUDENTS, ' 人');
WriteLn('----------------------------------');
{ 6. 各学生の偏差値を出力(点数の高い順に見やすく表示) }
WriteLn('【各学生の点数と偏差値(降順)】');
for I := TOTAL_STUDENTS - 1 downto 0 do
begin
if StdDev = 0 then
WriteLn('点数: ', Scores[I]:2, ' -> 偏差値: 50.0')
else
WriteLn('点数: ', Scores[I]:2, ' -> 偏差値: ', (10 * (Scores[I] - Average) / StdDev + 50):0:1);
end;
WriteLn('==================================');
ReadLn; { 画面を閉じずに一時停止 }
end.
cHJvZ3JhbSBTdHVkZW50U3RhdHNXaXRoRGF0YTsKdXNlcyBtYXRoOwoKY29uc3QKICBUT1RBTF9TVFVERU5UUyA9IDI0OwogIHsg44GU5o+Q56S644GE44Gf44Gg44GE44Gf5a6f6Zqb44Gu44OH44O844K/77yIMjTkurrliIbvvIkgfQogIFJBV19EQVRBOiBhcnJheVswLi5UT1RBTF9TVFVERU5UUyAtIDFdIG9mIEludGVnZXIgPSAoCiAgICA0MiwgNDgsIDUwLCA1MCwgNTEsIDczLCA2NCwgNzcsIDc0LCA5MCwgCiAgICA0OCwgNDMsIDU3LCA1NSwgOTQsIDQxLCAzOCwgNTIsIDQ0LCA2OCwgCiAgICA3MSwgNzQsIDc4LCA4MQogICk7Cgp2YXIKICBTY29yZXM6IGFycmF5WzAuLlRPVEFMX1NUVURFTlRTIC0gMV0gb2YgSW50ZWdlcjsKICBJLCBKLCBUZW1wLCBQYXNzQ291bnQ6IEludGVnZXI7CiAgU3VtLCBBdmVyYWdlLCBWYXJpYW5jZSwgU3RkRGV2LCBNZWRpYW46IFJlYWw7CgpiZWdpbgogIHsgMS4g5a6a5pWw6YWN5YiX44GL44KJ5L2c5qWt55So6YWN5YiX44G444OH44O844K/44KS44Kz44OU44O8IH0KICBTdW0gOj0gMDsKICBQYXNzQ291bnQgOj0gMDsKICBmb3IgSSA6PSAwIHRvIFRPVEFMX1NUVURFTlRTIC0gMSBkbwogIGJlZ2luCiAgICBTY29yZXNbSV0gOj0gUkFXX0RBVEFbSV07CiAgICBTdW0gOj0gU3VtICsgU2NvcmVzW0ldOwogICAgaWYgU2NvcmVzW0ldID49IDYwIHRoZW4KICAgICAgUGFzc0NvdW50IDo9IFBhc3NDb3VudCArIDE7CiAgZW5kOwoKICB7IDIuIOWfuuacrOe1seioiOmHj+OBruioiOeulyB9CiAgQXZlcmFnZSA6PSBTdW0gLyBUT1RBTF9TVFVERU5UUzsKCiAgeyAzLiDkuK3lpK7lgKTjgpLmsYLjgoHjgovjgZ/jgoHjga7jgr3jg7zjg4jvvIjjg5Djg5bjg6vjgr3jg7zjg4jvvIkgfQogIGZvciBJIDo9IDAgdG8gVE9UQUxfU1RVREVOVFMgLSAyIGRvCiAgICBmb3IgSiA6PSAwIHRvIFRPVEFMX1NUVURFTlRTIC0gMiAtIEkgZG8KICAgICAgaWYgU2NvcmVzW0pdID4gU2NvcmVzW0ogKyAxXSB0aGVuCiAgICAgIGJlZ2luCiAgICAgICAgVGVtcCA6PSBTY29yZXNbSl07CiAgICAgICAgU2NvcmVzW0pdIDo9IFNjb3Jlc1tKICsgMV07CiAgICAgICAgU2NvcmVzW0ogKyAxXSA6PSBUZW1wOwogICAgICBlbmQ7CgogIHsg5pyA6auY54K544Go5pyA5L2O54K544Gv44K944O844OI5b6M44Gu6YWN5YiX44Gu5Lih56uv44GL44KJ5Y+W5b6XIH0KICB7IO+8iFNjb3Jlc+mFjeWIl+OBr+aYh+mghuOBq+S4puOBs+abv+OBiOOCieOCjOOBpuOBhOOBvuOBme+8iSB9CiAgaWYgVE9UQUxfU1RVREVOVFMgbW9kIDIgPD4gMCB0aGVuCiAgICBNZWRpYW4gOj0gU2NvcmVzW1RPVEFMX1NUVURFTlRTIGRpdiAyXQogIGVsc2UKICAgIE1lZGlhbiA6PSAoU2NvcmVzWyhUT1RBTF9TVFVERU5UUyBkaXYgMikgLSAxXSArIFNjb3Jlc1tUT1RBTF9TVFVERU5UUyBkaXYgMl0pIC8gMi4wOwoKICB7IDQuIOaomea6luWBj+W3ruOBruioiOeulyB9CiAgVmFyaWFuY2UgOj0gMDsKICBmb3IgSSA6PSAwIHRvIFRPVEFMX1NUVURFTlRTIC0gMSBkbwogICAgVmFyaWFuY2UgOj0gVmFyaWFuY2UgKyBTcXIoU2NvcmVzW0ldIC0gQXZlcmFnZSk7CiAgVmFyaWFuY2UgOj0gVmFyaWFuY2UgLyBUT1RBTF9TVFVERU5UUzsKICBTdGREZXYgOj0gU3FydChWYXJpYW5jZSk7CgogIHsgNS4g57WQ5p6c44Gu5Ye65YqbIH0KICBXcml0ZUxuKCc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Jyk7CiAgV3JpdGVMbign44CQ6ZuG6KiI57WQ5p6c77yI5a6f6Zqb44Gu44OH44O844K/IDI05Lq65YiG77yJ44CRJyk7CiAgV3JpdGVMbignPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScpOwogIFdyaXRlTG4oJ+W5s+Wdh+eCuSAgIDogJywgQXZlcmFnZTowOjIpOwogIFdyaXRlTG4oJ+S4reWkruWApCAgIDogJywgTWVkaWFuOjA6MSk7CiAgV3JpdGVMbign5pyA6auY54K5ICAgOiAnLCBTY29yZXNbVE9UQUxfU1RVREVOVFMgLSAxXSk7CiAgV3JpdGVMbign5pyA5L2O54K5ICAgOiAnLCBTY29yZXNbMF0pOwogIFdyaXRlTG4oJ+aomea6luWBj+W3riA6ICcsIFN0ZERldjowOjIpOwogIFdyaXRlTG4oJ+WQiOagvOiAheaVsCA6ICcsIFBhc3NDb3VudCwgJyDkurogLyAnLCBUT1RBTF9TVFVERU5UUywgJyDkuronKTsKICBXcml0ZUxuKCctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJyk7CiAgCiAgeyA2LiDlkITlrabnlJ/jga7lgY/lt67lgKTjgpLlh7rlipvvvIjngrnmlbDjga7pq5jjgYTpoIbjgavopovjgoTjgZnjgY/ooajnpLrvvIkgfQogIFdyaXRlTG4oJ+OAkOWQhOWtpueUn+OBrueCueaVsOOBqOWBj+W3ruWApO+8iOmZjemghu+8ieOAkScpOwogIGZvciBJIDo9IFRPVEFMX1NUVURFTlRTIC0gMSBkb3dudG8gMCBkbwogIGJlZ2luCiAgICBpZiBTdGREZXYgPSAwIHRoZW4KICAgICAgV3JpdGVMbign54K55pWwOiAnLCBTY29yZXNbSV06MiwgJyAtPiDlgY/lt67lgKQ6IDUwLjAnKQogICAgZWxzZQogICAgICBXcml0ZUxuKCfngrnmlbA6ICcsIFNjb3Jlc1tJXToyLCAnIC0+IOWBj+W3ruWApDogJywgKDEwICogKFNjb3Jlc1tJXSAtIEF2ZXJhZ2UpIC8gU3RkRGV2ICsgNTApOjA6MSk7CiAgZW5kOwogIFdyaXRlTG4oJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0nKTsKICAKICBSZWFkTG47IHsg55S76Z2i44KS6ZaJ44GY44Ga44Gr5LiA5pmC5YGc5q2iIH0KZW5kLg==