SHARE
TWEET

Untitled

a guest Feb 18th, 2019 63 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top