Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- struct Date
- {
- int y;
- int m;
- int d;
- };
- void vivod(int n, Date *data)
- {
- data = new Date[n];
- for (int i = 0; i < n; i++)
- {
- cout << "Year: " << data[i].y << endl;
- cout << "Month: " << data[i].m << endl;
- cout << "Day: " << data[i].d << endl;
- cout << "Full: " << data[i].d << "." << data[i].m << "." << data[i].y;
- }
- }
- Date add(Date &time)
- {
- int day, param, month, year, res_d, res_m;
- int gl_time;
- int d_in_m[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
- cout << "Choose: 1 - add year, 2 - add month, 3 - add day.\n";
- cin >> param;
- switch (param)
- {
- case 1:
- cout << "Input year to add: ";
- cin >> year;
- time.y += year;
- break;
- case 2:
- do {
- cout << "Input month to add: ";
- cin >> month;
- if (month < 0) {
- cout << "Bad months input.Try again.\n";
- res_m = 0;
- }
- else res_m = 1;
- } while (res_m == 0);
- int days_in_inputed_month = 0; // кол-во дней во введенном месяце
- for (int i = 0; i < month; i++) {
- days_in_inputed_month += d_in_m[i];
- if (i == (12 - 1)) i = 0;
- }
- int days_in_current_months = 0; //кол-во дней в месяцax к которому прибавляем
- for (int i = 0; i < time.m; i++) {
- days_in_current_months += d_in_m[i];
- days_in_current_months += time.d;
- }
- gl_time = 365 * time.y + days_in_inputed_month + days_in_current_months; //всего дней в текущем введенном году
- time.y = (gl_time - gl_time % 365) / 365;
- int days_before_inc = gl_time - time.y * 365;
- int i, counter = 0; //поиск количества месяцев в новой дате
- for (i = 0; i < 12; i++)
- {
- if (counter > days_before_inc) break;
- else counter += d_in_m[i];
- }
- time.m = i; //кол-во новых месяцев
- counter = 0; // поиск остатка дней
- for (int j = 0; j < i; j++) counter += d_in_m[j];
- time.d = gl_time - 365 * time.y - counter;
- break;
- case 3:
- do {
- cout << "Input day: ";
- cin >> day;
- if (day < 0) {
- cout << "Bad days input.Try again.\n";
- res_d = 0;
- }
- else res_d = 1;
- } while (res_d == 0);
- for (int i = 0; i < time.m; i++) {
- days_in_current_months += d_in_m[i];
- days_in_current_months += time.d;
- }
- gl_time = 365 * time.y + days_in_current_months; //всего дней в текущем введенном году
- gl_time += day; //новое количество дней
- time.y = (gl_time - gl_time % 365) / 365;
- int days_before_in = gl_time - time.y * 365;
- int count = 0; //поиск количества месяцев в новой дате
- for (int i = 0; i < 12; i++)
- {
- if (count > days_before_in) break;
- else count += d_in_m[i];
- }
- time.m = i; //кол-во новых месяцев
- counter = 0; // поиск остатка дней
- for (int j = 0; j < i; j++) counter += d_in_m[j];
- time.d = gl_time - 365 * time.y - counter;
- break;
- default: cout << "Bad input.\n";
- break;
- }
- return time;
- }
- int main()
- {
- Date *data;
- int n;
- cout << "n = ";
- cin >> n;
- vivod(n, *data);
- Date new_time;
- set(new_time);
- get(new_time);
- cout « "Разница в днях составяет: " « inc(time, new_time) « endl;
- time = add(time);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement