С++
Завдання №1
Створіть клас Date, який буде містити інформацію
про дату (день, місяць, рік).
За допомогою механізму перевантаження операторів,
визначте операцію різниці двох дат (результат у вигляді
кількості днів між датами), а також операцію збільшення
дати на певну кількість днів.
Ответы
#include<iostream>
#include<ctime>
class Date {
int day;
int month;
int year;
public:
Date(int d, int m, int y) : day(d), month(m), year(y) {}
// function to convert date to number of days
int dateToDays() {
int days = day;
for (int i = 0; i < month - 1; i++) {
days += 31;
if (i == 1) {
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
days -= 2;
else
days -= 3;
}
else if (i == 3 || i == 5 || i == 8 || i == 10)
days -= 1;
}
days += (year - 1) * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400;
return days;
}
// function to convert number of days to date
static Date daysToDate(int days) {
int year = days / 365 + 1;
days -= (year - 1) * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400;
int month = 1;
while (true) {
int monthDays = 31;
if (month == 2) {
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
monthDays -= 2;
else
monthDays -= 3;
}
else if (month == 4 || month == 6 || month == 9 || month == 11)
monthDays--;
if (days <= monthDays)
break;
days -= monthDays;
month++;
}
return Date(days, month, year);
}
// Overloading '-' operator
int operator - (Date date) {
return dateToDays() - date.dateToDays();
}
// Overloading '+' operator
Date operator + (int days) {
return daysToDate(dateToDays() + days);
}
void print() {
std::cout << day << "/" << month << "/" << year << std::endl;
}
};
int main() {
Date date1(1, 1, 2023);
Date date2(14, 6, 2023);
int days = date2 - date1;
std::cout << "Number of days between dates: " << days << std::endl;
Date newDate = date1 + 165;
std::cout << "New date: ";
newDate.print();
return 0;
}