-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmain.cpp
executable file
·102 lines (83 loc) · 3.28 KB
/
main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
// Подключение заголовочных файлов
// из стандартной библиотеки:
#include <iostream> // ввод/вывод.
#include <windows.h> // нужно для функций SetConsoleOutputCP и SetConsoleCP.
// Переход на кириллицу:
void cyrillic() {
// Эти строки нужны для правильного отображения кириллицы:
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
// Также надо изменить шрифт в консоли на Lucida Console.
// Для замены шрифта кликаете правой кнопкой на надписи «Командная строка» окна консоли.
// В открывшемся меню выбираете «Свойства».
// В появившемся окне выбираете вкладку «Шрифт» и там выбираете «Lucida Console».
}
// Использование пространства имён
// стандартной библиотеки:
using namespace std;
// Количество дней в месяцах:
const int daysPerMonth[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
// Дата некоторого дня характеризуется тремя натуральными числами:
struct Date {
int g; // год.
int m; // порядковый номер месяца.
int n; // число.
};
// Функция определяющая, является ли год високосным?
bool isLeapYear(int year) {
if (year % 400 == 0)
return true;
if (year % 100 == 0)
return false;
return year % 4 == 0;
}
// Функция для получения следующего дня:
Date nextDay(Date date) {
date.n++;
if (date.n > daysPerMonth[date.m - 1] || (date.m == 2 && date.n == 29 && !isLeapYear(date.g))) {
date.n = 1;
date.m++;
if (date.m == 13) {
date.m = 1;
date.g++;
}
}
return date;
}
// Функция для получения предыдущего дня:
Date prevDay(Date date) {
date.n--;
if (date.n == 0) {
date.m--;
if (date.m == 0) {
date.m = 12;
date.g--;
}
if (date.m == 2 && isLeapYear(date.g))
date.n = 29;
else
date.n = daysPerMonth[date.m - 1];
}
return date;
}
int main() {
cyrillic(); // вкл. кириллицу.
Date myDate;
cout << "Введите год -> ";
cin >> myDate.g;
cout << "Введите месяц -> ";
cin >> myDate.m;
cout << "Введите день -> ";
cin >> myDate.n;
Date prevDate = prevDay(myDate);
cout << "Дата предыдущего дня = " << prevDate.n << "." << prevDate.m << "." << prevDate.g << " г." << endl;
Date nextDate = nextDay(myDate);
cout << "Дата следующего дня = " << nextDate.n << "." << nextDate.m << "." << nextDate.g << " г." << endl;
// Пауза перед выходом из программы
// (программа ждёт ввода любого символа):
cin.get();
cin.get();
// Возврат нуля,
// что означает успешное завершение программы:
return 0;
}