A nyugati kereszténység húsvétvasárnapja legkorábban március 22-ére, legkésőbb április 25-re esik. Másképpen: a húsvét mozgó ünnep, azaz nem esik az év ugyanazon napjára minden évben. Az első niceai zsinat 325-ben úgy határozott, hogy legyen a keresztény húsvét időpontja a tavaszi napéjegyenlőség utáni első holdtöltét követő vasárnap.
A húsvét kiszámítására a legismertebb algoritmus Gauss módszere. A Java implementációban az easterGauss() függvény által elfogadható év paramétert életszerűen lekorlátoztam 1900-2099-ig terjedő évekre, valamint a vezérlés az aktuális és a rákövetkező 19 évben ír ki eredményt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
private static final int MIN_YEAR=1900, MAX_YEAR=2099; public static String easterGauss(int y) { if(y<MIN_YEAR || y>MAX_YEAR) throw new IllegalArgumentException( y+" not in ["+MIN_YEAR+", "+MAX_YEAR+"]"); int a=y%19, b=y%4, c=y%7, d=(19*a+24)%30, e=(2*b+4*c+6*d+5)%7, h=22+d+e; if(e==6 && d==29) //1. kivétel h=50; if(e==6 && d==28 && a>10) //2. kivétel h=49; String message="Húsvétvasárnap "+y+" évben: "; if(h<=31) //március message+="március "+h+"."; else //április message+="április "+(h-31)+"."; return message; } public static void main(String[] args) { System.out.println("Mikor van húsvétvasárnap az alábbi években?"); int startYear= Math.max(MIN_YEAR, Calendar.getInstance().get(Calendar.YEAR)); int endYear=Math.min(startYear+19, MAX_YEAR); for (int y=startYear; y<=endYear; y++) System.out.println(easterGauss(y)); } |
Az algoritmus részletes magyarázata alapján könnyen kiegészíthető úgy, hogy tetszőleges évre, illetve különböző naptárakra is működjön.
A kapott eredmények megtekinthetők:
A feladat – a kivételkezeléstől eltekintve – a Java SE szoftverfejlesztő tanfolyam szakmai moduljának 5-8. óra: Vezérlési szerkezetek alkalmához kötődik.
Ez a cikk az algoritmus alkalmazásán túl részletes magyarázatot ad a periodikusságra, és kitér más évszázadok speciális eseteire is:
https://www.csillagaszat.hu/hirek/egy-egyeb-temak/eletunk-legkorabbi-husvetja/
Köszönjük Gábor.
Akinek semmi sem elég ;-), itt egy 6 évszázadot felölelő lista a húsvétvasárnapok dátumairól:
http://tlarsen2.tripod.com/thomaslarsen/easterdates.html
Sőt itt egy online húsvét kalkulátor is:
http://www.convertalot.com/easter_date_calculator.html
Jól működik, de furcsa, hogy az eredményt tartalmazó „The date of Easter is:” szöveges mezőbe is be lehet írni; bár kezeli egy „Invalid Year” hibaüzenettel a Calculate gombra kattintva.
Szuper, hasznos Bálint. Köszönjük szépen a linkeket.
Jó szemlélettel és kritikusan állsz hozzá a webes űrlapokhoz. 🙂
Próbáltam elképzelni a niceai zsinat több száz résztvevőjének arckifejezését, amikor egyikük kimondta a definíciót. Vajon hányan értették, hogy miről van szó? Vajon milyen egyéb alternatívák lehettek még, amiket nem szavaztak meg? Vajon kik lehettek többségében a zsinat résztvevői: vallási vezetők (egyházatyák), csillagászok, filozófusok, földesurak?
Péter: ez mind nagyon jó kérdés és egyben további érdekességek:
Gauss módszere helyett lehet más módszerrel is meghatározni a húsvétot? Illetve ez programozásban miképpen valósulna meg?
Áron: hogyne, itt van további két algoritmus húsvétra: https://en.wikipedia.org/wiki/Computus#Algorithms