PHASELUN.TXT

(6 KB) Pobierz
   
======================  CALCUL DES PHASES DE LA LUNE ==========

   'phaselun.bas

   'Traduit du PASCAL.
   'Les routines sont dans le fichier nrpas13.zip
   'Qui peut, au choix, être récupéré chez
   'http://www.programmersheaven.com/zone24/cat416/
   'http://www.filelibrary.com/Contents/DOS/77/21.html
   'http://www.efg2.com/Lab/Library/Delphi/MathInfo/Resources.htm

   '***  PAS TRES PRECIS... (15/20 minutes parfois) ***

   DECLARE SUB InverseJJulien (jjul AS LONG, jour AS INTEGER, mois AS INTEGER, annee AS INTEGER)
   DECLARE SUB flmoon (n AS INTEGER, nph AS INTEGER, jd AS LONG, frac AS DOUBLE)
   DECLARE FUNCTION JourJulien& (jour AS INTEGER, mois AS INTEGER, annee AS INTEGER)

   DIM mois AS INTEGER, jour AS INTEGER, annee AS INTEGER
   DIM jjul AS LONG, j1 AS LONG, j2 AS LONG
   DIM i1 AS INTEGER, i2 AS INTEGER, i3 AS INTEGER
   DIM secs AS SINGLE
   DIM n AS INTEGER, nph AS INTEGER, frac  AS DOUBLE
   DIM timzon AS SINGLE
   DIM phase$(0 TO 3)
   DIM sortie AS INTEGER

   CONST ecran = 5, imprimante = 6

   CONST zon = 0!  'CHANGER SELON ZONE. NE PAS LAISSER EN CONSTANTE

   phase$(0) = "Nouvelle lune"
   phase$(1) = "Premier quartier"
   phase$(2) = "Pleine lune"
   phase$(3) = "Dernier quartier"

   CLS
      OPEN "scrn:" FOR RANDOM AS #ecran
      OPEN "lpt1:" FOR OUTPUT AS #imprimante
      sortie = ecran
      timzon = zon / 24!
      PRINT #sortie, "Calcul de la date des quelques prochaines phases de la lune"
      INPUT "Donner la date de d‚part: (ex 31, 1, 2001): "; jour, mois, annee
      'Nombre approx de pleines lunes depuis janvier 1900
      n = INT(12.37 * (annee - 1900 + INT((mois - .5) / 12!)))
      nph = 2
      j1 = JourJulien&(jour, mois, annee)
      flmoon n, nph, j2, frac
      n = n + INT((j1 - j2) / 28!)
      PRINT #sortie, "": PRINT #sortie, "": PRINT #sortie, ""
      PRINT #sortie, "   Date         Heure  TU      Phase"
      PRINT #sortie, "   -------------------------------------------"
      FOR i = 1 TO 20
         flmoon n, nph, j2, frac
         frac = 24! * (frac + timzon)
         IF (frac < 0!) THEN
            j2 = j2 - 1
            frac = frac + 24!
         END IF
         IF (frac > 12!) THEN
             j2 = j2 + 1
             frac = frac - 12!
          ELSE
             frac = frac + 12!
         END IF
         i1 = INT(frac)
         secs = 3600! * (frac - i1)
         i2 = INT(secs / 60!)
         InverseJJulien j2, jour, mois, annee
         PRINT #sortie, USING "   ##/##/####"; jour; mois; annee;
         PRINT #sortie, USING "   ## h ## min    "; i1; i2;
         PRINT #sortie, phase$(nph)
         IF (nph = 3) THEN
            nph = 0
            n = n + 1
          ELSE
            nph = nph + 1
         END IF
    NEXT i
 END

