Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <sstream>
- #include <iomanip>
- using namespace std;
- unsigned int daysOfMonth1[] = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
- unsigned int daysOfMonth2[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
- struct Date {
- unsigned int year;
- unsigned int month;
- unsigned int day;
- };
- void display(Date d) {
- cout << "year: " << d.year << "; ";
- cout << "month: " << d.month << "; ";
- cout << "day: " << d.day << endl;
- }
- void read(Date& d) {
- cout << "Enter year" << endl;
- cin >> d.year;
- cout << "Enter month" << endl;
- cin >> d.month;
- cout << "Enter day" << endl;
- cin >> d.day;
- }
- void init(Date& d, unsigned int year, unsigned int month, unsigned int day) {
- d.year = year;
- d.month = month;
- d.day = day;
- }
- void init(Date& d, string date) { // 2020.03.31
- stringstream str(date);
- char symbol;
- str >> d.year >> symbol >> d.month >> symbol >> d.day;
- }
- string toString(Date d) {
- stringstream str;
- str << d.year << "." << setprecision(2) << d.month << "." << setprecision(2) << d.day;
- return str.str();
- }
- bool isLeapYear(Date& date) {
- return (date.year % 4 == 0);
- }
- void setYear(Date& date, unsigned int year) {
- date.year = year;
- }
- unsigned int getYear(Date& date) {
- return date.year;
- }
- void setMonth(Date& date, unsigned int month) {
- date.month = month;
- }
- unsigned int getMonth(Date& date) {
- return date.month;
- }
- void setDay(Date& date, unsigned int day) {
- date.day = day;
- }
- unsigned int getDay(Date& date) {
- return date.day;
- }
- bool isDateEquals(Date& date1, Date& date2) {
- if (date1.year != date2.year) {
- return false;
- }
- if (date1.month != date2.month) {
- return false;
- }
- if (date1.day != date2.day) {
- return false;
- }
- return true;
- }
- bool isDateGreate(Date& date1, Date& date2) {
- if (date1.year < date2.year) {
- return false;
- }
- if (date1.year == date2.year) {
- if (date1.month < date2.month) {
- return false;
- }
- if (date1.month == date2.month) {
- if (date1.day <= date2.day) {
- return false;
- }
- }
- }
- return true;
- }
- bool isDateLess(Date& date1, Date& date2) {
- if (date1.year > date2.year) {
- return false;
- }
- if (date1.year == date2.year) {
- if (date1.month > date2.month) {
- return false;
- }
- if (date1.month == date2.month) {
- if (date1.day >= date2.day) {
- return false;
- }
- }
- }
- return true;
- }
- unsigned int convertDateToDays(Date& date) {
- unsigned int days = 0;
- for (int year = 0; year < date.year; year++) {
- if (year % 4 == 0) days += 366;
- else days += 365;
- }
- for (int month = 1; month < date.month; month++) {
- if (date.year % 4 == 0) days += daysOfMonth1[month];
- else days += daysOfMonth2[month];
- }
- days += date.day;
- return days;
- }
- unsigned int getDaysBetweenDates(Date& date1, Date& date2) {
- if (isDateEquals(date1, date2)) return 0;
- int days = convertDateToDays(date1) - convertDateToDays(date2);
- return (days > 0) ? (days) : (-days);
- }
- void addDay(Date& date, unsigned int days) {
- if (days == 0) return;
- for (int i = 1; i <= days; i++) {
- if (isLeapYear(date)) {
- if (date.day > daysOfMonth1[date.month]) {
- date.day %= daysOfMonth1[date.month];
- if (date.month == 12) {
- date.month = 1;
- date.year++;
- }
- else {
- date.month++;
- }
- }
- }
- else if (date.day > daysOfMonth2[date.month]) {
- date.day %= daysOfMonth2[date.month];
- if (date.month == 12) {
- date.month = 1;
- date.year++;
- }
- else {
- date.month++;
- }
- }
- date.day++;
- }
- }
- string isCompareDates(Date& date1, Date& date2) {
- if (isDateEquals(date1, date2)) return "равны";
- if (isDateGreate(date1, date2)) return "больше";
- if (isDateGreate(date1, date2)) return "меньше";
- return "неизвестно";
- }
- void subDay(Date& date, unsigned int days) {
- if (days == 0) return;
- for (int i = 1; i <= days; i++) {
- if (date.day == 1) {
- if (date.month == 1) date.month = 12;
- else date.month--;
- if (isLeapYear(date)) date.day = daysOfMonth1[date.month];
- else date.day = daysOfMonth2[date.month];
- }
- else date.day--;
- }
- }
- int main() {
- setlocale(LC_ALL, "rus");
- Date a;
- read(a);
- display(a);
- Date b;
- init(b, 2020, 31, 03);
- display(b);
- Date c;
- init(c, "2020.03.31");
- display(c);
- addDay(a, 2);
- display(a);
- subDay(b, 2);
- display(b);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement