Реализации алгоритмов/Алгоритм пасхалии: различия между версиями

Материал из Викиучебника — открытых книг для открытого мира
→‎К переименованию: Использован шаблон.
м Ivan Shmakov переименовал страницу Примеры реализации алгоритма пасхалии в Реализации алгоритмов/Алгоритм пасхалии: Согласно [[Викиучебн…
(нет различий)

Версия от 10:02, 4 июля 2014

Программная реализация
  • Perl
Rich Bowen’s модуль Date::Easter доступен на сайте CPAN .[1]


  • Excel
=DOLLAR(("4/"&A1)/7+MOD(19*MOD(A1,19)-7,30)*14%,)*7-6
Предполагается, что ячейка A1 содержит год.[2] Формула вычисляет дату католической Пасхи и дает верный результат для 1900—2203 годов.


  • Python
def IanTaylorEasterJscr(year):
    a = year % 19
    b = year >> 2
    c = b // 25 + 1
    d = (c * 3) >> 2
    e = ((a * 19) - ((c * 8 + 5) // 25) + d + 15) % 30
    e += (29578 - a - e * 32) >> 10
    e -= ((year % 7) + b - d + e + 2) % 7
    d = e >> 5
    day = e - d * 31
    month = d + 3
    return year, month, day



  • C++
class Date
{
public:
    int day;
    int month;
    int year;
};

// возвращает дату григорианского календаря
// по книге Jean Meeus Astronomical Algorithms
Date CatholicEaster( int year )
{
    Date easterDate;

    int a = year % 19;
    int b = year / 100;
    int c = year % 100;
    int d = b / 4;
    int e = b % 4;
    int f = (b + 8) / 25;
    int g = (b - f + 1) / 3;
    int h = (19 * a + b - d - g + 15) % 30;
    int i = c / 4;
    int k = c % 4;
    int l = (32 + 2 * e + 2 * i - h - k) % 7;
    int m = (a + 11 * h + 22 * l) / 451;
    int month = (h + l - 7 * m + 114) / 31;
    int day = ((h + l - 7 * m + 114) % 31) + 1;

    easterDate.day = day;
    easterDate.month = month;
    easterDate.year = year;

    return easterDate;
}

// возвращает дату юлианского календаря
// по книге Jean Meeus Astronomical Algorithms
Date OrthodoxEaster( int year )
{
    Date easterDate;

    int a = year % 4;
    int b = year % 7;
    int c = year % 19;
    int d = (19 * c + 15) % 30;
    int e = (2 * a + 4 * b - d + 34) % 7;
    int month = (d + e + 114) / 31;
    int day = ((d + e + 114) % 31) + 1;

    easterDate.day = day;
    easterDate.month = month;
    easterDate.year = year;

    return easterDate;
}

Примечания