TwoDice.Mod 966 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. MODULE TwoDice;
  2. IMPORT Random, Out;
  3. CONST
  4. step = 1000;
  5. eps = 1.0E-6;
  6. TYPE
  7. Result = ARRAY 13 OF REAL;
  8. PROCEDURE Finish(old, new: Result): BOOLEAN;
  9. VAR i: INTEGER;
  10. BEGIN
  11. i := 2;
  12. WHILE (i # 13) & (ABS(old[i] - new[i]) / new[i] <= eps) DO
  13. INC(i)
  14. END
  15. RETURN i = 13 END Finish;
  16. PROCEDURE Do;
  17. VAR counter: ARRAY 13 OF INTEGER;
  18. freq0, freq: Result;
  19. i, n, a: INTEGER;
  20. sum: REAL;
  21. BEGIN
  22. FOR i := 2 TO 12 DO
  23. counter[i] := 0;
  24. freq[i] := 0.0
  25. END;
  26. n := 0;
  27. REPEAT
  28. FOR i := 1 TO step DO
  29. a := 2 + Random.Int(6) + Random.Int(6);
  30. INC(counter[a]);
  31. INC(n)
  32. END;
  33. FOR i := 2 TO 12 DO
  34. freq0[i] := freq[i];
  35. freq[i] := counter[i] / n
  36. END
  37. UNTIL Finish(freq0, freq);
  38. sum := 0.0;
  39. FOR i := 2 TO 12 DO
  40. sum := sum + freq[i];
  41. Out.Int(i, 2); Out.String(') ');
  42. Out.RealFix(freq[i], 0, 4); Out.Ln
  43. END;
  44. Out.String('Сумма ');
  45. Out.RealFix(sum, 0, 4); Out.Ln
  46. END Do;
  47. BEGIN
  48. Do
  49. END TwoDice.