PAQUES 1.0.0

cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012 - 2 avril 2010 à 18:16
cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012 - 3 avril 2010 à 09:32
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/51550-paques-1-0-0

cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012
3 avril 2010 à 09:32
J'oubliais, en Alsace-Moselle (régime du Concordat) le Vendredi Saint ainsi que le 26 Décembre sont aussi fériés.
2 jours en plus de repos !
cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012
3 avril 2010 à 09:03
Bonjour Dubois77,

Cette méthode fonctionne aussi mais apparemment que jusqu'en 4099 d'après le commentaire du source (mais çà doit suffire pour nos vies d'hommes ;).
L'avantage de l'algorithme de Oudin est qu'il nécessite moins de calcul aussi.

Cordialement.

Christophe
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
3 avril 2010 à 08:31
Bonjour Christophe
pour compléter ce dossier, une variante de pâques et les autres jours qui vont avec !

function Paques(Annee : Integer) : TDateTime;
var
Y,G,C,X,Z,D,E,N,P,J,M : Integer;
begin
{Algorithme valable pour les dates comprises entre 1583 et 4099}
Y := Annee;
G := (Y mod 19) + 1;
C := Trunc((Y/100)) + 1;
X := Trunc(3 * C / 4) - 12;
Z := Trunc(((8 * C) + 5) / 25) - 5;
D := Trunc(((5 * Y) / 4) - X - 10);
E := ((11 * G)+ 20 + Z - X) mod 30; if ((E 25) and (G > 11)) or (E 24) then
E := E + 1;
N := 44 - E;
if N < 21 then
N := N + 30;
P := N + 7 - ((D + N) mod 7);
if P > 31 then
J := P - 31
else
J := P;
if J = P then
M := 3
else
M := 4;
Result := EncodeDate(Annee, M, J);
end;

function LundiPaques(Annee : Integer) : TDateTime;
begin
result := Paques(annee)+1;
end;

function Ascension(Annee : Integer) : TDateTime;
begin
result := Paques(annee)+39;
end;

function Pentecote(Annee : Integer) : TDateTime;
begin
result := Paques(annee)+49;
end;

function LundiPentecote(Annee : Integer) : TDateTime;
begin
result := Paques(annee)+50;
end;
cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012
2 avril 2010 à 18:16
Pour proposer de l'innovant, j'ai vérifié que cet algorithme n'était pas présent sur ce site.
L'année est limitée à 9999 à cause de la structure TDateTime qui n'accepte les dates que jusque là.
Rejoignez-nous