Advertisement
Temabowl

Паттерны программирования. Lab_1

Sep 4th, 2021
26
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.02 KB | None | 0 0
  1. using System;
  2.  
  3.  
  4. /*Составить класс «Деньги» для работы с денежными суммами. Число должно быть представлено двумя полями: типа long для рублей и типа unsigned char - для копеек. +
  5. * Дробная часть (копейки) при выводе на экран должна быть отделена от целой части запятой. +
  6. * Реализовать сложение, +
  7. * вычитание, +
  8. * деление сумм, +
  9. * деление суммы на дробное число, +
  10. * умножение на дробное число, +
  11. * операции сравнения. +
  12. * В функции main проверить эти методы. +
  13. */
  14.  
  15. namespace ConsoleApp2
  16. {
  17. class Program
  18. {
  19. static void Main(string[] args)
  20. {
  21.  
  22. Money a = new Money();
  23. a.rub = -15;
  24. a.cop = -10;
  25.  
  26. Money b = new Money();
  27. b.rub = 15;
  28. b.cop = 99;
  29.  
  30. double num = -100.44;
  31. Console.WriteLine("дробное число = " + num);
  32.  
  33. Console.Write("Money a = ");
  34. a.print();
  35. Console.Write("Money b = ");
  36. b.print();
  37.  
  38. Console.WriteLine("сумма. Money a + Money b");
  39. (a + b).print();
  40. Console.WriteLine("разность. Money a - Money b");
  41. (a - b).print();
  42. Console.WriteLine("деление сумм. Money a / Money b");
  43. (a / b).print();
  44. Console.WriteLine("деление суммы на дробное число. Money a / " + num);
  45. a.Division(num).print();
  46. Console.WriteLine("умножение суммы на число. Money a * " + num);
  47. a.Multiplication(num).print();
  48. Console.WriteLine("оператор сравнения Money a > Money b");
  49. Console.WriteLine(a > b);
  50. Console.WriteLine("оператор сравнения Money a < Money b");
  51. Console.WriteLine(a < b);
  52. Console.WriteLine("оператор сравнения Money a == Money b");
  53. Console.WriteLine(a == b);
  54. Console.WriteLine("оператор сравнения Money a != Money b");
  55. Console.WriteLine(a != b);
  56.  
  57. }
  58. }
  59.  
  60.  
  61.  
  62. class Money
  63. {
  64. public long rub { get; set; } // рубль
  65. public sbyte cop { get; set; } // копейка
  66.  
  67. public static Money operator+ (Money m1, Money m2) // Сложение
  68. {
  69. return new Money
  70. {
  71. rub = m1.rub + m2.rub + (m1.cop + m2.cop) / 100,
  72. cop = Convert.ToSByte((m1.cop + m2.cop) % 100)
  73. };
  74. }
  75.  
  76. public static Money operator- (Money m1, Money m2) // Вычитание
  77. {
  78. long cops = (m1.cop + m1.rub * 100) - (m2.cop + m2.rub * 100);
  79. return new Money { rub = cops / 100, cop = Convert.ToSByte(cops % 100) };
  80. }
  81.  
  82. public static Money operator/ (Money m1, Money m2) // Деление сумм
  83. {
  84. double a = (Convert.ToDouble((m1.cop + m1.rub * 100)) / (m2.cop + m2.rub * 100));
  85. a = Math.Round(a, 2);
  86. return new Money
  87. {
  88. rub = Convert.ToInt64(Math.Truncate(a)),
  89. cop = Convert.ToSByte((a - Math.Truncate(a)) * 100)
  90. };
  91. }
  92.  
  93. public Money Division(double divisor)
  94. {
  95. double b = Convert.ToDouble(cop + rub * 100) / (divisor * 100);
  96. return new Money
  97. {
  98. rub = Convert.ToInt64(Math.Truncate(b)),
  99. cop = Convert.ToSByte((b - Math.Truncate(b)) * 100)
  100. };
  101. }
  102.  
  103. public Money Multiplication(double multiplier)
  104. {
  105. double b = Convert.ToDouble(cop + rub * 100) * multiplier / 100;
  106. return new Money
  107. {
  108. rub = Convert.ToInt64(Math.Truncate(b)),
  109. cop = Convert.ToSByte((b - Math.Truncate(b)) * 100)
  110. };
  111. }
  112.  
  113. public static bool operator> (Money m1, Money m2)
  114. {
  115. double a = Convert.ToDouble(m1.cop + m1.rub * 100);
  116. double b = Convert.ToDouble(m2.cop + m2.rub * 100);
  117. if (a > b)
  118. {
  119. return true;
  120. }
  121. else
  122. {
  123. return false;
  124. }
  125.  
  126. }
  127. public static bool operator< (Money m1, Money m2)
  128. {
  129. double a = Convert.ToDouble(m1.cop + m1.rub * 100);
  130. double b = Convert.ToDouble(m2.cop + m2.rub * 100);
  131. if (a < b)
  132. {
  133. return true;
  134. }
  135. else
  136. {
  137. return false;
  138. }
  139. }
  140. public static bool operator== (Money m1, Money m2)
  141. {
  142. double a = Convert.ToDouble(m1.cop + m1.rub * 100);
  143. double b = Convert.ToDouble(m2.cop + m2.rub * 100);
  144. if (a == b)
  145. {
  146. return true;
  147. }
  148. else
  149. {
  150. return false;
  151. }
  152. }
  153.  
  154. public static bool operator!= (Money m1, Money m2)
  155. {
  156. double a = Convert.ToDouble(m1.cop + m1.rub * 100);
  157. double b = Convert.ToDouble(m2.cop + m2.rub * 100);
  158. if (a != b)
  159. {
  160. return true;
  161. }
  162. else
  163. {
  164. return false;
  165. }
  166. }
  167.  
  168.  
  169. public void print() // Вывод в консоль
  170. {
  171.  
  172. if (rub <= 0 && cop < 0)
  173. {
  174. Console.WriteLine("-" + String.Format("{0},{1:D2}", -rub, -cop));
  175. }
  176.  
  177. else
  178. {
  179. Console.WriteLine(String.Format("{0},{1:D2}", rub, cop));
  180. }
  181. }
  182.  
  183.  
  184. }
  185. }
  186.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement