'Durejou3.bas DIM mois$(12), jmois(12) AS INTEGER DIM DurJour(-234 TO 234) AS SINGLE DIM ADurJour(0 TO 360) AS SINGLE DIM ficgia AS INTEGER CONST k = .0172024 CONST jm = 308.67 CONST jl = 21.55 CONST e = .0167 CONST Oblic = .4091 CONST pi = 3.141593, DegRad = pi / 180, hr = pi / 12 CONST FmtOut = "Heure du passage au m‚ridien (midi vrai): ## h ## m ## s" CONST janvier = 1, decembre = 12 CONST vrai = -1, faux = NOT (vrai) CLS 'GOSUB Essais GOSUB Essais2 'Hauteur du soleil au lever et au coucher ht = 0' -50 / 60 ht = ht * DegRad FusHor = 0 lo = 0 lo = lo * DegRad 'latit = Latitude(en degr‚) latit = latit * DegRad 'jour= jour 'mois IF (mois < 3) THEN mois = mois + 12 h = 12 + lo / hr 'Fuseau horaire et coordonn‚es g‚ographiques INPUT "Fuseau horaire"; FusHor INPUT "Longitude (en degr‚, positive … l'ouest)"; lo lo = lo * DegRad INPUT "Latitude (en degr‚)"; latit: latit = latit * DegRad 'Date INPUT "Jour, Mois"; jour, mois IF (mois < 3) THEN mois = mois + 12 'Heure TU du milieu de la journ‚e h = 12 + lo / hr GOSUB Nombrejours GOSUB AnomalieLongitudeMmoyenne GOSUB LongitudeVraie GOSUB CoordonRectangulaires GOSUB EquatempsDeclinaison GOSUB HeurePassageMeridien GOSUB AngleHoraire GOSUB LeverDuSoleil GOSUB CoucherDuSoleil END '------------------------------------------------------------------------- Essais: curieux1 = faux FOR i = 1 TO 12 READ mois$(i), jmois(i) NEXT i h = 12 ht = -50 / 60 ht = ht * DegRad FusHor = 0 lo = 0 FOR nlatit = 0 TO 90 latit = nlatit * DegRad FOR nummois = janvier TO decembre mois = nummois FOR jour = 1 TO jmois(mois) LOCATE 1, 1: PRINT nlatit, mois, jour GOSUB Nombrejours GOSUB AnomalieLongitudeMmoyenne GOSUB LongitudeVraie GOSUB CoordonRectangulaires GOSUB EquatempsDeclinaison GOSUB AngleHoraire GOSUB LeverDuSoleil GOSUB CoucherDuSoleil IF (levepas) THEN DureeJour = 0 ELSEIF (couchepas) THEN DureeJour = 24 ELSE GOSUB DureeDuJour END IF declindeg = declin * 180 / pi 'PRINT USING "## \ \ : ##.# ###.##"; jour; mois$(mois); DureeJour; declindeg 'a$ = INPUT$(1) NEXT jour NEXT nummois NEXT nlatit END Essais2: latdeb = 0 latfin = 90 steplat = .25 curieux1 = faux FOR i = 1 TO 12 READ mois$(i), jmois(i) NEXT i h = 12 ht = 0' -50 / 60 ht = ht * DegRad FusHor = 0 lo = 0 FOR nummois = janvier TO decembre mois = nummois FOR jour = 1 TO jmois(mois) nblat = 0 SigmaDureeJour = 0 FOR nlatit = latdeb TO latfin STEP steplat nblat = nblat + 1 latit = nlatit * DegRad 'LOCATE 1, 1: PRINT nlatit, mois, jour GOSUB Nombrejours GOSUB AnomalieLongitudeMmoyenne GOSUB LongitudeVraie GOSUB CoordonRectangulaires GOSUB EquatempsDeclinaison GOSUB AngleHoraire GOSUB LeverDuSoleil GOSUB CoucherDuSoleil IF (levepas) THEN DureeJour = 0 ELSEIF (couchepas) THEN DureeJour = 24 ELSE GOSUB DureeDuJour END IF SigmaDureeJour = SigmaDureeJour + DureeJour declindeg = declin * 180 / pi 'LOCATE 2, 1 'PRINT USING "## \ \ : ##.# ###.##"; jour; mois$(mois); DureeJour; declindeg 'LOCATE 4, 1: PRINT SigmaDureeJour 'a$ = INPUT$(1) NEXT nlatit DurMoyJour = SigmaDureeJour / nblat 'DurJour(-234, 234) AS SINGLE '''LOCATE 4, 1: PRINT SigmaDureeJour / nblat nbdec = CINT(declindeg * 10) '''''PRINT USING "## \ \ : ##.# ###.#"; jour; mois$(mois); DurMoyJour; declindeg '''PRINT USING "## \ \ : #### ##.# "; jour; mois$(mois); nbdec; DurMoyJour DurJour(nbdec) = DurMoyJour lv = LongiVrai * 180 / pi IF (lv < 0) THEN lv = lv + 360 ilv% = CINT(lv) IF (ilv% = 360) THEN ilv% = 0 ADurJour(ilv%) = DurMoyJour 'PRINT CINT(LV) PRINT USING "## \ \ : #### ### ##.# "; jour; mois$(mois); nbdec; ilv%; DurMoyJour 'PRINT nbdec 'a$ = INPUT$(1) NEXT jour NEXT nummois GOSUB CreGia END CreGia: ficgia = FREEFILE OPEN "durjour.gia" FOR OUTPUT AS #ficgia PRINT #ficgia, "\VERSION" PRINT #ficgia, "1" PRINT #ficgia, "\LAYOUT" PRINT #ficgia, "\HEADER" PRINT #ficgia, "\XTEXT" PRINT #ficgia, "\YTEXT" PRINT #ficgia, "\DATA" FOR i = -234 TO 234 PRINT USING " ###.# ##.#"; i / 10!; DurJour(i) IF (DurJour(i) > 0) THEN PRINT #ficgia, USING "###.# , ##.##"; i / 10!; DurJour(i) END IF '''a$ = INPUT$(1) NEXT i CLOSE #ficgia ficgia = FREEFILE OPEN "adurjo.gia" FOR OUTPUT AS #ficgia PRINT #ficgia, "\VERSION" PRINT #ficgia, "1" PRINT #ficgia, "\LAYOUT" PRINT #ficgia, "\HEADER" PRINT #ficgia, "\XTEXT" PRINT #ficgia, "\YTEXT" PRINT #ficgia, "\DATA" FOR i = 0 TO 359 PRINT USING "### , ##.##"; i; ADurJour(i) IF (ADurJour(i) > 0) THEN PRINT #ficgia, USING "### , ##.##"; i; ADurJour(i) END IF NEXT i CLOSE #ficgia FOR i = 0 TO 359 IF (ADurJour(i) <= 0) THEN ADurJour(i) = ADurJour(i - 1) BEEP 'PRINT ">>>>>"; i 'a$ = INPUT$(1) END IF NEXT i OPEN "ddurjo.gia" FOR OUTPUT AS #ficgia PRINT #ficgia, "\VERSION" PRINT #ficgia, "1" PRINT #ficgia, "\LAYOUT" PRINT #ficgia, "\HEADER" PRINT #ficgia, "\XTEXT" PRINT #ficgia, "\YTEXT" PRINT #ficgia, "\DATA" FOR i = 0 TO 358 PRINT USING "### ##.## ##.### ### ###"; i; ADurJour(i); ADurJour(i + 1) - ADurJour(i); i + 1; i PRINT #ficgia, USING " ### , ###.## "; i + 1; (ADurJour(i + 1) - ADurJour(i)) * 60 a$ = INPUT$(1) NEXT i 'FOR i = 0 TO 359 'PRINT i, ADurJour(i) 'a$ = INPUT$(1) 'NEXT i RETURN Nombrejours: 'Ecoul‚s depuis le 1 Mars O h TU NbrJours = INT(30.61 * (mois + 1)) + jour + h / 24 - 123 RETURN AnomalieLongitudeMmoyenne: AnoMoy = k * (NbrJours - jm) LongiMoy = k * (NbrJours - jl) RETURN LongitudeVraie: LongiVrai = LongiMoy + 2 * e * SIN(AnoMoy) + 1.25 * e * e * SIN(2 * AnoMoy) RETURN CoordonRectangulaires: x = COS(LongiVrai) y = COS(Oblic) * SIN(LongiVrai) z = SIN(Oblic) * SIN(LongiVrai) RETURN EquatempsDeclinaison: r = LongiMoy GOSUB Rotation EquaTemps = ATN(y / x) declin = ATN(z / SQR(1 - z * z)) RETURN HeurePassageMeridien: pm = h + FusHor + EquaTemps / hr hs = INT(pm) pm = 60 * (pm - hs) ms = INT(pm) pm = 60 * (pm - ms) PRINT USING FmtOut; hs; ms; pm RETURN AngleHoraire: 'Au lever et au coucher levepas = faux couchepas = faux cs = (SIN(ht) - SIN(latit) * SIN(declin)) / COS(latit) / COS(declin) IF (cs > 1) THEN levepas = vrai '''LOCATE 2, 1: PRINT "Le soleil ne se lŠve pas" RETURN END IF IF (cs < -1) THEN couchepas = vrai '''LOCATE 3, 1: PRINT "Le soleil ne se couche pas" RETURN END IF IF (cs = 0) THEN AngleHor = pi / 2 ELSE AngleHor = ATN(SQR(1 - cs * cs) / cs) END IF IF (cs < 0) THEN AngleHor = AngleHor + pi RETURN LeverDuSoleil: pm = h + FusHor + (EquaTemps - AngleHor) / hr IF (pm < 0) THEN pm = pm + 24 HeureLeve = pm hs = INT(pm) min = 60 * (pm - hs) IF (curieux1) THEN PRINT USING "Heure du lever: ## h ## m"; hs; min END IF RETURN CoucherDuSoleil: pm = h + FusHor + (EquaTemps + AngleHor) / hr IF (pm > 24) THEN pm = pm - 24 HeureCouche = pm hs = INT(pm) min = 60 * (pm - hs) IF (curieux1) THEN PRINT USING "Heure du coucher: ## h ## m"; hs; min END IF RETURN DureeDuJour: DureeJour = HeureCouche - HeureLeve RETURN Rotation: 'Rotation de l'angle r autour de l'axe z rx = COS(r) * x + SIN(r) * y ry = -SIN(r) * x + COS(r) * y x = rx y = ry RETURN DATA "JANVIER",31 DATA "FEVRIER",28 DATA "MARS",31 DATA "AVRIL",30 DATA "MAI",31 DATA "JUIN",30 DATA "JUILLET",31 DATA "AOUT",31 DATA "SEPTEMBRE",30 DATA "OCTOBRE",31 DATA "NOVEMBRE",30 DATA "DECEMBRE",31