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

Материал из Викиучебника — открытых книг для открытого мира
Содержимое удалено Содержимое добавлено
Нет описания правки
→‎К переименованию: Использован шаблон.
Строка 1: Строка 1:
{{К переименованию | 2014-05-02 | Реализации алгоритмов/Алгоритм пасхалии}}

===== Программная реализация =====
===== Программная реализация =====
{{wikipedia|Пасхалия}}
{{wikipedia|Пасхалия}}
Строка 5: Строка 7:




* Excel
* Excel
=DOLLAR(("4/"&A1)/7+MOD(19*MOD(A1,19)-7,30)*14%,)*7-6
=DOLLAR(("4/"&A1)/7+MOD(19*MOD(A1,19)-7,30)*14%,)*7-6
: Предполагается, что ячейка A1 содержит год.<ref>{{cite web|last=Walkenbach|first=John|title=Calculating Easter|url=http://spreadsheetpage.com/index.php/tip/calculating_easter/|archiveurl=http://www.webcitation.org/6FcDT117e|archivedate=2013-04-04}}</ref> Формула вычисляет дату католической Пасхи и дает верный результат для 1900—2203 годов.
: Предполагается, что ячейка A1 содержит год.<ref>{{cite web|last=Walkenbach|first=John|title=Calculating Easter|url=http://spreadsheetpage.com/index.php/tip/calculating_easter/|archiveurl=http://www.webcitation.org/6FcDT117e|archivedate=2013-04-04}}</ref> Формула вычисляет дату католической Пасхи и дает верный результат для 1900—2203 годов.
Строка 62: Строка 64:
easterDate.year = year;
easterDate.year = year;


return easterDate;
return easterDate;
}
}


Строка 83: Строка 85:
easterDate.year = year;
easterDate.year = year;


return easterDate;
return easterDate;
}
}
</syntaxhighlight>
</syntaxhighlight>

Версия от 19:35, 2 мая 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;
}

Примечания