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

Добавлена реализация александрийской пасхалии на языке ПМК; мелкие правки
м
(Добавлена реализация александрийской пасхалии на языке ПМК; мелкие правки)
'''Пасхалия''' (англ. = лат. '''Computus''' — исчисление) — методика расчёта даты празднования Пасхи в том или ином году. В настоящее время большинство православных церквей используют александрийскую пасхалию, опирающуюся на юлианский календарь («старый стиль»), тогда как католическая, а также некоторые православные и протестантские церкви придерживаются григорианской, основанной на общепринятом григорианском календаре. Из-за расхождения между этими календарями (13 дней на сегодня) разница между датами празднования «католической» и «православной» Пасхи в разные годы может составлять 0, 1, 4 или 5 недель.
 
==Описание==
Существуют различные алгоритмы пасхалии. Здесь использован алгоритм григорианской пасхалии неизвестного автора (журнал New York correspondent, 1876) и его адаптация бельгийским математиком-астрономом Жаном Меёсом (франц. Jean Meeus) для александрийской пасхалии (Jean Meeus - Astronomical Algorithms, 1991).
 
Для григорианской пасхи найденные значения определяют григорианскую дату, а для александрийской — юлианскую.
 
==Реализации==
==[[w:BASIC|BASIC]]==
===[[w:PowerBASIC|PowerBASIC]], [[w:QBASIC|QBASIC]], [[w:QuickBasic|QuickBasic]] версий 4.X, [[w:Visual Basic|Visual Basic]] версий ≤ 6.0, [[w:Visual Basic for Applications|Visual Basic для приложений]]===
<syntaxhighlight lang="vb">
' где К — название календаря, ГГГГ — год, ММ — двузначный номер месяца, ДД — двузначное число.
Sub PrintDate(calendar As String, year As Integer, month As Integer, day As Integer)
Print calendar; ": "; Str$(year); "-";
Print Str$(year); "-";
If month < 10 Then Print "0";
Print Str$(month); "-";
</syntaxhighlight>
 
===[[w:C|C]]===
<syntaxhighlight lang="c">
/* computus.h */
</syntaxhighlight>
 
===[[w:C++|C++]]===
<syntaxhighlight lang="cpp">
// computus.hpp
</syntaxhighlight>
 
===[[w:Excel|Excel]]===
=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 годов.
 
===[[w:Go|Go]]===
<syntaxhighlight lang="go">
// computus.go
</syntaxhighlight>
 
===[[w:Pascal|Pascal]], [[w:Delphi|Delphi]]===
<syntaxhighlight lang="pascal">
{ computus.pas }
</syntaxhighlight>
 
===[[w:Perl|Perl]]===
: Rich Bowen’s модуль ''Date::Easter'' доступен на сайте CPAN .<ref>{{cite web|title=Date::Easter|url=http://search.cpan.org/~rbow/Date-Easter-1.14/lib/Date/Easter.pm|publisher=CPAN|archiveurl=http://www.webcitation.org/6FcDSMkSb|archivedate=2013-04-04}}</ref>
 
===[[w:Python|Python]]===
<syntaxhighlight lang="python">
# computus.py
</syntaxhighlight>
 
===[[w:Rust|Rust]]===
<syntaxhighlight lang="rust">
// computus.rs
</syntaxhighlight>
 
==Программируемые микрокалькуляторы «Электроника»==
== Примечания ==
'''Использование:''' <год> → регистр X, В/О, С/П (число в регистре X, номер месяца в регистре Y).
 
===МК-61 / 52 / 161 / 163 / 152 / 1152, МС-1104===
 
R — любой адресуемый регистр (0…9, a…e), r — любой другой адресуемый регистр.
 
'''Александрийская пасхалия'''
<syntaxhighlight>
00. X→П R 01. 7 02. ПП 03. 00 04. В↑ 05. + 06. X→П r 07. П→X R 08. 4 09. ПП
10. 54 11. П→X r 12. + 13. В↑ 14. + 15. 3 16. 4 17. + 18. X→П r 19. П→X R
20. 1 21. 9 22. ПП 23. 54 24. 1 25. 9 26. × 27. 1 28. 5 29. +
30. 3 31. 0 32. ПП 33. 54 34. П→X r 35. ↔ 36. X→П r 37. − 38. 7 39. ПП
40. 54 41. П→X r 42. + 43. 1 44. 1 45. 4 46. + 47. 3 48. 1 49. ПП
50. 54 51. 1 52. + 53. С/П 54. F ⥁ 55. В↑ 56. F Вx 57. ÷ 58. F Вx 59. ↔
60. К[x] 61. В↑ 62. F ⥁ 63. × 64. − 64. В/О
</syntaxhighlight>
 
'''Григорианская пасхалия'''
<syntaxhighlight>
</syntaxhighlight>
 
===Б3-34, МК-54 / 56===
Отсутствующая команда выделения целой части К [x] заменяется последовательностью команд:
<syntaxhighlight>
1 . 8 F 1/x − 7 F 10ˣ + F Вx −
</syntaxhighlight>
Предыдущие и следующие команды остаются такими же.
 
== Примечания ==
{{примечания|colwidth=30em}}
 
74

правки