Определение дня недели по формуле Зеллера - Turbo Pascal
Формулировка задачи:
программа, которая, используя формулу Зеллера, определяет день недели для произвольной даты. Указания: день недели григорианского календаря n (n=0 – Вс, 1 – Пн, …, 6 – Сб) определяется по формуле n=(w+2)%7, где w=[2.6*m-0.2]+d+y+[y/4]+[c/4]-2*(c%7), "%" – взятие остатка от деления, […] – выделение целой части числа, d – день месяца (1–31), m – номер месяца (1–12), y – год столетия (0–99), c – номер столетия (20 для XXI века).
{ формула Зеллера (en.wikipedia.org/wiki/Zeller's_congruence):
dday= ([(m+1)*26/10]+d+y+[y/4]+[c/4]-2*c)%7 }
Решение задачи: «Определение дня недели по формуле Зеллера»
textual
Листинг программы
Вот моя подобная программа: #include <iostream> #include <Windows.h> using namespace std; int main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); int c, y, m, d;//1)Объявляем переменные int a; fail: cout << "\tEnter *century(first two numbers of year, **XX): ";//2)Приглашение к вводу данных cin >> c; cout << '\n'; cout << "\tEnter year of century (0-99): "; cin >> y; cout << '\n'; cout << "\tEnter mounth: "; cin >> m; cout << '\n'; cout << "\tEnter day: "; cin >> d; cout << '\n'; if ((m > 12 || d > 31 || y < 0 || y > 99 ) || (m == 2 && d > 29) || (m == 4 && d >= 31) || (m == 6 && d >= 31) || (m == 9 && d >= 31) || (m == 11 && d >= 31))//3)Защита от дурака { MessageBox(0, L"Incorrect information!", L"Error!", MB_OK / MB_ICONSTOP); cout << "\n\n"; goto fail;//4)При некорректных данных возвращаем обратно к вводу } else { if (m < 3)//5)Нюанс формулы Зеллера - в оригинальном алгоритме январь и февраль считаются как месяцы 13 и 14 предыдущего года { m = m + 12; y--; } a = (((m + 1) * 26 / 10) + d + y + (y/4) + (c / 4) - 2 * c) % 7;//6)Формула Зеллера cout << "Answer is:"; switch (a)//7)Вывод соответствующего ответа { case 2: cout << "\tMonday/Понедельник\n"; break; case 3: cout << "\tTuesday/Вторник\n"; break; case 4: cout << "\tWednesday/Среда\n"; break; case 5: cout << "\tThursday/Четверг\n"; break; case 6: cout << "\tFriday/Пятница\n"; break; case 0: cout << "\tSaturday/Суббота\n"; break; case 1: cout << "\tSunday/Воскресенье\n"; break; default: MessageBox(0, L"Unknown error!\nВероятно вы ввели слишком\nбольшое столетие!", L"Error!", MB_OK / MB_ICONWARNING);//8)Аварийный выход /*if (m == 14 && d == 29) { cout << "Вероятнее всего это не високосный год.\n "; }*/ cout << "\t Ошибка! Значение переменной равно: " << a <<'\n'; break; } } return 0; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д