'
'
'
'
'
'
      SUB flmoon (n AS INTEGER, nph AS INTEGER, jd AS LONG, frac AS DOUBLE)
        DIM c AS DOUBLE, t AS DOUBLE, t2 AS DOUBLE
        DIM xas AS DOUBLE
        DIM xtra AS DOUBLE
        DIM am AS DOUBLE
        DIM i AS INTEGER
        CONST rad = 3.14159265# / 180#

          c = n + nph / 4
          t = c / 1236.85
          t2 = SQR(t)
          xas = 359.2242 + 29.105356# * c
          am = 306.0253 + 385.816918# * c + .01073 * t2
          jd = 2415020 + 28& * n + 7 * nph
          xtra = .75933 + 1.53058868# * c + (.0001178 - 1.55E-07 * t) * t2
          IF ((nph = 0) OR (nph = 2)) THEN
             xtra = xtra + (.1734 - .000393 * t) * SIN(rad * xas) - .4068 * SIN(rad * am)
           ELSEIF ((nph = 1) OR (nph = 3)) THEN
             xtra = xtra + (.1721 - .0004 * t) * SIN(rad * xas) - .628 * SIN(rad * am)
           ELSE
             PRINT #sortie, ("pause dans FLMOON - nph inconnu.")
             a$ = INPUT$(1)
          END IF
          IF (xtra >= 0!) THEN
             i = INT(xtra)
           ELSE
             i = INT(xtra - 1#)
          END IF
          jd = jd + i
          frac = xtra - i
      END SUB

'
'
'
'
'
'
      SUB InverseJJulien (julian AS LONG, jour AS INTEGER, mois AS INTEGER, annee AS INTEGER)
         CONST igreg2 = 2299161
         DIM je AS LONG, jd AS LONG, jc AS LONG, jb AS LONG
         DIM jalpha AS LONG, ja AS LONG

          IF (julian >= igreg2) THEN
            jalpha = INT(((julian - 1867216) - .25) / 36524.25)
            ja = julian + 1 + jalpha - INT(.25 * jalpha)
           ELSE
            ja = julian
          END IF
          jb = ja + 1524
          jc = INT(6680& + ((jb - 2439870) - 122.1) / 365.25)
          jd = 365& * jc + INT(.25 * jc)
          je = INT((jb - jd) / 30.6001)
          jour = jb - jd - INT(30.6001 * je)
          mois = je - 1
          IF (mois > 12) THEN mois = mois - 12
          annee = jc - 4715
          IF (mois > 2) THEN annee = annee - 1
          IF (annee <= 0) THEN annee = annee - 1
     END SUB

'
'
'
'
'
'
      FUNCTION JourJulien& (jour AS INTEGER, mois AS INTEGER, annee AS INTEGER)
         'Retourne-1 si annee=0 (l'an z‚ro n'existe pas)

         CONST igreg = 588829
         DIM an AS INTEGER
         DIM ja AS LONG, jm AS LONG
         DIM jy AS LONG, jul AS LONG
         DIM grego AS LONG
           an = annee
           IF (an = 0) THEN
             JourJulien& = -1
             EXIT FUNCTION
           END IF
           IF (an < 0) THEN an = an + 1
           IF (mois > 2) THEN
             jy = an
             jm = mois + 1
           ELSE
             jy = an - 1
             jm = mois + 13
          END IF
          jul = INT(365.25 * jy) + INT(30.6001 * jm) + jour + 1720995
          grego = jour + 31& * (mois + 12& * an)
          IF (grego >= igreg) THEN
             ja = INT(.01 * jy)
             jul = jul + 2 - ja + INT(.25 * ja)
          END IF
          JourJulien& = jul
      END FUNCTION

=============================  SORTIES DU PROGRAMME =====================

Calcul de la date des quelques prochaines phases de la lune



   Date         Heure TU       Phase
   -------------------------------------------
    1/11/2001    5 h 49 min    Pleine lune
    8/11/2001   12 h  5 min    Dernier quartier
   15/11/2001    6 h 41 min    Nouvelle lune
   22/11/2001   23 h 34 min    Premier quartier
   30/11/2001   21 h  3 min    Pleine lune
    7/12/2001   19 h 43 min    Dernier quartier
   14/12/2001   21 h  2 min    Nouvelle lune
   22/12/2001   20 h 52 min    Premier quartier
   30/12/2001   10 h 55 min    Pleine lune
    6/ 1/2002    4 h  3 min    Dernier quartier
   13/ 1/2002   13 h 37 min    Nouvelle lune
   21/ 1/2002   17 h 28 min    Premier quartier
   28/ 1/2002   23 h  5 min    Pleine lune
    4/ 2/2002   13 h 53 min    Dernier quartier
   12/ 2/2002    7 h 35 min    Nouvelle lune
   20/ 2/2002   11 h 42 min    Premier quartier
   27/ 2/2002    9 h 33 min    Pleine lune
    6/ 3/2002    1 h 39 min    Dernier quartier
   14/ 3/2002    1 h 47 min    Nouvelle lune
   22/ 3/2002    2 h 21 min    Premier quartier


Zgłoś jeśli naruszono regulamin