Определение дня недели по формуле Зеллера - 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;
}

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


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

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

15   голосов , оценка 4.333 из 5
Похожие ответы