Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdexcept>
- using namespace std;
- class Date {
- private:
- int day, month, year, days_from_begining;
- public:
- Date(int d, int m, int y) {
- if (y < 1970 || y > 2099) {
- throw "std::invalid_argument";
- } else if (m > 12 || m < 1) {
- throw "std::invalid_argument";
- } else if ((((m % 2 == 1 && m <= 7) || ((m % 2 == 0) && (m >= 8))) && 1 <= d && d <= 31)
- || (((m == 4) || (m == 6) || (m == 9)) && (1 <= d) && (d <= 30)) ||
- (((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) && 1 <= d && d <= 29)
- || (!((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) && 1 <= d && d <= 28)) {
- day = d;
- month = m;
- year = y;
- } else {
- throw "std::invalid_argument";
- }
- //Считаем, сколько дней прошло от начала
- int k = 0;
- for (int i = 1; i != month; ++i) {
- if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12) {
- k += 31;
- } else if (i == 4 || i == 6 || i == 9) {
- k += 30;
- } else if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)) {
- k += 29;
- } else {
- k += 28;
- }
- }
- k += day;
- int leap_years = 0;
- leap_years = (year - 1972) / 4 + 1;
- k += (year - 1970)*356 + leap_years;
- days_from_begining = k;
- }
- int GetDay() const {
- return day;
- }
- int GetMonth() const {
- return month;
- }
- int GetYear() const {
- return year;
- }
- bool operator++() {
- if (day == 31 && month == 12) {
- day = 1;
- month = 1;
- ++year;
- } else if ((month % 2 == 1 && month <= 7 || month % 2 == 0 && month >= 8) && day == 31) {
- day = 1;
- ++month;
- } else if ((month == 4 || month == 6 || month == 9) && day == 30) {
- day = 1;
- ++month;
- } else if ((year % 4 == 0 && year % 100 != 0) && day == 29) {
- day = 1;
- ++month;
- } else if (!(year % 4 == 0 && year % 100 != 0) && day == 28) {
- day = 1;
- ++month;
- } else {
- ++day;
- }
- }
- bool operator--() {
- if (day == 1 && month == 1) {
- day = 31;
- month = 12;
- --year;
- } else if ((month % 2 == 1 && month <= 7 || month % 2 == 0 && month >= 8) && day == 1) {
- day = 30;
- --month;
- } else if ((month == 4 || month == 6 || month == 9) && day == 1) {
- day = 31;
- --month;
- } else if ((year % 4 == 0 && year % 100 != 0) && day == 29) {
- day = 1;
- ++month;
- } else if (!(year % 4 == 0 && year % 100 != 0) && day == 28) {
- day = 1;
- ++month;
- } else if (month == 3 && day == 1) {
- if (year % 4 == 0 && year % 100 != 0) {
- --month;
- day = 29;
- } else {
- --month;
- day = 28;
- }
- } else {
- --day;
- }
- }
- Date operator+(Date &date2) const {
- }
- };
- int main() {
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement