1. #1
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    2 776
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 776
    Points : 9 761
    Points
    9 761
    Billets dans le blog
    4

    Par défaut Date du dimanche de Pâques

    Bonjour,

    Je vous propose un nouveau code source : Date du dimanche de Pâques

    Programme calculant la date du dimanche de Pâques pour une année quelconque du calendrier grégorien.

    Qu'en pensez-vous ?

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    janvier 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : janvier 2010
    Messages : 235
    Points : 506
    Points
    506

    Par défaut

    Si ça intéresse quelqu'un j'ai le même genre de programme pour l'Epiphanie, la Chandeleur, la saint Valentin, l'Assomption, la Toussaint, Noël et le Nouvel an.



  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    2 776
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 776
    Points : 9 761
    Points
    9 761
    Billets dans le blog
    4

    Par défaut

    Je suis preneur !


  4. #4
    Expert confirmé

    Inscrit en
    août 2006
    Messages
    3 695
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 695
    Points : 5 016
    Points
    5 016

    Par défaut

    Gie,
    Citation Envoyé par batyann811 Voir le message
    Si ça intéresse quelqu'un j'ai le même genre de programme pour l'Epiphanie, la Chandeleur, la saint Valentin, l'Assomption, la Toussaint, Noël et le Nouvel an.


    À ce sujet, j'ai toujours trouvé dommage que le Nouvel An ne tombe jamais un vendredi 13.

    Et un calcul plus amusant à faire est la date précise des équinoxes et solstices.
    Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    2 776
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 776
    Points : 9 761
    Points
    9 761
    Billets dans le blog
    4

    Par défaut

    Citation Envoyé par droggo Voir le message
    À ce sujet, j'ai toujours trouvé dommage que le Nouvel An ne tombe jamais un vendredi 13.
    C'est regrettable en effet ! La même chose arrive pour la Saint-Valentin.

    Et un calcul plus amusant à faire est la date précise des équinoxes et solstices.
    Je serais curieux de voir ça, étant dépourvu de connaissances sur le sujet. Quels sont les principes de ce calcul ?

  6. #6
    Expert confirmé

    Inscrit en
    août 2006
    Messages
    3 695
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 695
    Points : 5 016
    Points
    5 016

    Par défaut

    Mie,

    Goog te donnera pas mal de réponses.
    Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    janvier 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : janvier 2010
    Messages : 235
    Points : 506
    Points
    506

    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    program Divination;
    begin
      WriteLn('Hummm....');
      WriteLn('D''après mes calculs, cette année, Noël tombera le 25 Décembre.');
    end.
    C'est un vieux programme. Je l'ai écrite en à mes débuts en pascal. 1990 je crois. Il a passé sans encombre le cap de l'an 2 000. J'espère qu'il en sera de même pour l'an 10 000. Si ce n'est pas le cas signalez le moi et j'y apporterais les corrections nécessaires.

  8. #8
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    2 776
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 776
    Points : 9 761
    Points
    9 761
    Billets dans le blog
    4

    Par défaut

    @batyann811

    En fait je n'avais pas lu assez attentivement ton premier message et je ne m'étais pas rendu compte de la plaisanterie !



    J'avais en tête le calcul des fêtes mobiles relatives à Pâques et j'ai cru que c'était de cela que tu parlais.


  9. #9
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    2 776
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 776
    Points : 9 761
    Points
    9 761
    Billets dans le blog
    4

    Par défaut

    Je vous propose l'unité Fetes, qui permet de connaître la date d'une fête relative à Pâques, par exemple la date du mercredi des Cendres. Le calcul se base sur une table des dates de Pâques de 1900 à 2199.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    program JourCendres;
     
    {$APPTYPE GUI}
    {$IFDEF FPC}
      {$MODE DELPHI}
    {$ENDIF}
     
    uses
      Windows, SysUtils, Fetes;
     
    const
      CENDRES = -46;
     
    var
      s: string;
      y: word;
     
    begin
      y := CurrentYear;
     
      s := 'Jour des Cendres'#13#13 + ChaineJour(JourRelatifPaques(y, CENDRES));
     
      MessageBox(0, pChar(s), pChar('Année ' + IntToStr(y)), MB_OK);
    end.
    Si vous lisez ce message avant 1900 (ce qui m'étonnerait franchement mais on ne sait jamais) ou après 2199, vous ne pouvez pas utiliser ce programme. Vous devez acheter la version "Pro".

  10. #10
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 225
    Points : 2 336
    Points
    2 336

    Par défaut

    Salut Roland,

    [...] après 2199, vous ne pouvez pas utiliser ce programme.
    Je n'en mourrais pas

    Puissent ces fêtes exister encore au delà de cette date.

  11. #11
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    2 776
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 776
    Points : 9 761
    Points
    9 761
    Billets dans le blog
    4

    Par défaut

    Citation Envoyé par Eric2a Voir le message
    Je n'en mourrais pas
    Moi non plus.

    J'ai fait une recherche sur les jours juliens (que je confondais auparavant avec le calendrier julien). Voici deux fonctions qui permettent de convertir une date grégorienne en jour julien et inversement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    { http://www.tondering.dk/claus/cal/julperiod.php }
     
    program JulianDayNumber2;
     
    {$IFDEF FPC}{$MODE DELPHI}{$ENDIF}
     
    function JulianDayNumber(const year, month, day: integer): integer;
    { Converts a calendar date to a Julian Day. }
    var
      a, b, c: integer;
    begin
      a := (14 - month) div 12;
      b := year + 4800 - a;
      c := month + 12 * a - 3;
     
      result := day + ((153 * c + 2) div 5) + 365 * b + (b div 4) - (b div 100) + (b div 400) - 32045;
    end;
     
    procedure ConvertJulianDayNumber(const jdn: integer; out year, month, day: integer);
    { Converts a Julian Day to a day, month, and year. }
    var
      a, b, c, d, e, f: integer;
    begin
      a := jdn + 32044;
      b := (4 * a + 3) div 146097;
      c := a - (146097 * b) div 4;
      d := (4 * c + 3) div 1461;
      e := c - ((1461 * d) div 4);
      f := (5 * e + 2) div 153;
     
      day := e - ((153 * f + 2) div 5) + 1;
      month := f + 3 - 12 * (f div 10);
      year := 100 * b + d - 4800 + f div 10;
    end;
     
    var
      y, m, d: integer;
     
    begin
      WriteLn(JulianDayNumber(1582, 10, 15) = 2299161);
    { JD is the Julian Day that starts at noon TT on the specified date. }
     
      ConvertJulianDayNumber(2299161, y, m, d);
      WriteLn((y = 1582) and (m = 10) and (d = 15));
    end.
    Je pourrais utiliser ces fonctions pour trouver la date des fêtes mobiles (encore que j'aime bien mon algorithme actuel). Je songe à reprendre tous ces programmes (algorithme d'Oudin, table des dates de Pâques, fêtes mobiles, jour julien) et à les réécrire avec un style uniforme. Je me dis aussi qu'il serait bon de prendre pour base le type standard TDateTime, au lieu du type que j'ai déclaré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    type
      tJour = record
        s, j, m, a: word; // 1..7, 1..31, 1..12, 1900..2199
      end;
    Vos idées sont les bienvenues.

  12. #12
    Membre expert
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    2 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : mai 2002
    Messages : 2 213
    Points : 3 394
    Points
    3 394

    Par défaut

    salut

    un truc que j'ai dans mes carton depuis des années

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    Function LundiPaques(Iyear : Integer) : TDateTime;
    Var  
      L : array[1..6] of LongInt;
      Lj,Lm : LongInt;
    begin
      L[1] := Iyear Mod 19;
      L[2] := Iyear Mod 4;
      L[3] := Iyear Mod 7;
      L[4] := (19 * L[1] + 24) Mod 30;
      L[5] := ((2 * L[2]) + (4 * L[3]) + (6 * L[4]) + 5) Mod 7;
      L[6] := 22 + L[4] + L[5];
     
      If L[6] > 31 Then
      begin
        Lj := L[6] - 31;
        Lm := 4;
      end
      Else
      begin
        Lj := L[6];
        Lm := 3;
      End;
      //' Lundi de Pâques = Paques + 1 jour
      Result := DateIncDay(EncodeDate(Iyear,Lm,Lj),1);
    End;
     
     
    Function EstFerie(QuelleDate : TDateTime) : Boolean;
    Var
      anneeDate : Integer;
      joursFeries : Array[1..11] of TDateTime ;
      i : Integer;
    begin
      anneeDate := Yearof(QuelleDate);
     
      joursFeries[1] := EncodeDate(anneeDate, 1, 1);
      joursFeries[2] := EncodeDate(anneeDate, 5, 1);
      joursFeries[3] := EncodeDate(anneeDate, 5, 8);
      joursFeries[4] := EncodeDate(anneeDate, 7, 14);
      joursFeries[5] := EncodeDate(anneeDate, 8, 15);
      joursFeries[6] := EncodeDate(anneeDate, 11, 1);
      joursFeries[7] := EncodeDate(anneeDate, 11, 11);
      joursFeries[8] := EncodeDate(anneeDate, 12, 25);
     
      joursFeries[9]  := LundiPaques(anneeDate);
      joursFeries[10] := DateIncDay(joursFeries[9],38);  //' Ascension = lundi de Paques + 38
      joursFeries[11] := DateIncDay(joursFeries[9],49); //' Lundi Pentecôte = lundi de Paques + 49
     
      EstFerie := False;
      For i := 1 To 11 do
        If trunc(QuelleDate) = trunc(joursFeries[i]) Then
          EstFerie := True
    End;
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  13. #13
    Expert confirmé

    Inscrit en
    août 2006
    Messages
    3 695
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 695
    Points : 5 016
    Points
    5 016

    Par défaut

    Bonjour,
    Citation Envoyé par Roland Chastain Voir le message
    J'ai fait une recherche sur les jours juliens (que je confondais auparavant avec le calendrier julien). Voici deux fonctions qui permettent de convertir une date grégorienne en jour julien et inversement.
    Je crois que j'en avais déjà parlé : attention, si on veut vraiment être exact, il faut tenir compte de l'heure, et donc du fuseau horaire pour lequel on fait la conversion.

    En effet, le jour Julien commence à 12:00 GMT, donc...

    Cette petite fantaisie vient du fait que le jour Julien a été défini par les astronomes, qui ne voulaient pas que la date change pendant une nuit d'observation.
    Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.

  14. #14
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    2 776
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 776
    Points : 9 761
    Points
    9 761
    Billets dans le blog
    4

    Par défaut

    @droggo

    Merci pour ces indications. Oui, je me souviens bien de la précédente discussion.

    @anapurna

    Merci pour le code.

  15. #15
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    2 776
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 776
    Points : 9 761
    Points
    9 761
    Billets dans le blog
    4

    Par défaut

    Aïe !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    program dateutils_datetimetojuliandate;
    {$APPTYPE CONSOLE}
    uses
      SysUtils, DateUtils;
     
    begin
      WriteLn(Format(
        '%.1f',
        [DateTimeToJulianDate(EncodeDateTime(1582, 10, 15, 12, 0, 0, 0))]
      ));
      ReadLn;
     
      // 2299160,5 (FPC 3.0.0)
      // 2299161,0 (Delphi 7)
     
    end.
    C'est le second résultat qui est le bon, on est d'accord ?

    J'ai l'impression que je ne suis pas le seul à avoir fait la confusion entre jour julien et calendrier julien (il faut dire que l'appellation a été mal choisie). La description de la fonction dans la documentation de Free Pascal contient une formule ambiguë :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateTimeToJulianDate converts the AValue date/time indication to a julian (as opposed to Gregorian) date.
    Ben non, justement, ce n'est pas "as opposed to gregorian".

  16. #16
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    2 776
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 776
    Points : 9 761
    Points
    9 761
    Billets dans le blog
    4

    Par défaut

    Je vous propose une version révisée de ce programme :

    Date de Pâques

    Je me suis amusé à fabriquer une documentation avec PasDoc. Il n'y a pas grand chose dedans, mais c'est très joli (et facile à faire).

  17. #17
    Expert confirmé

    Inscrit en
    août 2006
    Messages
    3 695
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 695
    Points : 5 016
    Points
    5 016

    Par défaut

    Citation Envoyé par Roland Chastain Voir le message
    Aïe !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    program dateutils_datetimetojuliandate;
    {$APPTYPE CONSOLE}
    uses
      SysUtils, DateUtils;
     
    begin
      WriteLn(Format(
        '%.1f',
        [DateTimeToJulianDate(EncodeDateTime(1582, 10, 15, 12, 0, 0, 0))]
      ));
      ReadLn;
     
      // 2299160,5 (FPC 3.0.0)
      // 2299161,0 (Delphi 7)
     
    end.
    C'est le second résultat qui est le bon, on est d'accord ?
    Oui, c'est bien ce que donne L'Institut de Mécanique Céleste et Calcul des Éphémérides

    Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.

Discussions similaires

  1. Réponses: 8
    Dernier message: 25/06/2014, 17h06
  2. [XL-2007] trouver les date des dimanche d'un mois donné
    Par Smilossss dans le forum Excel
    Réponses: 10
    Dernier message: 30/04/2013, 18h40
  3. Réponses: 0
    Dernier message: 14/11/2010, 16h12
  4. Recherche date de dimanche sur yearweek
    Par tdelacou dans le forum Requêtes
    Réponses: 5
    Dernier message: 04/03/2010, 16h40
  5. PL/SQL TROUVER DATES DE PÂQUES, ASCENSION et PENTECôTE
    Par mimi_été dans le forum PL/SQL
    Réponses: 4
    Dernier message: 21/10/2004, 16h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo