HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Melyik napra esik a húsvét?


Példaprogram letöltése

8110 bájt

Ha egy naptárból kell megnéznünk, akkor egyszerű a válasz, de ha programból kell eldöntenünk ezt a kérdést, akkor bizony már nehéz feladat előtt állunk, hiszen a húsvét minden évben más és más napra esik.
Mellékelt példában egy olyan függvényt készítünk, mely egy évszám alapján visszaadja a húsvét dátumát TDateTime formában.

Nézzük milyen szabályok alakítják a húsvét aktuális dátumát: a niceai zsinat 325-ben határozta meg e napnak a dátumát úgy, hogy az a tavaszi napéjegyenlőség utáni első holdtöltét követő vasárnapra essen. Ha az első holdtölte éppen vasárnapra esik, akkor az azt követő vasárnapra kerül át az ünnep. A naptár szerint ez a március 22. és április 25. közé eső vasárnapok egyike lehet csak.
A húsvét napjának meghatározásakor a matematikai nehézség abból származik, hogy sem a Föld keringési ideje, sem pedig a két holdtölte közötti idő nem egész számú többszöröse a nap hosszának. A naptárkészítés alapelve az, hogy a tavaszi napéjegyenlőség március 21-re essen. Ezt az 1582-ben bevezetett Gergely-féle naptár úgy oldja meg, hogy a négyévenkénti szökőévekből minden négy évszázadban hármat elhagy. Ez több mint három évszázadon át biztosítja a tavasz március 21-ei kezdetét, ellenben a húsvét időpontjának számítását nagyban megnehezíti.
Ezt jól tükrözi az alábbi algoritmus, mely egyetlen évszámból kiindulva képes egy TDateTime típus meghatározására, mely a húsvét adott évi dátumát adja.
    public static DateTime Execute(int year)
    {
      int G, I, J, C, H, L, M, D;
      G = year % 19;
      C = year / 100;
      H = (C - C / 4 - (8 * C + 13) / 25 + 19 * G + 15) % 30;
      I = H - (H / 28) * (1 - (H / 28) * (29 / (H + 1)) * ((21 - G) / 11));
      J = (year + year / 4 + I + 2 - C + C / 4) % 7;
      L = I - J;
      M = 3 + (L + 40) / 44;
      D = L + 28 - 31 * (M / 4);
      DateTime E = new DateTime(year, M, D);
      while (((int)E.DayOfWeek)+1 > 1)
      {
        E = E.AddDays(1);
      }
      return E;
    }
A függvény felhasználása már jóval egyszerűbb feladat: paraméterként átadjuk a kérdéses évszámot, majd visszatérési értékként felhasználjuk a kapott dátumot tetszés szerint.
    private void button1_Click(object sender, System.EventArgs e)
    {
      label1.Text = CalculateEaster.Execute(Convert.ToInt32(textBox1.Text)).ToShortDateString();
    }

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2002 évkönyv 441. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |