Pääsiäissunnuntain laskukaavat

Alla on kaksikin erilaista pääsiäissunnuntain laskukaavaa.

Ensimmäinen on laadittu Helsingin yliopiston kalenteritoimiston "rakennamme kalenterin" -artikkelissa olleiden tietojen pohjalta.

Jälkimmäistä käyttää katolinen kirkko.

Molemmat algoritmit ovat sellaisenaan käännettävissä tietokoneohjelman osaksi Delphillä, toiminevat sellaisenaan tai hyvin vähäisin muutoksin myös FreePascalissa ( https://www.freepascal.org/ ).

Mutta:
Onko tietoa: tuottavatko molemmat algoritmit AINA saman lopputuloksen?

Yleistä tietoa algoritmeistä, pääsiäisen sijainnista kalenterissa ja algoritmien käyttöalueesta (=minä vuonna algoritmi on pätevä):

Algoritmi on pätevä vuonna 1583 ja kaikkina sen jälkeisinä vuosina.
Tuo vuosiluku ilmeisesti liittyy gregoriaanisen kalenterin käyttöönottoon, ja siksi algoritmi ei välttämättä toimi oikein ennen gregoriaanisen kalenterin käyttöönottoa.

Pääsiäinen toistuu täsmälleen samanlaisena kalenterissa 5700000 vuoden välein.

Tuo 5700000 tulee siitä, että se on pienin yhteinen jaettava näille luvuille:
19, 4000, 37500 ja 400.

Mainittakoon vielä:

Ensimmäisen algoritmin käyttöesimerkki:

var
DT1 : TDateTime;
S : String;

begin
// Laske pääsiäissunnuntai ja tulosta päivämäärä ISO 8601 -standardin mukaan:
DT1 := CalcEasterSunday(2024);
S := FormatDateTime('yyyy-mm-dd', DT1);

// Komentoriviohjelmissa:
{$APPTYPE CONSOLE}
WriteLn('Pääsiäissunnuntai on ', S);

// GUI -ohjelmissa (Memo1 = TMemo -tyyppiä):
Memo1.Lines.Add('Pääsiäissunnuntai on ' + S);
end;

// ja sitten itse algoritmit:

// algoritmi 1:
function CalcEasterSunday(Year:Integer):TDatetime;
var
C,N,K,I,J,L,M,D : Integer;

begin
C := Year DIV 100;

N := Year MOD 19;

K := (C - 17) DIV 25;

I := C - (C DIV 4) - (C - K) DIV 3 + 19 * N + 15;
I := I MOD 30;
I := I - (I DIV 28) * (1 - (I DIV 28) * (29 DIV (I+1)) * ((21 - N) DIV 11));

J := Year + Year DIV 4 +I + 2 - C + C DIV 4;

J := J MOD 7;

L := I - J;
M := 3 + (L + 40) DIV 44;
D := L + 28 - 31 * (M DIV 4);

Result := EncodeDate(Year, M, D);
end;

// algoritmi 2: Tätä käyttää katolinen kirkko:
function CatholicEasterMethod(year:Integer):Integer; // 22..31 = March ; R >= 32: April R-31 (April 1..25)
var
A,B,C,D,E,F,G : Integer; // Aloysius Lilius / Christophorus Clavius algorithm - used by the Catholic church.

begin

A := year MOD 19 + 1;
B := year DIV 100 + 1;
C := (3 * B) DIV 4 - 12;
D := (8 * B + 5) DIV 25 - 5;
E := (year * 5) DIV 4 - 10 - C;
F := ( (11 * A + 20 + D - C) MOD 30 + 30) MOD 30; // (the double MOD prevents F to go below zero for large years)

if (F = 24) or ((F = 25) and (A > 11))
then F := F + 1;

G := 44 - F;

if G < 21
then G := G + 30;

result := G + 7 - (E + G) MOD 7;
end;

Bonuskysymys:
Onko Fortumin ex-toimitusjohtaja Mikael Lilius jotain sukua (mitä?) tuon katolisen kirkon algoritmin laatijalle Aloysius Liliukselle ?
0454
Äänestä

Muut lukivat myös

Vastaukset

Vanhimmat

Ei vielä vastauksia

Aloittaja odottaa vastauksia. Kerro oma näkemyksesi ensimmäisenä.

Ketjusta on poistettu 4 sääntöjenvastaista viestiä.

Kommentoi aloitusta


Anonyymi-ap kirjoitti:

Alla on kaksikin erilaista pääsiäissunnuntain laskukaavaa.

Ensimmäinen on laadittu Helsingin yliopiston kalenteritoimiston "rakennamme kalenterin" -artikkelissa olleiden tietojen pohjalta.

Jälkimmäistä käyttää katolinen kirkko.

Molemmat algoritmit ovat sellaisenaan käännettävissä tietokoneohjelman osaksi Delphillä, toiminevat sellaisenaan tai hyvin vähäisin muutoksin myös FreePascalissa ( https://www.freepascal.org/ ).

Mutta:
Onko tietoa: tuottavatko molemmat algoritmit AINA saman lopputuloksen?

Yleistä tietoa algoritmeistä, pääsiäisen sijainnista kalenterissa ja algoritmien käyttöalueesta (=minä vuonna algoritmi on pätevä):

Algoritmi on pätevä vuonna 1583 ja kaikkina sen jälkeisinä vuosina.
Tuo vuosiluku ilmeisesti liittyy gregoriaanisen kalenterin käyttöönottoon, ja siksi algoritmi ei välttämättä toimi oikein ennen gregoriaanisen kalenterin käyttöönottoa.

Pääsiäinen toistuu täsmälleen samanlaisena kalenterissa 5700000 vuoden välein.

Tuo 5700000 tulee siitä, että se on pienin yhteinen jaettava näille luvuille:
19, 4000, 37500 ja 400.

Mainittakoon vielä:

Ensimmäisen algoritmin käyttöesimerkki:

var
DT1 : TDateTime;
S : String;

begin
// Laske pääsiäissunnuntai ja tulosta päivämäärä ISO 8601 -standardin mukaan:
DT1 := CalcEasterSunday(2024);
S := FormatDateTime('yyyy-mm-dd', DT1);

// Komentoriviohjelmissa:
{$APPTYPE CONSOLE}
WriteLn('Pääsiäissunnuntai on ', S);

// GUI -ohjelmissa (Memo1 = TMemo -tyyppiä):
Memo1.Lines.Add('Pääsiäissunnuntai on ' + S);
end;

// ja sitten itse algoritmit:

// algoritmi 1:
function CalcEasterSunday(Year:Integer):TDatetime;
var
C,N,K,I,J,L,M,D : Integer;

begin
C := Year DIV 100;

N := Year MOD 19;

K := (C - 17) DIV 25;

I := C - (C DIV 4) - (C - K) DIV 3 + 19 * N + 15;
I := I MOD 30;
I := I - (I DIV 28) * (1 - (I DIV 28) * (29 DIV (I+1)) * ((21 - N) DIV 11));

J := Year + Year DIV 4 +I + 2 - C + C DIV 4;

J := J MOD 7;

L := I - J;
M := 3 + (L + 40) DIV 44;
D := L + 28 - 31 * (M DIV 4);

Result := EncodeDate(Year, M, D);
end;

// algoritmi 2: Tätä käyttää katolinen kirkko:
function CatholicEasterMethod(year:Integer):Integer; // 22..31 = March ; R >= 32: April R-31 (April 1..25)
var
A,B,C,D,E,F,G : Integer; // Aloysius Lilius / Christophorus Clavius algorithm - used by the Catholic church.

begin

A := year MOD 19 + 1;
B := year DIV 100 + 1;
C := (3 * B) DIV 4 - 12;
D := (8 * B + 5) DIV 25 - 5;
E := (year * 5) DIV 4 - 10 - C;
F := ( (11 * A + 20 + D - C) MOD 30 + 30) MOD 30; // (the double MOD prevents F to go below zero for large years)

if (F = 24) or ((F = 25) and (A > 11))
then F := F + 1;

G := 44 - F;

if G < 21
then G := G + 30;

result := G + 7 - (E + G) MOD 7;
end;

Bonuskysymys:
Onko Fortumin ex-toimitusjohtaja Mikael Lilius jotain sukua (mitä?) tuon katolisen kirkon algoritmin laatijalle Aloysius Liliukselle ?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu