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

00.П2   01.1     02.9   03.ПП    04.85   05.П3   06.ИП2 07.4  08.ПП    09.85 
10.П4   11.ИП2   12.7   13.ПП    14.85   15.П5   16.1   17.9  18.ИП3   19.x 
20.1    21.5     22.+   23.3     24.0    25.ПП   26.85  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.85    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.75  73.П3    74.KИП4 75.3    76.0   77.-  78.Fx>=0 79.82 
80.П3   81.KИП4  82.ИП3 83.ИП4   84.С/П  85.П0   86.<-> 87.П1 88.<->   89.: 
90.K[x] 91.ИП0   92.x   93.ИП1   94.-    95./-/  96.В/О

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

Номер года вводится в Р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.С/П
Метки публикаций: 
Undefined

Комментарии

О Пасхе. Я в молодости, когда самостоятельно изучал С, написал свою первую программу на этом языке - Вычисление даты православной пасхи на любой год. Я использовал сами моменты астрономических событий, поэтому обошёлся без ограничений на 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 над коим происходят манипуляции далее по алгоритму.

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

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

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