Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
Moldova
RAPORT
Lucrarea de laborator nr.3
la Programare Orientata pe Obiecte
A efectuat:
st. gr. AI-211 Cara Alexandr
A verificat:
S.Scrob
Chişinău © 2022
3. Să se creeze clasa Date – data, care conţine cîmpurile: ziua, luna, anul. Să se
definească operatorii "+" şi "-" ca metode ale clasei, iar operatorii "++" şi "--" în
ambele variante(prefixă şi postfixă) ca funcţii prietene. Operatorul "+" trebuie să
permită realizarea operaţiilor numai cu variabilele de tip predefinit int (x=y+5). De
prevăzut prelucrarea corectă a anilor bisecţi.
Codul programului :
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
struct date
{
int Year,Month,Day;
date(){}
date(int dd, int mm, int yy):Day(dd),Month(mm),Year(yy){}
bool Less(const date &d1,const date &d2) //принимает значение true and false
{
return Less(d1,d2,""); //возвращает ture если d1 раньше d2.
}
return false;
}
//функция возвращает количество дней между датами
int operator-(date d2)
{
date d1(*this); //указывает на адрес созданного обьекта
if (Less(d2,d1))swap(d1,d2);
//разница между датами в днях
int diff=0;
if (diffyear==0)
date d(*this);
d.Year+=int(days/365);
int diff=0;
for (int i=Month;i < 13;i++)
{
switch(i)
{
case 1:diff+=31; break;
case 2:diff+=28; break;
case 3:diff+=31; break;
case 4:diff+=30; break;
case 5:diff+=31; break;
case 6:diff+=30; break;
case 7:diff+=31; break;
case 8:diff+=31; break;
case 9:diff+=30; break;
case 10:diff+=31; break;
case 11:diff+=30; break;
case 12:diff+=31; break;
}
}
int out_of_year=(days - int(days/365) * 365);
for (int i=1; diff < out_of_year-31; i++)
{
switch(i)
{
case 1:diff+=31; break;
case 2:diff+=28; break;
case 3:diff+=31; break;
case 4:diff+=30; break;
case 5:diff+=31; break;
case 6:diff+=30; break;
case 7:diff+=31; break;
case 8:diff+=31; break;
case 9:diff+=30; break;
case 10:diff+=31; break;
case 11:diff+=30; break;
case 12:diff+=31; break;
}
}
d.Month+= out_of_year/diff;
return d;
}
};
ostream &operator<<(ostream &out,const date &d)
{
out << d.Day << '-' << d.Month << '-' << d.Year;
return out;
}
istream &operator>>(istream &in,date &d)
{
char c;
in >> d.Day;
in >> c;
if (c=='-')
{
in >> d.Month;
in >> c;
if (c=='-') in >> d.Year;
else cout << "wrong date format, excepted '-' after month, variable is not complete\n";
}
else cout << "wrong date format, excepted '-' after days, variable is not complete\n";
return in;
}
int main()
{
date D1,D2;
cout << "Enter some date dd-mm-yy: ";
cin >> D1;
cout << "Enter some other date dd-mm-yy: ";
cin >> D2;
cout << "first date " << D1 << ", second date " << D2 << '\n';
cout << D1-D2 << " days betwin dates\n";
cout << "enter number: ";
int n;
cin >> n;
cout << "first date + " << n << " days: " << D1 + n << '\n';
return 0;
}