Apples.Mod 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. (*
  2. Файл -> модуль
  3. (название)
  4. Объекты:
  5. - константы
  6. - типы
  7. - переменные
  8. - процедуры
  9. (только эспортированное)
  10. Комментарии вида (**...*):
  11. - перед объектами
  12. - перед группами объектов
  13. *)
  14. (**
  15. Module Apples helps in counting apples.
  16. One can create a variable of type Apples.Apple,
  17. call Init and other procedures on it.
  18. *)
  19. MODULE Apples;
  20. IMPORT Out;
  21. CONST
  22. maxApples* = 5; (** Maximum amount of apples. Currently unused *)
  23. startApples = 0; (** Start amount of apples. Used in Reset *)
  24. TYPE
  25. Apple* = RECORD (** Represents an apple with maybe some seeds *)
  26. seeds*: INTEGER; (** Amount of seeds in the apple *)
  27. added: BOOLEAN (** Whether Add was called on this seed after Init *)
  28. END;
  29. VAR
  30. applesCreated*: INTEGER; (** How many apples were created using Init *)
  31. (** If FALSE, Show shows a welcome message and sets shown to TRUE *)
  32. shown: BOOLEAN;
  33. lastAdded*: INTEGER; (** How many seeds were added the last time *)
  34. (** Sets the given amount of seeds to apple a. *)
  35. PROCEDURE Set(VAR a: Apple; seeds: INTEGER);
  36. BEGIN
  37. a.seeds := seeds
  38. END Set;
  39. PROCEDURE Init*(VAR a: Apple; seeds: INTEGER);
  40. (** Initializes apple a with the specified amount of seeds. *)
  41. BEGIN
  42. INC(applesCreated);
  43. Set(a, seeds);
  44. a.added := FALSE
  45. END Init;
  46. (** Adds n seeds to apple a. *)
  47. PROCEDURE Add*(VAR a: Apple; n: INTEGER);
  48. BEGIN
  49. lastAdded := n;
  50. Set(a, a.seeds + n);
  51. a.added := TRUE
  52. END Add;
  53. PROCEDURE Show*(a: Apple);
  54. (** Dispalys a message about the apple. *)
  55. BEGIN
  56. IF ~shown THEN
  57. Out.String('Welcome to Apples!');
  58. Out.Ln;
  59. shown := TRUE
  60. END;
  61. IF a.added THEN
  62. Out.String('Added apple with ')
  63. ELSE
  64. Out.String('Apple with ')
  65. END;
  66. Out.Int(a.seeds, 0);
  67. Out.String(' seeds.');
  68. Out.Ln
  69. END Show;
  70. (** Resets internal apple counter. *)
  71. PROCEDURE Reset*;
  72. BEGIN
  73. lastAdded := -1;
  74. applesCreated := startApples;
  75. shown := FALSE
  76. END Reset;
  77. BEGIN
  78. Reset
  79. END Apples.