fork download
  1. program ScoreAnalysis;
  2.  
  3. const
  4. MAX = 100;
  5.  
  6. var
  7. n, i, j, passCount : Integer;
  8. score, sorted : array[1..MAX] of Real;
  9. sum, avg, median : Real;
  10. maxScore, minScore : Real;
  11. variance, stddev : Real;
  12. temp, hensachi : Real;
  13.  
  14. begin
  15. writeln('学生数を入力してください(10人以上)');
  16. readln(n);
  17.  
  18. { 10人未満なら終了 }
  19. if n < 10 then
  20. begin
  21. writeln('学生数は10人以上で入力してください。');
  22. halt;
  23. end;
  24.  
  25. sum := 0;
  26. passCount := 0;
  27.  
  28. writeln('点数を入力してください');
  29.  
  30. for i := 1 to n do
  31. begin
  32. readln(score[i]);
  33. sorted[i] := score[i];
  34.  
  35. sum := sum + score[i];
  36.  
  37. if score[i] >= 60 then
  38. passCount := passCount + 1;
  39. end;
  40.  
  41. { 平均 }
  42. avg := sum / n;
  43.  
  44. { 最高点・最低点 }
  45. maxScore := score[1];
  46. minScore := score[1];
  47.  
  48. for i := 2 to n do
  49. begin
  50. if score[i] > maxScore then
  51. maxScore := score[i];
  52.  
  53. if score[i] < minScore then
  54. minScore := score[i];
  55. end;
  56.  
  57. { 分散・標準偏差 }
  58. variance := 0;
  59.  
  60. for i := 1 to n do
  61. variance := variance + (score[i] - avg) * (score[i] - avg);
  62.  
  63. variance := variance / n;
  64. stddev := sqrt(variance);
  65.  
  66. { ソート }
  67. for i := 1 to n - 1 do
  68. for j := 1 to n - i do
  69. if sorted[j] > sorted[j + 1] then
  70. begin
  71. temp := sorted[j];
  72. sorted[j] := sorted[j + 1];
  73. sorted[j + 1] := temp;
  74. end;
  75.  
  76. { 中央値 }
  77. if n mod 2 = 1 then
  78. median := sorted[(n + 1) div 2]
  79. else
  80. median := (sorted[n div 2] + sorted[n div 2 + 1]) / 2;
  81.  
  82. { 結果表示 }
  83. writeln;
  84. writeln('平均 = ', avg:0:2);
  85. writeln('中央値 = ', median:0:2);
  86. writeln('最高点 = ', maxScore:0:2);
  87. writeln('最低点 = ', minScore:0:2);
  88. writeln('標準偏差 = ', stddev:0:2);
  89. writeln('合格者数 = ', passCount);
  90.  
  91. writeln;
  92. writeln('偏差値');
  93.  
  94. for i := 1 to n do
  95. begin
  96. if stddev = 0 then
  97. hensachi := 50
  98. else
  99. hensachi := 50 + 10 * (score[i] - avg) / stddev;
  100.  
  101. writeln('学生', i, ' : ', hensachi:0:2);
  102. end;
  103. end.
Success #stdin #stdout 0s 5284KB
stdin
10
10
22
42
30
44
88
55
65
74
93
stdout
学生数を入力してください(10人以上)
点数を入力してください

平均 = 52.30
中央値 = 49.50
最高点 = 93.00
最低点 = 10.00
標準偏差 = 26.36
合格者数 = 4

偏差値
学生1 : 33.95
学生2 : 38.51
学生3 : 46.09
学生4 : 41.54
学生5 : 46.85
学生6 : 63.54
学生7 : 51.02
学生8 : 54.82
学生9 : 58.23
学生10 : 65.44