Gladir.com - Pascal - Astronomie - Phase lunaire


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, à l'aide du code source Pascal suivant:
Program MoonPhaseExample;

Function Abs(x:Real):Real;Begin
 If x < 0 Then x := -x;
 Abs := x;
End;

Function MoonPhase(Year,Month,Day:Integer):Real;
Var
 M:Real;
 XYear,Century:LongInt;
Begin
 If Month <= 2 Then Begin
  Year := Year - 1;
  Month := Month + 12;
 End;
 Month := Month - 3;
 XYear := Year MOD 100;
 Century := (((Year DIV 100) * 146097)) shr 2;
 XYear := (XYear * 1461) shr 2;
 M := (Trunc(((((Month * 153) + 2) / 5) + Day) + 1721119 + XYear + Century) + 4.867) / 29.53058;
 MoonPhase:=Abs(2 * (M - Trunc(M)) - 1);
End;

Var
 I:Integer;
 CircleType:Real;
BEGIN
 For I := 1 to 31 do Begin
  CircleType := MoonPhase(1999, 11, I);
  If CircleType > 0.97 Then
   WriteLn(I,' novembre 1999, Phase de la lune:Pleine lune')
  Else Begin
   If CircleType < 0.03 Then
    WriteLn(I,' novembre 1999, Phase de la lune:Pas de lune')
   Else Begin
    If (CircleType > 0.46) and (CircleType < 0.53) Then Begin
     WriteLn(I,' novembre 1999, Phase de la lune: Quart de lune');
    End;
   End;
  End;
 End;
 For I := 1 to 31 do Begin
  CircleType := MoonPhase(2007, 8, I);
  If CircleType > 0.97 Then
   WriteLn(I,' août 2007, Phase de la lune:Pleine lune')
  Else Begin
   If CircleType < 0.03 Then
    WriteLn(I,' août 2007, Phase de la lune:Pas de lune')
   Else Begin
    If (CircleType > 0.46) and (CircleType < 0.53) Then Begin
     WriteLn(I,' août 2007, Phase de la lune: Quart de lune');
    End;
   End;
  End;
 End;
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: Mardi, le 7 février 2006