Advertisement
Guest User

Untitled

a guest
Feb 18th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.57 KB | None | 0 0
  1. #include <stdexcept>
  2. #include <vector>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. class Date{
  8. private:
  9. int day, month, year;
  10.  
  11. public:
  12. Date(const int& d, const int& m, const int& y) {
  13. if (((d >= 1) && (m >= 1) && (y >= 1970)) &&
  14. ((d <= 31) && (m <= 12) && (y <=2099))) {
  15. if ((m == 1) || (m == 3) || (m ==5) || (m == 7) || (m == 8) || (m == 10) || (m == 12)) {
  16. day = d;
  17. month = m;
  18. year = y;
  19. }
  20. else if ((m == 4) || (m == 6) || (m == 9) || (m == 11)) {
  21. if (d <= 30) {
  22. day = d;
  23. month = m;
  24. year = y;
  25. } else {
  26. throw std::invalid_argument("invalid_argument");
  27. }
  28. } else if (m == 2) {
  29. if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) {
  30. if (d <= 29) {
  31. day = d;
  32. month = m;
  33. year = y;
  34. } else {
  35. throw std::invalid_argument("invalid_argument");
  36. }
  37. } else if (d <= 28) {
  38. day = d;
  39. month = m;
  40. year = y;
  41. } else {
  42. throw std::invalid_argument("invalid_argument");
  43. }
  44. }
  45. } else {
  46. throw std::invalid_argument("invalid_argument");
  47. }
  48. }
  49. size_t GetDay() const {
  50. return day;
  51. }
  52. size_t GetMonth() const {
  53. return month;
  54. }
  55. size_t GetYear() const {
  56. return year;
  57. }
  58. void operator++ () {
  59. if ((month <= 7 && month % 2 == 1) || (month >= 8 && month % 2 == 0)) {
  60. if (day == 31) {
  61. if (month == 12) {
  62. day = 1;
  63. month = 1;
  64. ++year;
  65. } else {
  66. day = 1;
  67. ++month;
  68. }
  69. } else {
  70. ++day;
  71. }
  72. } else if (month == 4 || month == 6 || month == 9 || month == 11) {
  73. if (day == 30) {
  74. day = 1;
  75. ++month;
  76. } else {
  77. ++day;
  78. }
  79. } else if (month == 2) {
  80. if (((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)) {
  81. if (day == 29) {
  82. day = 1;
  83. ++month;
  84. } else {
  85. ++day;
  86. }
  87. } else {
  88. if (day == 28) {
  89. day = 1;
  90. ++month;
  91. }
  92. else {
  93. ++day;
  94. }
  95. }
  96. }
  97. }
  98. void operator--() {
  99. if ((month <= 7 && month % 2 == 1) || (month >= 8 && month % 2 == 0)) {
  100. if (day == 1 && month == 3) {
  101. if ((((year % 4 == 0 && year % 100 != 0) || year % 400 == 0))) {
  102. day = 29;
  103. month = 2;
  104. } else {
  105. day = 28;
  106. month = 2;
  107. }
  108. } else if (day == 1 && month == 8) {
  109. day = 31;
  110. month = 7;
  111. } else if (day == 1 && month == 1) {
  112. day = 31;
  113. month = 12;
  114. --year;
  115. } else if (day == 1) {
  116. day = 30;
  117. --month;
  118. } else {
  119. --day;
  120. }
  121. } else {
  122. if (day == 1) {
  123. day = 31;
  124. --month;
  125. } else {
  126. --day;
  127. }
  128. }
  129. }
  130. Date operator- (int& d) {
  131. Date a(day, month, year);
  132. while (d != 0) {
  133. if ((month <= 7 && month % 2 == 1) || (month >= 8 && month % 2 == 0)) {
  134. if (a.day > d) {
  135. a.day -= d;
  136. d = 0;
  137. } else {
  138. if (a.month == 3) {
  139. if ((((a.year % 4 == 0 && a.year % 100 != 0) || a.year % 400 == 0))) {
  140. d -= a.day;
  141. a.day = 29;
  142. --a.month;
  143. } else {
  144. d -= a.day;
  145. a.day = 28;
  146. --a.month;
  147. }
  148. } else if (a.month == 8) {
  149. d -= a.day;
  150. a.day = 31;
  151. a.month = 7;
  152. } else if (a.month == 1) {
  153. d -= a.day;
  154. a.day = 31;
  155. a.month = 12;
  156. --a.year;
  157. } else {
  158. d -= a.day;
  159. a.day = 30;
  160. --a.month;
  161. }
  162. }
  163. } else {
  164. d -= a.day;
  165. a.day = 31;
  166. --a.month;
  167. }
  168. }
  169. return a;
  170. }
  171. };
  172.  
  173. int main() {
  174. Date a(2, 3, 2012);
  175. --a;
  176. cout << a.GetDay() << '\t' << a.GetMonth() << '\t' << a.GetYear() << '\n';
  177. Date b = a - 5;
  178. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement