ChameL1oN

Laba_4_2

Mar 24th, 2016
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.53 KB | None | 0 0
  1. #include <locale>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. void qwer(int &d, int &m, int &y) // Проверка
  7. {
  8. bool flag = true;
  9. cout << "Введите дату (номер дня, номер месяца, год)" << endl;
  10. while (flag)
  11. {
  12. cin >> d;
  13. cin >> m;
  14. cin >> y;
  15. if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12)
  16. if (d <= 31 && d >= 1) flag = false;
  17. else cout << "Неверный ввод!\n Повторите ввод!\n";
  18. else
  19. if (m == 4 || m == 6 || m == 9 || m == 11)
  20. if (d <= 30 && d <= 1) flag = false;
  21. else cout << "Неверный ввод!\n Повторите ввод!\n";
  22. else
  23. if (m == 2)
  24. if (y%4==0)
  25. if (d <= 29 && d >= 1) flag = false;
  26. else cout << "Неверный ввод!\n Повторите ввод!\n";
  27. else
  28. if (d <= 28 && d >= 1) flag = false;
  29. else cout << "Неверный ввод!\n Повторите ввод!\n";
  30. else cout << "Неверный ввод!\n Повторите ввод!\n";
  31. }
  32. }
  33.  
  34. void IncData(int &D, int &M, int &Y){
  35. D++;
  36. if (M == 2){ //Если февраль
  37. if (Y % 4 == 0){ //Если високосный
  38. if (D > 29){
  39. D = 1;
  40. M++;
  41. }
  42. }
  43. else{ //Если НЕвисокосный
  44. if (D > 28){
  45. D = 1;
  46. M++;
  47. }
  48. }
  49. }
  50. else if (D > 31){
  51. if (M == 1 || M == 3 || M == 5 || M == 7 || M == 8 || M == 10 || M == 12){ // Если в месяце 31 день
  52. D = 1;
  53. M++;
  54. }
  55. }
  56. else if(D > 30){ //Если в месяце 30 дней
  57. D = 1;
  58. M++;
  59. }
  60. if(M == 13){ //НОВЫЙ ГОД!!!
  61. M = 1;
  62. D = 1;
  63. Y++;
  64. }
  65.  
  66. }
  67.  
  68. void DecData(int &D, int &M, int &Y){
  69. D--;
  70. if (D < 1){ //СТАРЫЙ МЕСЯЦ
  71. M = M - 1;
  72. if (M == 1 || M == 3 || M == 5 || M == 7 || M == 8 || M == 10 || M == 12) D = 31; //Если в предыдущем месяце 31 день
  73. else if (M == 2){ //Если предыдущий - февраль
  74. if (Y % 4 == 0) D = 29; //Если високосный
  75. else D = 28; //Если НЕвисокосный
  76. }
  77. else if (M == 0){ //СТАРЫЙ ГОД :((
  78. Y--;
  79. M = 12;
  80. D = 31;
  81. }
  82. else //Если в предыдущем месяце 30 дней
  83. {
  84. D = 30;
  85. }
  86. }
  87. }
  88.  
  89. void CustomDate(int &D, int &M, int &Y){
  90. cout << "Кол-во добавляемых дней" << endl;
  91. int a;
  92. cin >> a;
  93. for (int i = 0; i < a; i++){
  94. IncData(D, M, Y);
  95. }
  96. }
  97.  
  98. void Check(){
  99. int D, M, Y;
  100. int D2, M2, Y2;
  101. qwer(D, M, Y);
  102. qwer(D2, M2, Y2);
  103.  
  104. int a=0;
  105. if (D+M*30+Y*365 < D2+M2*30+Y2*365){ //Сравниваем (грубо)
  106. while (D != D2 || M != M2 || Y != Y2){ //Пока даты не равны
  107. a++;
  108. DecData(D2, M2, Y2);
  109. }
  110. cout << "Разница " << a << " дней" << endl;
  111. }
  112. else if(D + M * 30 + Y * 365 > D2 + M2 * 30 + Y2 * 365){ //Сравниваем (грубо)
  113. while (D != D2 || M != M2 || Y != Y2){ //Пока даты не равны
  114. a++;
  115. DecData(D, M, Y);
  116. }
  117. cout << "Разница " << a << " дней" << endl;
  118. }
  119. else{
  120. cout << "ДАТЫ РАВНЫ" << endl;
  121. }
  122. }
  123.  
  124. int main(int argc, char* argv[])
  125. {
  126. setlocale(LC_ALL, "rus");
  127. int d,m,y;
  128. qwer(d, m, y);
  129. cout << "После добавления" << endl;
  130. IncData(d,m,y);
  131. cout << d << "." << m << "." << y << endl;
  132. cout << "После вычитания вернулись в исходную дату" << endl;
  133. DecData(d, m, y);
  134. cout << d << "." << m << "." << y << endl;
  135. CustomDate(d, m, y);
  136. cout << d << "." << m << "." << y << endl;
  137. Check();
  138. cout << endl;
  139. }
Advertisement
Add Comment
Please, Sign In to add comment