C/C++
ПОМОГИТЕ ПО ПРОГРАММИРОВАНИЮ!! C++
Написать программу, содержащую функцию NextDate(D, M, Y), которая по информации о правильной дате, включающей день D, номер месяца M и год Y, определяет следующую дату
#include <iostream>
using namespace std;
bool is_visokos_year(int Y)
{
return (Y % 4 == 0 && (Y % 100 != 0 || Y % 400 == 0)) ? true : false;
}
int main()
{
int days_in_month[12] = {31, 28, 31, 30, 31, 30, 31, 31,
30, 31, 30, 31};
bool visokos = false;
int D,M,Y;
cout << "Введите день: ";
cin >> D;
cout << "Введите номер месяца: ";
cin >> M;
cout << "Введите год: ";
cin >> Y;
visokos = is_visokos_year(Y);
// Сначала идёт проверка введенной даты.
if (M < 1 || M > 12)
{
cerr << "Неверное значение месяца." << endl;
return 1;
}
if (visokos)
{
if (M == 2)
{
if (D < 1 || D > 29)
{
cerr << "Неверно указан день." << endl;
return 1;
}
}
else if (D < 1 || D > days_in_month[M-1])
{
cerr << "Неверно указан день." << endl;
return 1;
}
}
else
{
if (D < 1 || D > days_in_month[M-1])
{
cerr << "Неверно указан день." << endl;
return 1;
}
}
// Рассчитываем следующую дату.
if(visokos && M == 2)
{
if(D == 29)
{
D = 1;
M++;
}
else
{
D++;
}
}
else if (D == days_in_month[M-1])
{
D = 1;
M++;
if (M > 12)
{
M = 1;
Y++;
}
}
else
{
D++;
}
// Все расчёты закончены. Выводин результат -- новую дату.
if (D < 10)
cout << '0' << D << '.';
else
cout << D << '.';
if (M < 10)
cout << '0' << M << '.';
else
cout << M << '.';
cout << Y << endl;
return 0;
}
using namespace std;
bool is_visokos_year(int Y)
{
return (Y % 4 == 0 && (Y % 100 != 0 || Y % 400 == 0)) ? true : false;
}
int main()
{
int days_in_month[12] = {31, 28, 31, 30, 31, 30, 31, 31,
30, 31, 30, 31};
bool visokos = false;
int D,M,Y;
cout << "Введите день: ";
cin >> D;
cout << "Введите номер месяца: ";
cin >> M;
cout << "Введите год: ";
cin >> Y;
visokos = is_visokos_year(Y);
// Сначала идёт проверка введенной даты.
if (M < 1 || M > 12)
{
cerr << "Неверное значение месяца." << endl;
return 1;
}
if (visokos)
{
if (M == 2)
{
if (D < 1 || D > 29)
{
cerr << "Неверно указан день." << endl;
return 1;
}
}
else if (D < 1 || D > days_in_month[M-1])
{
cerr << "Неверно указан день." << endl;
return 1;
}
}
else
{
if (D < 1 || D > days_in_month[M-1])
{
cerr << "Неверно указан день." << endl;
return 1;
}
}
// Рассчитываем следующую дату.
if(visokos && M == 2)
{
if(D == 29)
{
D = 1;
M++;
}
else
{
D++;
}
}
else if (D == days_in_month[M-1])
{
D = 1;
M++;
if (M > 12)
{
M = 1;
Y++;
}
}
else
{
D++;
}
// Все расчёты закончены. Выводин результат -- новую дату.
if (D < 10)
cout << '0' << D << '.';
else
cout << D << '.';
if (M < 10)
cout << '0' << M << '.';
else
cout << M << '.';
cout << Y << endl;
return 0;
}
Самое сложное в этой задаче — определение високосности.
Тут не только основной признак: Y % 4 == 0, но и дополнительный критерий Y % 100 == 0, который в свою очередь отсылает к проверке условия Y % 400 == 0. Вот что должно приводить к корректировке числа дней в феврале.
Всё остальное — тупая рутина.
Тут не только основной признак: Y % 4 == 0, но и дополнительный критерий Y % 100 == 0, который в свою очередь отсылает к проверке условия Y % 400 == 0. Вот что должно приводить к корректировке числа дней в феврале.
Всё остальное — тупая рутина.
Похожие вопросы
- Здравствуйте помогите пожалуйста программирование c++
- Программирование C++ ПРОШУ ПОМОЧЬ!
- Помогите с программированием на C++
- Задача по программированию C++
- Что такое #include <iostream>, std using namespace std В языке программирования C++?
- Контрольная по алгоритмизации и программированию! C++
- Язык программирования c++
- Нормальный ли язык программирования C для новичка ,что бы в дальнейшем перейти на C# ,C++,И в чем различие между ними?
- Помогите с языком программирования C++
- Помогите сделать задние по программированию (c++)
Код показывает, что Вы не сильны в процедурном программировании.
Зачем многократно повторять один и тот же алгоритм?
Код, подлежащий инкапсуляции в функции NextDate, начинается с комментария « // Рассчитываем следующую дату. » и заканчивается над комментарием « // Все расчёты закончены. Выводим результат -- новую дату ».
Предполагаемый заголовок функции:
void NextDate (int& D, int& M, int& Y)
Ширина поля, символы-заполнители и выравнивание (ссылка)
void NextDate (int& D, int& M, int& Y, bool visokos)
{
if(visokos && (*M) == 2)
{
if((*D) == 29)
{
(*D) = 1;
(*M)++;
}
else
{
(*D)++;
}
}
else if ((*D) == days_in_month[(*M)-1])
{
(*D) = 1;
(*M)++;
if ((*M) > 12)
{
(*M) = 1;
(*Y)++;
}
}
else
{
(*D)++;
}
}
и вызывать её в main() так:
NextDate (D, M, Y, visokos);
Всё-таки очевидно, что Вы не сильны в процедурном программировании.
Неужели стоило столько писать-трудиться??? Нельзя унифицировать функцию ввода?
Плюс самоуверенность… мдаа…
В заголовок добавляем две строки:
#include <iomanip>
#define MILF setw(2) << setfill('0')
В блоке вывода:
cout << MILF << D << '.' << MILF << M << '.' << Y;
• И никаких if.