Определение дня недели по формуле Зеллера - 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;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д