Advertisement
palenda21

laba1oop

Sep 24th, 2020
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.24 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct Date
  5. {
  6.     int y;
  7.     int m;
  8.     int d;
  9. };
  10.  
  11. void vivod(int n, Date *data)
  12. {
  13.     data = new Date[n];
  14.     for (int i = 0; i < n; i++)
  15.     {
  16.         cout << "Year: " << data[i].y << endl;
  17.         cout << "Month: " << data[i].m << endl;
  18.         cout << "Day: " << data[i].d << endl;
  19.         cout << "Full: " << data[i].d << "." << data[i].m << "." << data[i].y;
  20.     }
  21. }
  22.  
  23.  
  24. Date add(Date &time)
  25. {
  26. int day, param, month, year, res_d, res_m;
  27. int gl_time;
  28. int d_in_m[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
  29.  
  30. cout << "Choose: 1 - add year, 2 - add month, 3 - add day.\n";
  31. cin >> param;
  32. switch (param)
  33. {
  34. case 1:
  35. cout << "Input year to add: ";
  36. cin >> year;
  37. time.y += year;
  38. break;
  39. case 2:
  40. do {
  41. cout << "Input month to add: ";
  42. cin >> month;
  43. if (month < 0) {
  44. cout << "Bad months input.Try again.\n";
  45. res_m = 0;
  46. }
  47. else res_m = 1;
  48. } while (res_m == 0);
  49.  
  50. int days_in_inputed_month = 0; // кол-во дней во введенном месяце
  51. for (int i = 0; i < month; i++) {
  52. days_in_inputed_month += d_in_m[i];
  53. if (i == (12 - 1)) i = 0;
  54. }
  55.  
  56. int days_in_current_months = 0; //кол-во дней в месяцax к которому прибавляем
  57. for (int i = 0; i < time.m; i++) {
  58. days_in_current_months += d_in_m[i];
  59. days_in_current_months += time.d;
  60. }
  61. gl_time = 365 * time.y + days_in_inputed_month + days_in_current_months; //всего дней в текущем введенном году
  62. time.y = (gl_time - gl_time % 365) / 365;
  63. int days_before_inc = gl_time - time.y * 365;
  64. int i, counter = 0; //поиск количества месяцев в новой дате
  65. for (i = 0; i < 12; i++)
  66. {
  67. if (counter > days_before_inc) break;
  68. else counter += d_in_m[i];
  69. }
  70. time.m = i; //кол-во новых месяцев
  71. counter = 0; // поиск остатка дней
  72. for (int j = 0; j < i; j++) counter += d_in_m[j];
  73. time.d = gl_time - 365 * time.y - counter;
  74. break;
  75.        
  76. case 3:
  77. do {
  78. cout << "Input day: ";
  79. cin >> day;
  80. if (day < 0) {
  81. cout << "Bad days input.Try again.\n";
  82. res_d = 0;
  83. }
  84. else res_d = 1;
  85. } while (res_d == 0);
  86. for (int i = 0; i < time.m; i++) {
  87. days_in_current_months += d_in_m[i];
  88. days_in_current_months += time.d;
  89. }
  90. gl_time = 365 * time.y + days_in_current_months; //всего дней в текущем введенном году
  91. gl_time += day; //новое количество дней
  92. time.y = (gl_time - gl_time % 365) / 365;
  93. int days_before_in = gl_time - time.y * 365;
  94. int count = 0; //поиск количества месяцев в новой дате
  95. for (int i = 0; i < 12; i++)
  96. {
  97. if (count > days_before_in) break;
  98. else count += d_in_m[i];
  99. }
  100. time.m = i; //кол-во новых месяцев
  101. counter = 0; // поиск остатка дней
  102. for (int j = 0; j < i; j++) counter += d_in_m[j];
  103. time.d = gl_time - 365 * time.y - counter;
  104. break;
  105.  
  106. default: cout << "Bad input.\n";
  107.         break;
  108. }
  109.  
  110. return time;
  111. }
  112.  
  113. int main()
  114. {
  115.     Date *data;
  116.     int n;
  117.     cout << "n = ";
  118.     cin >> n;
  119.     vivod(n, *data);
  120.     Date new_time;
  121.     set(new_time);
  122.     get(new_time);
  123.     cout « "Разница в днях составяет: " « inc(time, new_time) « endl;
  124.     time = add(time);
  125.     return 0;
  126. }
  127.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement