fork download
  1. program TestStatistics;
  2.  
  3. uses
  4. sysutils, math;
  5.  
  6. const
  7. NUM_STUDENTS = 10;
  8. PASS_SCORE = 60;
  9.  
  10. type
  11. TScoreArray = array[1..NUM_STUDENTS] of Integer;
  12.  
  13. var
  14. scores: TScoreArray = (50, 48, 78, 70, 85, 95, 98, 62, 40, 60);
  15. i, j, temp, sum, maxScore, minScore, passCount: Integer;
  16. sortedScores: TScoreArray;
  17. mean, median, variance, stdDev, deviationValue: Double;
  18.  
  19. begin
  20. // --- 初期化と基本統計の計算 ---
  21. sum := 0;
  22. maxScore := scores[1];
  23. minScore := scores[1];
  24. passCount := 0;
  25. sortedScores := scores; // 中央値計算用に配列をコピー
  26.  
  27. for i := 1 to NUM_STUDENTS do
  28. begin
  29. sum := sum + scores[i];
  30.  
  31. if scores[i] > maxScore then maxScore := scores[i];
  32. if scores[i] < minScore then minScore := scores[i];
  33. if scores[i] >= PASS_SCORE then passCount := passCount + 1;
  34. end;
  35.  
  36. mean := sum / NUM_STUDENTS;
  37.  
  38. // --- 中央値の計算 (バブルソートで昇順に整列) ---
  39. for i := 1 to NUM_STUDENTS - 1 do
  40. for j := 1 to NUM_STUDENTS - i do
  41. if sortedScores[j] > sortedScores[j+1] then
  42. begin
  43. temp := sortedScores[j];
  44. sortedScores[j] := sortedScores[j+1];
  45. sortedScores[j+1] := temp;
  46. end;
  47.  
  48. // 要素数が10(偶数)なので、中央の2つの値の平均を中央値とする
  49. median := (sortedScores[5] + sortedScores[6]) / 2.0;
  50.  
  51. // --- 標準偏差の計算 ---
  52. variance := 0;
  53. for i := 1 to NUM_STUDENTS do
  54. begin
  55. variance := variance + sqr(scores[i] - mean);
  56. end;
  57. variance := variance / NUM_STUDENTS;
  58. stdDev := sqrt(variance);
  59.  
  60. // --- 結果の出力 ---
  61. writeln('=== 全体の統計結果 ===');
  62. writeln('平均点 : ', mean:0:2);
  63. writeln('中央値 : ', median:0:2);
  64. writeln('最高点 : ', maxScore);
  65. writeln('最低点 : ', minScore);
  66. writeln('標準偏差 : ', stdDev:0:2);
  67. writeln('合格者数 : ', passCount, '名 (', PASS_SCORE, '点以上)');
  68. writeln;
  69.  
  70. writeln('=== 各学生の偏差値 ===');
  71. for i := 1 to NUM_STUDENTS do
  72. begin
  73. // 標準偏差が0でないことを確認して偏差値を計算
  74. if stdDev > 0 then
  75. deviationValue := 50.0 + 10.0 * (scores[i] - mean) / stdDev
  76. else
  77. deviationValue := 50.0;
  78.  
  79. writeln('学生 ', i:2, ' (点数: ', scores[i]:2, ') -> 偏差値: ', deviationValue:0:2);
  80. end;
  81. end.
Success #stdin #stdout 0.01s 5304KB
stdin
Standard input is empty
stdout
=== 全体の統計結果 ===
平均点   : 68.60
中央値   : 66.00
最高点   : 98
最低点   : 40
標準偏差 : 19.04
合格者数 : 7名 (60点以上)

=== 各学生の偏差値 ===
学生  1 (点数: 50) -> 偏差値: 40.23
学生  2 (点数: 48) -> 偏差値: 39.18
学生  3 (点数: 78) -> 偏差値: 54.94
学生  4 (点数: 70) -> 偏差値: 50.74
学生  5 (点数: 85) -> 偏差値: 58.61
学生  6 (点数: 95) -> 偏差値: 63.86
学生  7 (点数: 98) -> 偏差値: 65.44
学生  8 (点数: 62) -> 偏差値: 46.53
学生  9 (点数: 40) -> 偏差値: 34.98
学生 10 (点数: 60) -> 偏差値: 45.48