Работающие формулы для рассчёта даты празднования Пасхи.

Post Reply
Алексей
Posts: 220
Joined: Sun Jun 29, 2003 8:22 pm
код: 0
Location: Новосибирск
Contact:

Работающие формулы для рассчёта даты празднования Пасхи.

Post by Алексей » Tue Mar 21, 2006 11:56 pm

В общем-то, в интернете эти формулы можно найти - но они разбросаны по разным ресурсам, и не везде доведены до конкретного алгоритма - чаще всё сводится к текстовым объяснениям. Иногда возникает потребность увидеть формулы в "голой математике", без лишних комментариев.

Ниже код двух работающих java-процедур (они же могут быть в неизменном виде использованы в программах на C/C++)

Code: Select all

    private String get_west_easter(int m_year) {
        
        int c = m_year / 100;
	int A = m_year % 19 ;
	int K = (c - 17)/25;
	int D = (c - c/4 - (c - K)/3 + 19*A + 15) % 30;
	D = D - (D/28)*(1 - (D/28)*(29/(D + 1))*((21 - A)/11));
	int E = (m_year + m_year/4 + D + 2 - c + c/4) % 7;
        
	int L = D - E;
	int m = 3 + (L + 40)/44;
	int d = L + 28 - 31*(m/4);
        
        return showdate(d, m, m_year);
       
    }

Code: Select all

        private String get_east_easter(int m_year) {
        
	int A = m_year % 19 ;
        int B = m_year % 4;
        int C = m_year % 7;
        int D = (19 * A + 15) % 30;
        int E = (2 * B + 4 * C + 6 * D + 6) % 7;
        
        int L = D + E;
        int mm = (L + 40) / 50;
	int m = 3 + mm;
	int d = L + 35 - 31*(m/4);
        
        m = m + (d / (31 - mm));
        d = d - (31 - mm) * (d / (31 - mm) );
        
        return showdate(d, m, m_year);
       
    }
С восточной Пасхой небольшая заморочка в том, что её ещё нужно переводить из юлианского календаря в современный - поэтому формулы модифицированы, чтобы сразу получать нужный результат.

При ручном рассчёте (с помощью калькулятора) обратите внимание на операции: "%" означает взятие остатка от деления; само деление везде целочисленное - т.е. дробная часть попросту отбрасывается.

Post Reply