L’algoritmo di Gauss per il calcolo della Pasqua
Come è noto, la festività della Pasqua Cattolica non cade mai nella stessa data in quanto è legata al ciclo lunare. Il “sistema” che fissa la data della Pasqua per ogni anno fu stabilita nell’anno 325 dal Concilio di Nicea: la Pasqua cade la domenica successiva al primo plenilunio dopo l’equinozio di Primavera (21 Marzo).
A volte capita di dover disporre di un semplice algoritmo da implementare nei propri programmi per il computo delle festività: è capitato a me per cui eccomi qui ad esporre una semplice funzione in vb.net che effettua il calcolo della data della Pasqua Cattolica.
Specifico “Cattolica” in quanto la Pasqua Ebraica segue un metodo di calcolo completamente differente e molto più complicato. La data della Pasqua Cattolica, inoltre, varia se si utilizza il calendario Gregoriano (che è quello che utilizziamo noi in Italia abitualmente e che viene utilizzato nella maggior parte del mondo) o il calendario Giuliano (utilizzato dalla Chiesa Ortodossa).
L’algoritmo più utilizzato per il calcolo della Pasqua Cattolica è sicuramente quello di Gauss. Nella funzione che segue ho implementato appunto tale algoritmo. Per utilizzare questa funzione nei vostri programmi copiate tutto il contenuto, incollatelo in un file di testo e date al file l’estensione .vb, importate quindi il tale file nel vostro progetto. La funzione va richiamata passando l’anno (parametro Year) e opzionalmente il valore dell’enumerazione per scegliere se utilizzare il calendario Gregoriano (opzione di default, per cui in questo caso non è necessario specificare) o quello Giuliano. Il valore restituito è in formato Date, per cui è indipendente dalle impostazioni internazionali in uso sul vostro pc.
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | Module easter_calc ' Evaluates day of Catholic Easter using Gauss algorithm ' by Bernardo Giovanni ' https://www.settorezero.com Public Enum CalendarType As Byte Gregorian = 0 Julian = 1 End Enum Public Function EasterDate(ByVal Year As Short, Optional ByVal CalendarType As CalendarType = CalendarType.Gregorian) As Date Dim a, b, c, d, e, M, N As Byte Dim da, mo As Byte If CalendarType = easter_calc.CalendarType.Julian Then M = 15 N = 6 Else If (Year >= 1583) And (Year <= 1699) Then M = 22 N = 2 ElseIf (Year >= 1700) And (Year <= 1799) Then M = 23 N = 3 ElseIf (Year >= 1800) And (Year <= 1899) Then M = 23 N = 4 ElseIf (Year >= 1900) And (Year <= 2099) Then M = 24 N = 5 ElseIf (Year >= 2100) And (Year <= 2199) Then M = 24 N = 6 ElseIf (Year >= 2200) And (Year <= 2299) Then M = 25 N = 0 ElseIf (Year >= 2300) And (Year <= 2399) Then M = 26 N = 1 ElseIf (Year >= 2400) And (Year <= 2499) Then M = 25 N = 1 Else Return Nothing End If End If a = Year Mod 19 b = Year Mod 4 c = Year Mod 7 d = ((19 * a) + M) Mod 30 e = ((2 * b) + (4 * c) + (6 * d) + N) Mod 7 If (d + e < 10) Then da = d + e + 22 mo = 3 Else da = d + e - 9 mo = 4 End If If (da = 26 And mo = 4) Then da = 19 mo = 4 ElseIf (da = 25 And mo = 4 And d = 28 And e = 6 And a > 10) Then da = 18 mo = 4 End If Return New Date(Year, mo, da) End Function End Module |
Questa funzione, sfruttando l’algoritmo di Gauss, è valida per gli anni compresi tra il 1583 e il 2499, se l’anno passato non rientra in questo range, la funzione restituisce Nothing, che in termini di oggetto Date equivale alla data 01/01/0001 …
Scarica la funzione (solo per utenti iscritti) : [download#57]
Maggiori informazioni le potete trovare nelle seguenti pagine su wikipedia:
- Calcolo della Pasqua
- Calendario Giuliano
- Calendario Gregoriano
- Algoritmi per il Calcolo della Pasqua in altri linguaggi di programmazione