HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Melyik napra esik a húsvét?


Példaprogram letöltése

7296 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 csak a március 22. és április 25. közé eső vasárnapok egyike lehet.
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 Shared Function Execute(ByVal year As Integer) As DateTime
    Dim G, I, J, C, H, L, M, D As Integer
    G = year Mod 19
    C = year / 100
    H = (C - C / 4 - (8 * C + 13) / 25 + 19 * G + 15) Mod 30
    I = H - H / 28 * (1 - H / 28 * (29 / (H + 1)) * ((21 - G) / 11))
    J = (year + year / 4 + I + 2 - C + C / 4) Mod 7
    L = I - J
    M = 3 + (L + 40) / 44
    D = L + 28 - 31 * (M / 4)
    Dim E As New DateTime(year, M, D)
    While CInt(E.DayOfWeek) + 1 > 1
      E = E.AddDays(1)
    End While
    Return E
  End Function 'Execute    
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 Sub button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles button1.Click
    label1.Text = CalculateEaster.Execute(Convert.ToInt32(textBox1.Text)).ToShortDateString()
  End Sub 'button1_Click

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 |