Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.52 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <cstdlib>
  4. #include <cmath>
  5. #include <iomanip>
  6.  
  7. using namespace std;
  8.  
  9. class Date
  10. {
  11. public:
  12. unsigned int y;
  13. unsigned int m;
  14. unsigned int d, julian;
  15. int Init()
  16. {
  17. if ((m > 12) || (m <= 0) || (d > 31) || (d <= 0) || (y <= 0))
  18. {
  19. std::cout << "No" << endl;
  20. return 1;
  21. }
  22. else return 0;
  23. }
  24.  
  25.  
  26.  
  27. Date after(int days)
  28. {
  29. Date d;
  30. long int bet;
  31. bet = julian + days;
  32. d.julian = bet;
  33. d = Grigor_date(bet);
  34. return d;
  35. }
  36. Date before(int days)
  37. {
  38. Date d1;
  39. long int bet;
  40. bet = julian - days;
  41. d1.julian = bet;
  42. d1 = Grigor_date(bet);
  43. return d1;
  44. }
  45.  
  46. int bissextile_year()
  47. {
  48. if (y % 100 == 0)
  49. {
  50. if (y % 4 == 0 || y % 400 == 0)
  51. return true;
  52. return false;
  53. }
  54. }
  55. void Display()
  56. {
  57. cout << y << " " << m << " " << d << endl;
  58. }
  59.  
  60.  
  61.  
  62.  
  63. int comparisonDate(Date d1)
  64. {
  65. int srav;
  66. long int t;
  67. t = julian - d1.julian;
  68. if (t < 0) srav = -1;
  69. else if (t == 0) srav = 0;
  70. else if (t > 0) srav = 1;
  71. return srav;
  72. }
  73. int days_between(Date d1)
  74. {
  75. long int t;
  76. t = julian - d1.julian;
  77. return abs(t);
  78. }
  79.  
  80. void Lak()
  81. {
  82. int a = (14 - m) / 12;
  83. int y1 = y + 4800 - a;
  84. int m1 = m + 12 * a - 3;
  85. long int jdn = d + (153 * m1 + 2) / 5 + 365 * y1 + y1 / 4 - y1 / 100 + y1 / 400 - 32045;
  86. julian = jdn;
  87. }
  88. Date Grigor_date(unsigned long int j)
  89. {
  90. Date d1;
  91. unsigned long int a = j + 32044;
  92. unsigned long int b = (4 * a + 3) / 146097;
  93. unsigned long int c = a - (146097)*b / 4;
  94. unsigned long int d = (4 * c + 3) / 1461;
  95. unsigned long int e = c - (1461 * d) / 4;
  96. unsigned long int f = (5 * e + 2) / 153;
  97. d1.d = e - (153 * f + 2) / 5 + 1;
  98. d1.m = f + 3 - 12 * (f / 10);
  99. d1.y = 100 * b + d - 4800 + f / 10;
  100. d1.julian = j;
  101. return d1;
  102. }
  103. void Read_str()
  104. {
  105. string s1, s2;
  106.  
  107. std::cin >> s1;
  108.  
  109. int i = 0, q = 0;
  110. while (s1[i] != '.') { q++; i++; }
  111. s2 = s1.substr(0, q);
  112. y = atoi(s2.c_str());
  113. s1.erase(0, q + 1);
  114.  
  115. i = 0; q = 0;
  116. while (s1[i] != '.') { q++; i++; }
  117. s2 = s1.substr(0, q);
  118. m = atoi(s2.c_str());
  119. s1.erase(0, q + 1);
  120.  
  121. d = atoi(s1.c_str());
  122.  
  123. Lak();
  124. }
  125.  
  126.  
  127. void read_date()
  128. {
  129. std::cin >> y >> m >> d;
  130. Lak();
  131. }
  132.  
  133.  
  134.  
  135. void Read_date()
  136. {
  137. string s, s1, month1; int q = 0;
  138. getline(cin, s);
  139.  
  140. int i = 0;
  141. while (s[i])
  142. {
  143. if (s[i] != ' ') s1[i] = s[i];
  144. else
  145. {
  146. if (q == 0) { y = atoi(s1.c_str()); q = 1; }
  147. else if (q == 1) { month1 = s1; q = 2; }
  148. else if (q == 2) d = atoi(s1.c_str());
  149. s.erase(0, i + 1);
  150. i = -1;
  151. }
  152. i++;
  153. }
  154. if (month1 == "января") m = 01;
  155. else if (month1 == "февраля") m = 02;
  156. else if (month1 == "марта") m = 03;
  157. else if (month1 == "апреля") m = 04;
  158. else if (month1 == "мая") m = 05;
  159. else if (month1 == "июня") m = 06;
  160. else if (month1 == "июля") m = 07;
  161. else if (month1 == "августа") m = 8;
  162. else if (month1 == "сентября") m = 9;
  163. else if (month1 == "октября") m = 10;
  164. else if (month1 == "ноября") m = 11;
  165. else if (month1 == "декабря") m = 12;
  166.  
  167. Lak();
  168. }
  169. };
  170. class Payment
  171. {
  172. public:
  173. string name;
  174. double oklad, percent, nalog, add_summa, stop_summa;
  175. unsigned int otrab_days, wark_days;
  176. Date date;
  177.  
  178. int Init()
  179. {
  180.  
  181. if ((percent < 0) && (percent > 100))
  182. {
  183. std::cout << "No" << endl;
  184. return 1;
  185. }
  186. else return 0;
  187. }
  188. void Read()
  189. {
  190. std::cin >> name >> oklad;
  191. date.Read_str();
  192. std::cin >> percent >> otrab_days >> wark_days;
  193. }
  194. void Display()
  195. {
  196. std::cout << name << " " << setprecision(2) << oklad << " " << stage() << "days " << setprecision(2) << add_summa << " " << setprecision(2) << stop_summa << " " << setprecision(2) << res() << endl;
  197. }
  198.  
  199. double add()
  200. {
  201. add_summa = oklad + oklad * percent*0.01;
  202. double zday = add_summa / wark_days;
  203. return add_summa = otrab_days * zday;
  204. }
  205. double stoped()
  206. {
  207. nalog = 0.13;
  208. stop_summa = add()*nalog;
  209. return stop_summa = (add_summa - stop_summa)*0.01 + stop_summa;
  210. }
  211. double res()
  212. {
  213. return add_summa - stop_summa;
  214. }
  215. int stage()
  216. {
  217. Date d1;
  218. d1.y = 2015; d1.m = 12; d1.d = 31; d1.Lak();
  219. return date.days_between(d1);
  220. }
  221. };
  222. void main()
  223. {
  224. Payment p;
  225. cout << fixed;
  226. p.Read();
  227. int n;
  228. std::cin >> n;
  229. Payment *pp = new Payment[n];
  230. for (int i = 0; i<n; i++)
  231. pp[i].Read();
  232. p.add();
  233. for (int i = 0; i<n; i++)
  234. pp[i].add();
  235. p.stoped();
  236. for (int i = 0; i<n; i++)
  237. pp[i].stoped();
  238. p.Display();
  239. for (int i = 0; i<n; i++)
  240. pp[i].Display();
  241. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement