Определение дня недели по формуле Зеллера - 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
Листинг программы
  1. Вот моя подобная программа:
  2.  
  3.  
  4. #include <iostream>
  5. #include <Windows.h>
  6.  
  7. using namespace std;
  8.  
  9. int main()
  10. {  
  11.     SetConsoleCP(1251);
  12.     SetConsoleOutputCP(1251);
  13.  
  14.     int c, y, m, d;//1)Объявляем переменные
  15.     int a;
  16.  
  17. fail:
  18.  
  19.     cout << "\tEnter *century(first two numbers of year, **XX): ";//2)Приглашение к вводу данных
  20.     cin >> c;
  21.     cout << '\n';
  22.    
  23.     cout << "\tEnter year of century (0-99): ";
  24.     cin >> y;
  25.     cout << '\n';
  26.  
  27.     cout << "\tEnter mounth: ";
  28.     cin >> m;
  29.     cout << '\n';
  30.  
  31.     cout << "\tEnter day: ";
  32.     cin >> d;
  33.     cout << '\n';
  34.  
  35.     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)Защита от дурака
  36.     {
  37.         MessageBox(0, L"Incorrect information!", L"Error!", MB_OK / MB_ICONSTOP);
  38.         cout << "\n\n";
  39.         goto fail;//4)При некорректных данных возвращаем обратно к вводу
  40.  
  41.     }
  42.     else
  43.     {
  44.  
  45.         if (m < 3)//5)Нюанс формулы Зеллера - в оригинальном алгоритме январь и февраль считаются как месяцы 13 и 14 предыдущего года
  46.         {
  47.             m = m + 12;
  48.             y--;
  49.         }
  50.  
  51.  
  52.         a = (((m + 1) * 26 / 10) + d + y + (y/4) + (c / 4) - 2 * c) % 7;//6)Формула Зеллера
  53.  
  54.         cout << "Answer is:";
  55.  
  56.         switch (a)//7)Вывод соответствующего ответа
  57.         {
  58.         case 2:
  59.             cout << "\tMonday/Понедельник\n";
  60.             break;
  61.  
  62.         case 3:
  63.             cout << "\tTuesday/Вторник\n";
  64.             break;
  65.  
  66.         case 4:
  67.             cout << "\tWednesday/Среда\n";
  68.             break;
  69.  
  70.         case 5:
  71.             cout << "\tThursday/Четверг\n";
  72.             break;
  73.  
  74.         case 6:
  75.             cout << "\tFriday/Пятница\n";
  76.             break;
  77.  
  78.         case 0:
  79.             cout << "\tSaturday/Суббота\n";
  80.             break;
  81.  
  82.         case 1:
  83.             cout << "\tSunday/Воскресенье\n";
  84.             break;
  85.  
  86.         default:
  87.             MessageBox(0, L"Unknown error!\nВероятно вы ввели слишком\nбольшое столетие!", L"Error!", MB_OK / MB_ICONWARNING);//8)Аварийный выход
  88.             /*if (m == 14 && d == 29)
  89.             {
  90.                 cout << "Вероятнее всего это не високосный год.\n ";
  91.             }*/
  92.             cout << "\t Ошибка! Значение переменной равно: " << a <<'\n';
  93.             break;
  94.         }
  95.     }
  96.     return 0;
  97. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы