Section courante

A propos

Section administrative du site

Depuis déjà fort longtemps, certaines applications DOS, fournissait la possibilité d'obtenir les phases lunaires lorsqu'on consultait leur calendrier comme en fait fois la capture du MonsterBook:

Pourtant, même s'il ne s'agit que de convertir une date Julienne en Grégorienne pour ensuite calculer à tous les 30 jours (plus exactement 29,53058) la lune revenant inlassablement, les systèmes d'exploitation ne l'indique pas ! Vous trouverez la réponse que vous souhaitez, inspiré du code d'Alan Graff, à l'aide du code source QuickPascal suivant:

  1. Program MoonPhaseExample;
  2.  
  3. Function Abs(x:Real):Real;Begin
  4.  If x < 0 Then x := -x;
  5.  Abs := x;
  6. End;
  7.  
  8. Function MoonPhase(Year,Month,Day:Integer):Real;
  9. Var
  10.  M:Real;
  11.  XYear,Century:LongInt;
  12. Begin
  13.  If Month <= 2 Then Begin
  14.   Year := Year - 1;
  15.   Month := Month + 12;
  16.  End;
  17.  Month := Month - 3;
  18.  XYear := Year MOD 100;
  19.  Century := (((Year DIV 100) * 146097)) shr 2;
  20.  XYear := (XYear * 1461) shr 2;
  21.  M := (Trunc(((((Month * 153) + 2) / 5) + Day) + 1721119 + XYear + Century) + 4.867) / 29.53058;
  22.  MoonPhase:=Abs(2 * (M - Trunc(M)) - 1);
  23. End;
  24.  
  25. Var
  26.  I:Integer;
  27.  CircleType:Real;
  28. BEGIN
  29.  For I := 1 to 31 do Begin
  30.   CircleType := MoonPhase(1999, 11, I);
  31.   If CircleType > 0.97 Then
  32.    WriteLn(I,' novembre 1999, Phase de la lune:Pleine lune')
  33.   Else Begin
  34.    If CircleType < 0.03 Then
  35.     WriteLn(I,' novembre 1999, Phase de la lune:Pas de lune')
  36.    Else Begin
  37.     If (CircleType > 0.46) and (CircleType < 0.53) Then Begin
  38.      WriteLn(I,' novembre 1999, Phase de la lune: Quart de lune');
  39.     End;
  40.    End;
  41.   End;
  42.  End;
  43.  For I := 1 to 31 do Begin
  44.   CircleType := MoonPhase(2007, 8, I);
  45.   If CircleType > 0.97 Then
  46.    WriteLn(I,' août 2007, Phase de la lune:Pleine lune')
  47.   Else Begin
  48.    If CircleType < 0.03 Then
  49.     WriteLn(I,' août 2007, Phase de la lune:Pas de lune')
  50.    Else Begin
  51.     If (CircleType > 0.46) and (CircleType < 0.53) Then Begin
  52.      WriteLn(I,' août 2007, Phase de la lune: Quart de lune');
  53.     End;
  54.    End;
  55.   End;
  56.  End;
  57. END.

on obtiendra le résultat suivant :

1 novembre 1999, Phase de la lune: Quart de lune
8 novembre 1999, Phase de la lune:Pas de lune
15 novembre 1999, Phase de la lune: Quart de lune
23 novembre 1999, Phase de la lune:Pleine lune
30 novembre 1999, Phase de la lune: Quart de lune
6 août 2007, Phase de la lune: Quart de lune
13 août 2007, Phase de la lune:Pas de lune
20 août 2007, Phase de la lune: Quart de lune
28 août 2007, Phase de la lune:Pleine lune


Dernière mise à jour : Dimanche, le 4 mai 2014