fork download
  1. program ideone;
  2. begin
  3. (* your code goes here *)
  4. end.var
  5. N, i, j, passCount: integer;
  6. scores, sortedScores: array[1..1000] of real;
  7. sum, mean, maxScore, minScore: real;
  8. varianceSum, stdDev, median, temp, deviation: real;
  9.  
  10. begin
  11. // 1. 人数(N)の読み込み
  12. read(N);
  13.  
  14. // 10人以上であるかのチェック
  15. if N < 10 then
  16. begin
  17. writeln('エラー: 学生の点数は10人以上入力してください。');
  18. end
  19. else
  20. begin
  21. sum := 0;
  22. passCount := 0;
  23.  
  24. // 2. 点数の読み込みと基本集計(合計、合格者数、最高点、最低点)
  25. for i := 1 to N do
  26. begin
  27. read(scores[i]);
  28. sortedScores[i] := scores[i];
  29. sum := sum + scores[i];
  30.  
  31. // 60点以上を合格とする
  32. if scores[i] >= 60 then
  33. passCount := passCount + 1;
  34.  
  35. // 最高点・最低点の更新
  36. if i = 1 then
  37. begin
  38. maxScore := scores[i];
  39. minScore := scores[i];
  40. end
  41. else
  42. begin
  43. if scores[i] > maxScore then maxScore := scores[i];
  44. if scores[i] < minScore then minScore := scores[i];
  45. end;
  46. end;
  47.  
  48. // 3. 平均の計算
  49. mean := sum / N;
  50.  
  51. // 4. 標準偏差の計算
  52. varianceSum := 0;
  53. for i := 1 to N do
  54. begin
  55. varianceSum := varianceSum + sqr(scores[i] - mean);
  56. end;
  57. stdDev := sqrt(varianceSum / N);
  58.  
  59. // 5. 中央値(Median)の計算のために配列をソート (バブルソート)
  60. for i := 1 to N - 1 do
  61. begin
  62. for j := i + 1 to N do
  63. begin
  64. if sortedScores[i] > sortedScores[j] then
  65. begin
  66. temp := sortedScores[i];
  67. sortedScores[i] := sortedScores[j];
  68. sortedScores[j] := temp;
  69. end;
  70. end;
  71. end;
  72.  
  73. // 偶数・奇数で中央値の計算を分ける
  74. if N mod 2 = 1 then
  75. median := sortedScores[N div 2 + 1]
  76. else
  77. median := (sortedScores[N div 2] + sortedScores[N div 2 + 1]) / 2.0;
  78.  
  79. // 6. 全体結果の出力 (小数点以下2桁で表示)
  80. writeln('平均 (Mean) : ', mean:0:2);
  81. writeln('中央値 (Median) : ', median:0:2);
  82. writeln('最高点 (Max) : ', maxScore:0:2);
  83. writeln('最低点 (Min) : ', minScore:0:2);
  84. writeln('標準偏差 (StdDev) : ', stdDev:0:2);
  85. writeln('合格者数 (Passed) : ', passCount, ' 人');
  86. writeln;
  87. writeln('--- 各点数と偏差値 ---');
  88.  
  89. // 7. 各学生の偏差値を計算して出力
  90. for i := 1 to N do
  91. begin
  92. // 標準偏差が0(全員同じ点数)の場合のゼロ除算対策
  93. if stdDev > 0 then
  94. deviation := 50.0 + 10.0 * (scores[i] - mean) / stdDev
  95. else
  96. deviation := 50.0;
  97.  
  98. writeln('点数: ', scores[i]:0:2, ' | 偏差値: ', deviation:0:2);
  99. end;
  100. end;
  101. end.
Success #stdin #stdout 0s 5276KB
stdin
10 85 92 45 60 78 55 100 88 72 65
stdout
Standard output is empty