Archive for aprile 2021
il giorno della Pasqua
Perché nel 2021 il giorno di Pasqua cade il 4 Aprile?
Perché non l’11 Aprile o il 18 Aprile?
Perché nel 2020 era il 12 Aprile?
Perché nel 2022 sarà il 17 Aprile e nel 2023 il 9 Aprile?
Come viene decisa la data della Pasqua.
Facciamo un gioco. Chiedetelo ai vostri amici e parenti.
Sentirete tante risposte, una più strampalata dell’altra.
Ad esempio, io mi sono sentito dire che sono le tipografie che stampano i calendari, si riuniscono e decidono la data.
Oppure che il Papa ogni anno decide a caso e poi lo comunica.
Alt. Fermiamoci un attimo.
Per sua definizione, la Pasqua avviene secondo i cicli lunari e cade la domenica successiva al primo plenilunio della stagione primaverile.
Già con questa definizione abbandoniamo l’idea della riunione tra tipografie, stile riunione di condominio, smettiamo di pensare al Papa che sfoglia la margherita per decidere il giorno.
Il fatto che ci sia la Luna in gioco, dobbiamo pensare che sia un calcolo matematico.
E’ semplicemente un calcolo astronomico e sicuramente non sapete, la formula è in una sola riga. Magari pensavate già a formule matematiche difficilissime.
E comunque dove c’è un calcolo, noi possiamo scrivere un programma dove in input gli diamo l’anno di calcolo e in output abbiamo la data Giuliana.
La formula l’ho trovata in uno dei diversi libri del grande Jean Meeus, matematico, meteorologo e astronomo, del quale ho anche 4 volumi scritti in inglese e mai usciti in Italia.
Il calcolo è dato da una serie di divisioni, dove poi si prendono quoziente e resto. Queste diventano gli input di un’altra serie di divisioni che daranno degli output, che a loro volta diventeranno degli input per altre divisioni e così via.
Il tutto lo possiamo tradurre in una funzione come questa:
Dim a = 0
Dim b = 0
Dim c = 0
Dim d = 0
Dim ee = 0
Dim M = 0
Dim N = 0
Dim GiornoPasqua = 0
Dim MesePasqua = 0
Dim ritorna As Date
If (annoCalcolo > 1582 And annoCalcolo < 1700) Then
M = 22
N = 2
End If
If (annoCalcolo > 1699 And annoCalcolo < 1800) Then
M = 23
N = 3
End If
If (annoCalcolo > 1799 And annoCalcolo < 1900) Then
M = 24
N = 4
End If
If (annoCalcolo > 1899 And annoCalcolo < 2100) Then
M = 24
N = 5
End If
If (annoCalcolo > 2099 And annoCalcolo < 2200) Then
M = 24
N = 6
End If
If (annoCalcolo > 2199 And annoCalcolo < 2300) Then
M = 25
N = 0
End If
If (annoCalcolo > 2299 And annoCalcolo < 2400) Then
M = 26
N = 1
End If
If (annoCalcolo > 2399 And annoCalcolo < 2500) Then
M = 25
N = 1
End If
a = annoCalcolo Mod 19
b = annoCalcolo Mod 4
c = annoCalcolo Mod 7
d = (19 * a + M) Mod 30
ee = (2 * b + 4 * c + 6 * d + N) Mod 7
If (d + ee < 10) Then
GiornoPasqua = d + ee + 22
MesePasqua = 3
Else
GiornoPasqua = d + ee – 9
MesePasqua = 4
End If
If (GiornoPasqua = 26 And MesePasqua = 4) Then
GiornoPasqua = 19
End If
If (GiornoPasqua = 25 And MesePasqua = 4 And d = 28 And ee = 6 And a > 10) Then
GiornoPasqua = 18
End If
ritorna = New Date(annoCalcolo, MesePasqua, GiornoPasqua)
ed ecco il risultato:
Questo codice è scritto in VB.NET, ma sapendo i calcoli da fare, non è difficile da tradurre nel vostro linguaggio preferito.
Ah, prima di finire l’articolo, auguro a tutti voi lettori una buona Pasqua.
Leggi l'articolo intero | Make a Comment ( None so far )