Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <cstdlib>
- #include <cmath>
- #include <iomanip>
- using namespace std;
- class Date
- {
- public:
- unsigned int y;
- unsigned int m;
- unsigned int d, julian;
- int Init()
- {
- if ((m > 12) || (m <= 0) || (d > 31) || (d <= 0) || (y <= 0))
- {
- std::cout << "No" << endl;
- return 1;
- }
- else return 0;
- }
- Date after(int days)
- {
- Date d;
- long int bet;
- bet = julian + days;
- d.julian = bet;
- d = Grigor_date(bet);
- return d;
- }
- Date before(int days)
- {
- Date d1;
- long int bet;
- bet = julian - days;
- d1.julian = bet;
- d1 = Grigor_date(bet);
- return d1;
- }
- int bissextile_year()
- {
- if (y % 100 == 0)
- {
- if (y % 4 == 0 || y % 400 == 0)
- return true;
- return false;
- }
- }
- void Display()
- {
- cout << y << " " << m << " " << d << endl;
- }
- int comparisonDate(Date d1)
- {
- int srav;
- long int t;
- t = julian - d1.julian;
- if (t < 0) srav = -1;
- else if (t == 0) srav = 0;
- else if (t > 0) srav = 1;
- return srav;
- }
- int days_between(Date d1)
- {
- long int t;
- t = julian - d1.julian;
- return abs(t);
- }
- void Lak()
- {
- int a = (14 - m) / 12;
- int y1 = y + 4800 - a;
- int m1 = m + 12 * a - 3;
- long int jdn = d + (153 * m1 + 2) / 5 + 365 * y1 + y1 / 4 - y1 / 100 + y1 / 400 - 32045;
- julian = jdn;
- }
- Date Grigor_date(unsigned long int j)
- {
- Date d1;
- unsigned long int a = j + 32044;
- unsigned long int b = (4 * a + 3) / 146097;
- unsigned long int c = a - (146097)*b / 4;
- unsigned long int d = (4 * c + 3) / 1461;
- unsigned long int e = c - (1461 * d) / 4;
- unsigned long int f = (5 * e + 2) / 153;
- d1.d = e - (153 * f + 2) / 5 + 1;
- d1.m = f + 3 - 12 * (f / 10);
- d1.y = 100 * b + d - 4800 + f / 10;
- d1.julian = j;
- return d1;
- }
- void Read_str()
- {
- string s1, s2;
- std::cin >> s1;
- int i = 0, q = 0;
- while (s1[i] != '.') { q++; i++; }
- s2 = s1.substr(0, q);
- y = atoi(s2.c_str());
- s1.erase(0, q + 1);
- i = 0; q = 0;
- while (s1[i] != '.') { q++; i++; }
- s2 = s1.substr(0, q);
- m = atoi(s2.c_str());
- s1.erase(0, q + 1);
- d = atoi(s1.c_str());
- Lak();
- }
- void read_date()
- {
- std::cin >> y >> m >> d;
- Lak();
- }
- void Read_date()
- {
- string s, s1, month1; int q = 0;
- getline(cin, s);
- int i = 0;
- while (s[i])
- {
- if (s[i] != ' ') s1[i] = s[i];
- else
- {
- if (q == 0) { y = atoi(s1.c_str()); q = 1; }
- else if (q == 1) { month1 = s1; q = 2; }
- else if (q == 2) d = atoi(s1.c_str());
- s.erase(0, i + 1);
- i = -1;
- }
- i++;
- }
- if (month1 == "января") m = 01;
- else if (month1 == "февраля") m = 02;
- else if (month1 == "марта") m = 03;
- else if (month1 == "апреля") m = 04;
- else if (month1 == "мая") m = 05;
- else if (month1 == "июня") m = 06;
- else if (month1 == "июля") m = 07;
- else if (month1 == "августа") m = 8;
- else if (month1 == "сентября") m = 9;
- else if (month1 == "октября") m = 10;
- else if (month1 == "ноября") m = 11;
- else if (month1 == "декабря") m = 12;
- Lak();
- }
- };
- class Payment
- {
- public:
- string name;
- double oklad, percent, nalog, add_summa, stop_summa;
- unsigned int otrab_days, wark_days;
- Date date;
- int Init()
- {
- if ((percent < 0) && (percent > 100))
- {
- std::cout << "No" << endl;
- return 1;
- }
- else return 0;
- }
- void Read()
- {
- std::cin >> name >> oklad;
- date.Read_str();
- std::cin >> percent >> otrab_days >> wark_days;
- }
- void Display()
- {
- std::cout << name << " " << setprecision(2) << oklad << " " << stage() << "days " << setprecision(2) << add_summa << " " << setprecision(2) << stop_summa << " " << setprecision(2) << res() << endl;
- }
- double add()
- {
- add_summa = oklad + oklad * percent*0.01;
- double zday = add_summa / wark_days;
- return add_summa = otrab_days * zday;
- }
- double stoped()
- {
- nalog = 0.13;
- stop_summa = add()*nalog;
- return stop_summa = (add_summa - stop_summa)*0.01 + stop_summa;
- }
- double res()
- {
- return add_summa - stop_summa;
- }
- int stage()
- {
- Date d1;
- d1.y = 2015; d1.m = 12; d1.d = 31; d1.Lak();
- return date.days_between(d1);
- }
- };
- void main()
- {
- Payment p;
- cout << fixed;
- p.Read();
- int n;
- std::cin >> n;
- Payment *pp = new Payment[n];
- for (int i = 0; i<n; i++)
- pp[i].Read();
- p.add();
- for (int i = 0; i<n; i++)
- pp[i].add();
- p.stoped();
- for (int i = 0; i<n; i++)
- pp[i].stoped();
- p.Display();
- for (int i = 0; i<n; i++)
- pp[i].Display();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement