Вычисление даты Пасхи (61/52)

00.П2   01.1     02.9    03.ПП    04.86   05.П3   06.ИП2 07.4   08.ПП  09.86 
10.П4   11.ИП2   12.7    13.ПП    14.86   15.П5   16.1   17.9   18.ИП3 19.x 
20.1    21.5     22.+    23.3     24.0    25.ПП   26.86  27.П6  28.2   29.ИП4 
30.x    31.4     32.ИП5  33.x     34.+    35.6    36.ИП6 37.x   38.+   39.6 
40.+    41.7     42.ПП   43.86    44.ИП6  45.+    46.П1  47.3   48.П4  49.ИП2 
50.1    51.-     52.2    53.F10^x 54.:    55.K[x] 56.В^  57.В^  58.4   59.: 
60.K[x] 61.-     62.2    63.0     64.+    65.ИП1  66.+   67.П3  68.3   69.1 
70.-    71.Fx>=0 72.76   73.П3    74.KИП4 75.ИП3  76.3   77.0   78.-   79.Fx>=0 
80.83   81.П3    82.KИП4 83.ИП3   84.ИП4  85.С/П  86.П0  87.<-> 88.П1  89.<-> 
90.:    91.K[x]  92.ИП0  93.x     94.ИП1  95.-    96./-/ 97.В/О

Программа вычисляет дату православной Пасхи (с поправкой на новый стиль).

Номер года вводится в РX, после вычислений в нём же будет номер месяца, а в РY — номер дня, на который придётся Пасха в указанном году.

Далее можно, введя в память следующий код, вычислить даты Вознесения и Троицы:

00.П0 01.<-> 02.П1    03.<-> 04.-     05.1   06.3   07.+   08.П1 09.3 
10.1  11.-   12.Fx>=0 13.19  14.П1    15.ИП0 16.1   17.+   18.П0 19.ИП0 
20.1  21.+   22.П0    23.ИП1 24.ИП0   25.С/П 26.ИП1 27.1   28.0  29.+ 
30.П1 31.3   32.1     33.-   34.Fx>=0 35.41  36.П1  37.ИП0 38.1  39.+ 
40.П0 41.ИП1 42.ИП0   43.С/П
Метки публикаций: 

Комментарии

О Пасхе. Я в молодости, когда самостоятельно изучал С, написал свою первую программу на этом языке - Вычисление даты православной пасхи на любой год. Я использовал сами моменты астрономических событий, поэтому обошёлся без ограничений на 20..21 века. Надо-бы поискать в старых записях её исходник и втиснуть в калькулятор.

Мои программируемые калькуляторы:
Б3-21, Б3-34, МК-61, МК-52, МК-85
CASIO: cfx-9850GB+, fx-9750G+, fx-9750GII, fx-9860G, Algebra fx-2.0, fx-5800P, fx-7400G+
HP: 50G, 48G, 35s
TI: Nspire-CAS, Voyage-200, 89Titanium
SHARP EL-9600G

Ограничение связано с тем, что программа вычисляет дату Пасхи по алгоритму Гаусса, по старому стилю, затем переводится в новый прибавлением 13 дней. Впрочем, её можно усовершенствовать. Было бы интересно ознакомиться и с Вашим вариантом программы.

Дело было лет 20 назад, но по памяти пасха - это ближайшее воскресение к 3-й четверти 4-го полного лунного месяца года по юлианскому календарю. Лунный месяц начинается с новолуния. Длительность лунного месяца и момент новолуния известны с точностью до секунды. Ну и учитывается растущая разница дат в григорианском и юлианском календарях продолжительностью 3 суток за 400 лет.

Мои программируемые калькуляторы:
Б3-21, Б3-34, МК-61, МК-52, МК-85
CASIO: cfx-9850GB+, fx-9750G+, fx-9750GII, fx-9860G, Algebra fx-2.0, fx-5800P, fx-7400G+
HP: 50G, 48G, 35s
TI: Nspire-CAS, Voyage-200, 89Titanium
SHARP EL-9600G

Примерно так работает и моя программа, разве что она не считает разницу между датами нового и старого стилей, просто прибавляя постоянное значение. Если добавить её расчёт, то программа будет правильно работать для других веков.

Пожалуйста, поделитесь своей программой. Дополнительно, в журнале Наука и Жизнь № 6 за 1990 г., на стр. 128 тоже приведена программа расчета Пасхи, но у меня выдает не корректные результаты. Помогите разобраться? Может, я что-то ввожу не так?

Денис, если вы имеете в виду текст программы в корневом сообщении, то там не указаны адреса, поэтому её ввод может быть неочевиден для неопытных пользователей МК61/52.

Пользуясь нашим эмулятором, я преобразовал текст в более простой вид, возможно автор тоже поправит свой исходник.

00.П2  01.1   02.9   03.ПП 04.69  05.П3  06.ИП2 07.4   08.ПП  09.69
10.П4  11.ИП2 12.7   13.ПП 14.69  15.П5  16.1   17.9   18.ИП3 19.*
20.1   21.5   22.+   23.3  24.0   25.ПП  26.69  27.П6  28.2   29.ИП4
30.*   31.4   32.ИП5 33.*  34.+   35.6   36.ИП6 37.*   38.+   39.6
40.+   41.7   42.ПП  43.69 44.ИП6 45.+   46.П1  47.8   48.+   49.3
50.5   51./   52.[x] 53.4  54.+   55.П2  56.5   57./   58.[x] 59.3
60.0   61.*   62.ИП1 63.4  64.+   65.<-> 66.-   67.ИП2 68.С/П 69.П0
70.<-> 71.П1  72.<-> 73./  74.[x] 75.ИП0 76.*   77.ИП1 78.-   79./-/
80.В/О

Ваша программа работает. Хотел рассмотреть варианты программ других авторов. В журнале Наука и Жизнь № 6 за 1990 г., на стр. 128 приведена такая, но она не правильно считает и причина это не понятна. Пробовал на 2х калькуляторах МК-52 и на вашем эмуляторе - одинаково не правильно. Сможете глянуть ту программу?

Да, работает она странно. Текст её следующий:

00.П2 01.F-> 02.П1 03.F-> 04.П0 05.ИП3 06.4 07.KПП8 08.2 09.x
10.ИП3 11.7 12.KПП8 13.4 14.x 15.+ 16.ИП3 17.1 18.9 19.KПП8
20.1 21.9 22.x 23.ИП1 24.+ 25.П3 26.3 27.0 28.KПП8 29.П4
30.6 31.x 32.+ 33.ИП2 34.+ 35.П3 36.7 37.KПП8 38.ИП4 39.+
40.3 41.5 42.<-> 43.- 44.Fx=0 45.51 46.1 47.9 48., 49.4
50.KБП7 51.3 52.4 53.FВx 54.- 55.Fx=0 56.62 57.1 58.8 59.,
60.4 61.KБП7 62.1 63.0 64.FВx 65.- 66.Fx>=0 67.75 68.2 69.2
70., 71.3 72.FВx 73.+ 74.KБП7 75.FВx 76.8 77., 78.6 79.-
80.ИП0 81.ВП 82.6 83./-/ 84.+ 85.С/П 86.БП 87.04 88.: 89.FВx
90.<-> 91.K[x] 92.x 93./-/ 94.ИП3 95.+ 96.В/О

Ввод: 80 П7 88 П8 2014 ^ 15 ^ 6 В/О С/П. Результат: 11,402014, хотя Пасха приходится на 20-е апреля (7-е по старому стилю). Интересно на досуге поискать, где ошибка или что мы не так делаем.

Сам алгоритм верный, вот, к примеру, вычисления по нему для 1991-го года:
a = 1991 ОСТАТОК 19 = 15;
b = 1991 ОСТАТОК 4 = 3;
c = 1991 ОСТАТОК 7 = 3;
A = 19 * a + m = 285 + 15 = 300;
d = A ОСТАТОК 30 = 0;
B = 2 * b + 4 * c + 6 * d + n = 18 + 6 = 24;
e = B ОСТАТОК 7 = 3;
E = e + d = 3;
П = E + 22,3 = 25,3 (25-е марта).
Эта же дата написана и в статье. Однако программа выдаёт 11 апреля (с обнулёнными регистрами).

P. S. Ошибка заключается в том, что год не вносится предварительно в 3-й регистр; если это сделать перед началом расчёта, программа работает правильно.

я обратил внимание, что вначале алгоритма, после распределения чисел по регистрам, идёт вызов с П3, но он пуст, кстате, после выдачи результата в нем появляется число. Может, как-то добавить команду, что бы год заносился и в 3й регистр? Я не спец, но к примеру, вначале, когда год копируется в 0й, скопировать его и в 3й.

Все, нашёл) На шаге 05 опечатка - вместо ПХ3 должно быть ХП3, тогда "год" окажется и в регистре 3 над коим происходят манипуляции далее по алгоритму.

Вот, теперь работают обе программы. Моя программа, на мой взгляд, более удобная: без ввода коэффициентов сразу считает дату по новому стилю. Единственное ограничение, что правильно считает только на прошлое и текущее столетие. Но на наш век этого хватит, потом может и на новый стиль перейдём, а пока будем следовать завещанию Патриарха Пимена: "Русская Православная Церковь неукоснительно должна сохранять старый стиль — юлианский календарь, по которому она преемственно молится уже тысячелетие".

Ещё одно различие в том, что моя программа не вычисляет католическую Пасху.

Всех со Святым вечером и наступающим Рождеством Христовым!

Два замечания. Во-первых, никакого 34, только 52/61. Во-вторых, для 2016 года программа выдаёт X=4, Y=31 - как это интерпретировать?

Да, согласен, используется команда [x], да и команд теперь 97. Исправил, спасибо за замечание (естественно, это было 1 мая). Точнее, исправил вскоре после написания кода, но здесь тогда не дошли руки внести поправки.

Последняя версия лежала в этом сборнике кусков кода на разных языках: http://rosettacode.org/wiki/Holidays_related_to_Easter#.D0.9C.D0.9A-61.2F52 (там ещё разные программки для МК-61 есть).