Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <ctime>
- using namespace std;
- bool przestepny (int rok)
- {
- int reszta1=rok%4;
- int reszta2=rok%100;
- int reszta3=rok%400;
- if (((reszta1 == 0 && reszta2 != 0)|| reszta3 ==0) && rok >1582)
- {
- return 1;
- }
- else if (rok<=1582 && reszta1 ==0)
- {
- return 1;
- }
- else
- {
- return 0;
- }
- };
- class data
- {
- public:
- //private:
- int dzien;
- int miesiac;
- int rok;
- data(int day, int month, int year)
- {
- dzien = day;
- miesiac = month;
- rok = year;
- }
- data()
- {
- time_t czas;
- struct tm * data;
- char d[12];
- char m[12];
- char y[12];
- time(&czas);
- data = localtime(&czas);
- strftime(d, 12, "%d", data);
- strftime(m, 12, "%m", data);
- strftime(y, 12, "%Y", data);
- dzien = ((int)d[0] - 48) * 10 + (int)d[1] - 48;
- miesiac = ((int)m[0] - 48) * 10 + (int)m[1] - 48;
- rok = ((int)y[0] - 48) * 1000 + ((int)y[1] - 48) * 100 + ((int)y[2] - 48) * 10 + ((int)y[3] - 48);
- }
- data(const data &Data)
- {
- dzien = Data.dzien;
- miesiac = Data.miesiac;
- rok = Data.rok;
- }
- void operator=( const data &d )
- {
- this->dzien = d.dzien;
- this->miesiac = d.miesiac;
- this->rok = d.rok;
- }
- int operator - (const data &Data)
- {
- int miesiac[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
- int rok1 = this -> rok;
- int rok2 = Data.rok;
- int mies1 = this -> miesiac;
- int mies2 = Data.miesiac;
- int dzien1 = this -> dzien;
- int dzien2 = Data.dzien;
- int dni = 0;
- while(rok1 != rok2 || mies1 != mies2 || dzien1 != dzien2)
- {
- if(dzien1 == 1)
- {
- if(mies1 == 1)
- {
- mies1 = 12;
- rok1 --;
- }
- else
- {
- mies1 --;
- }
- if(przestepny(rok1) && mies1 == 2)
- {
- dzien1 = miesiac[mies1] + 1;
- }
- else
- {
- dzien1 = miesiac[mies1];
- }
- }
- else
- {
- dzien1--;
- }
- if(dzien1 < 5 || dzien1 > 14 || mies1 != 10 || rok1 != 1582)
- {
- dni++;
- }
- }
- return dni;
- }
- data operator + (const int & dni)
- {
- int miesiac[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
- int year = this -> rok;
- int month = this -> miesiac;
- int day = this -> dzien;
- int counter = dni;
- while(counter != 0)
- {
- if((!przestepny(year) && day == miesiac[month]) || (przestepny(year) && day == miesiac[month] + 1 && month == 2) || (przestepny(year) && day == miesiac[month] && month != 2))
- {
- day = 1;
- if(month == 12)
- {
- month = 1;
- year ++;
- }
- else
- {
- month ++;
- }
- }
- else
- {
- day++;
- }
- if(day < 5 || day > 14 || month != 10 || year != 1582)
- {
- counter--;
- }
- }
- return data(day, month, year);
- }
- data operator - (const int & dni)
- {
- int miesiac[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
- int year = this -> rok;
- int month = this -> miesiac;
- int day = this -> dzien;
- int counter = dni;
- while(counter != 0)
- {
- if(day == 1)
- {
- if(month == 1)
- {
- month = 12;
- year --;
- }
- else
- {
- month --;
- }
- if(przestepny(year) && month == 2)
- {
- day = miesiac[month] + 1;
- }
- else
- {
- day = miesiac[month];
- }
- }
- else
- {
- day--;
- }
- if(day < 5 || day > 14 || month != 10 || year != 1582)
- {
- counter --;
- }
- }
- return data(day, month, year);
- }
- void wynik()
- {
- cout << dzien << " " << miesiac << " " << rok << endl;
- }
- };
- void wypisz(data a)
- {
- cout<<a.dzien<<" "<<a.miesiac<<" "<<a.rok;
- }
- data dodawanie(data a, data b)
- {
- a.rok+=b.rok;
- if(a.miesiac+b.miesiac>12)
- {
- a.miesiac=a.miesiac+b.miesiac-12;
- a.rok++;
- }
- else
- {
- a.miesiac+=b.miesiac;
- }
- if(a.dzien+b.dzien<32 && a.miesiac%2==1)
- {
- a.dzien+=b.dzien;
- }
- if(a.dzien+b.dzien<31 && a.miesiac%2==0 && a.miesiac!=2)
- {
- a.dzien+=b.dzien;
- }
- if(a.dzien+b.dzien<29 && a.miesiac==2 && a.rok<1583 && a.rok%4!=0)
- {
- a.dzien+=b.dzien;
- }
- if(a.dzien+b.dzien<30 && a.miesiac==2 && a.rok<1583 && a.rok%4==0)
- {
- a.dzien+=b.dzien;
- }
- if(a.dzien+b.dzien<30 && a.miesiac==2 && a.rok>1583 && ((a.rok%4==0 && a.rok%100!=0) || a.rok%400==0))
- {
- a.dzien+=b.dzien;
- }
- if(a.dzien+b.dzien<29 && a.miesiac==2 && a.rok>1583 && ((a.rok%4!=0) || a.rok%400!=0))
- {
- a.dzien+=b.dzien;
- }
- if(a.dzien+b.dzien>31 && a.miesiac%2==1)
- {
- a.dzien=a.dzien+b.dzien-31;
- a.miesiac++;
- }
- if(a.dzien+b.dzien>30 && a.miesiac%2==0 && a.miesiac!=2)
- {
- a.dzien=a.dzien+b.dzien-30;
- a.miesiac++;
- }
- if(a.dzien+b.dzien>28 && a.miesiac==2 && a.rok<1582 && a.rok%4!=0)
- {
- a.dzien=a.dzien+b.dzien-28;
- a.miesiac++;
- }
- if(a.dzien+b.dzien>29 && a.miesiac==2 && a.rok<1582 && a.rok%4==0)
- {
- a.dzien=a.dzien+b.dzien-29;
- a.miesiac++;
- }
- if(a.dzien+b.dzien>29 && a.miesiac==2 && a.rok>1582 && ((a.rok%4==0 && a.rok%100!=0) || a.rok%400==0))
- {
- a.dzien=a.dzien+b.dzien-29;
- a.miesiac++;
- }
- if(a.dzien+b.dzien>28 && a.miesiac==2 && a.rok<1582 && ((a.rok%4!=0) || a.rok%400!=0))
- {
- a.dzien=a.dzien+b.dzien-28;
- a.miesiac++;
- }
- if(a.miesiac>12)
- {
- a.miesiac=a.miesiac-12;
- a.rok++;
- }
- return data(a.dzien, a.miesiac, a.rok);
- }
- //aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- data odejmowanie(data a, data b)
- {
- a.rok-=b.rok;
- if(a.miesiac-b.miesiac<1)
- {
- a.miesiac=a.miesiac-b.miesiac+12;
- a.rok--;
- }
- else
- {
- a.miesiac-=b.miesiac;
- }
- if(a.dzien-b.dzien>0)
- {
- a.dzien-=b.dzien;
- }
- if(a.dzien-b.dzien<1 && a.miesiac%2==1)
- {
- a.dzien=a.dzien-b.dzien+31;
- a.miesiac--;
- }
- if(a.dzien-b.dzien<1 && a.miesiac%2==0 && a.miesiac!=2)
- {
- a.dzien=a.dzien-b.dzien+30;
- a.miesiac--;
- }
- if(a.dzien-b.dzien<1 && a.miesiac==2 && a.rok<1582 && a.rok%4!=0)
- {
- a.dzien=a.dzien-b.dzien+28;
- a.miesiac--;
- }
- if(a.dzien-b.dzien<1 && a.miesiac==2 && a.rok<1582 && a.rok%4==0)
- {
- a.dzien=a.dzien-b.dzien+29;
- a.miesiac--;
- }
- if(a.dzien-b.dzien<1 && a.miesiac==2 && a.rok>1582 && ((a.rok%4==0 && a.rok%100!=0) || a.rok%400==0))
- {
- a.dzien=a.dzien-b.dzien+29;
- a.miesiac--;
- }
- if(a.dzien-b.dzien<1 && a.miesiac==2 && a.rok<1582 && ((a.rok%4!=0) || a.rok%400!=0))
- {
- a.dzien=a.dzien-b.dzien+28;
- a.miesiac--;
- }
- if(a.miesiac<1)
- {
- a.miesiac=a.miesiac+12;
- a.rok--;
- }
- return data(a.dzien, a.miesiac, a.rok);
- }
- int main()
- {
- int dzien1, dzien2, miesiac1, miesiac2, rok1, rok2;
- int liczba, oper;
- int decyzja=0;
- cout<<"1 -> dwie daty, 2 -> data i liczba"<<endl;
- cout<<"dzien miesiac rok operator(+->1, - ->2) druga data lub liczba"<<endl;
- cin>>decyzja;
- cout<<"Twoja decyzja"<<decyzja<<endl;
- if(decyzja==1)
- {
- cin>>dzien1>>miesiac1>>rok1>>oper>>dzien2>>miesiac2>>rok2;
- }
- if(decyzja==2)
- {
- cin>>dzien1>>miesiac1>>rok1>>oper>>liczba;
- }
- int miesiac[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
- data data1, data2;
- if(decyzja==2)// podano datΓͺ, operator i liczbe
- {
- data1.dzien=dzien1;
- data1.miesiac=miesiac1;
- data1.rok=rok1;
- if(data1.miesiac>12 || data1.miesiac<1)
- {
- cout<<endl<<"zly miesiac"<<endl;
- }
- if(data1.dzien>miesiac[data1.miesiac] || data1.dzien<1)
- {
- cout<<endl<<"zly dzien"<<endl;
- }
- if(oper==1)
- {
- data1=data1+liczba;
- data1.wynik();
- }
- else if(oper==2)
- {
- data1=data1-liczba;
- data1.wynik();
- }
- else
- {
- cout<<endl<<"blad2"<<endl;
- }
- }
- else if(decyzja==1)
- {
- data1.dzien=dzien1;
- data1.miesiac=miesiac1;
- data1.rok=rok1;
- if(data1.miesiac>12 || data1.miesiac<1)
- {
- cout<<endl<<"zly miesiac"<<endl;
- }
- if(data1.dzien>miesiac[data1.miesiac] || data1.dzien<1)
- {
- cout<<endl<<"zly dzien"<<endl;
- }
- data2.dzien=dzien2;
- data2.miesiac=miesiac2;
- data2.rok=rok2;
- if(data2.miesiac>12 || data2.miesiac<1)
- {
- cout<<endl<<"zly miesiac"<<endl;
- }
- if(data2.dzien>miesiac[data2.miesiac] || data2.dzien<1)
- {
- cout<<endl<<"zly dzien"<<endl;
- }
- if(oper==2)
- {
- cout<<endl;
- wypisz(odejmowanie(data1, data2));
- cout<<endl;
- }
- else if(oper==1)
- {
- cout<<endl;
- wypisz(dodawanie(data1, data2));
- cout<<endl;
- }
- else
- {
- cout<<endl<<"blad3"<<endl;
- }
- }
- else
- {
- cout<<endl<<"blad4"<<endl;
- }
- return 0;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement