Dates

Le jour de Pâques

Solution

Le but  de cet exercice est de trouver la date du jour de Pâques, qui est définie comme celle du premier dimanche après la pleine lune qui suit le solstice de printemps.

La spécification suivante se trouve dans le livre de Knuth ``The Art of Computer Programming'', Volume 1 page 155. Il l'attribue à l'astronome napolitain Aloysius Lilius et au mathématicien jésuite allemand Christopher Clavius à la fin du seizième siècle.
Si Y est l'année dont on cherche la date de Pâques (avec Y < 100000):

  1. [Golden number.]: G = (Y mod 19) + 1 (G est le nombre d'or de l'année dans le cycle Metonic de 19 ans.)
  2. [Century.]: C = Partie_Entière (Y / 100) + 1 (Quand Y n'est pas multiple de 100, C est le numéro du siècle; par exemple 1996 est dans le vingtième siècle.)
  3. [Corrections.]: X = Partie_Entière (3C/4) - 12, Z = Partie_Entière ((8C + 5) / 25) - 5. (X est le nombre d'années, telles que 1900, qui ne sont pas bissextiles, pour ne pas perdre la synchronisation avec le soleil. Z est une correction spéciale qui permet de synchroniser Pâques avec l'orbite de la lune.)
  4. [Find Sunday.]: D = Partie_Entière (5Y / 4) - X - 10 (le ((-D) mod 7) Mars sera effectivement un Dimanche.)
  5. [Epact.]: E = (11G + 20 + Z - X) mod 30.

  6. Si E = 25 et G > 11, ou si E = 24, alors E = E + 1. (E est ce qu'on appelle l'``epact'' qui permet de prévoir la pleine lune.)
  7. [Find full moon.]: N = 44 - E.

  8. Si N < 21 alors N = N + 30. (Pâques est supposé être le ``premier Dimanche qui suit la première pleine lune qui se produit après ou le jour du 21 Mars''. En fait des perturbations dans l'orbite de la lune font que cette définition n'est pas parfaitement vraie, mais ce qui nous intéresse ici c'est le ``calendrier lunaire'' plutôt que la vraie lune. Le N du mois de Mars est une pleine lune du calendrier.)
  9. [Advance to sunday.]: N = N + 7 - ((D + N) mod 7)
  10. [Get month.]: Si N > 31 then (N-31) Avril, sinon N Mars.
La date calculée par cet algorithme est utilisée par la plupart des églises occidentales pour calculer la date de Pâques pour toutes les années postérieures à 1582.

Exemples:

$ javac Paques.java
$ java Paques
Il faut une année en argument.
$ java Paques 1999
4 avril
 
 

Le jour de la semaine

Solution

Le problème est de trouver le jour de la semaine qui correspond à une date donnée.

Les jours de la semaine seront representes par des petits entiers entre 0 et 6, et les dates sous la forme de tableaux d'entiers a 3 elements: le premier element est le jour du mois, le second est le mois, et le troisieme est l'annee de la date consideree.

Quelques elements:

Exemples:

$ java Jour 31 12 2020
Le 31/12/2020 est un jeudi
$ java Jour 25 12 2020
Le 25/12/2020 est un vendredi