Ecrire une formule apd programme existant
Bonjour à tous,
Je suis en train de me casser la tête depuis plusieurs heures à essayer d'écrire une formule en Fortran 90.
Voici ce que je dois faire :
Citation:
Convertir le calcul du jour julien en une fonction (au sens Fortran 90) recevant jour, mois
et année comme arguments et retourant JD (réel).
Pour cela je pars d'un programme déjà conçu et qui fonctionne :
Code:
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
| program ToJD
implicit none
integer::d,m,y
real::JD,B,A
d=20
m=2
y=2012
IF(m<=2) THEN
y=y-1
m=m+12
ENDIF
IF(y>1582) THEN
A=y/100
B=2-A+(A/4)
ELSE
B=0
ENDIF
JD=INT(365.25*(y+4716))+INT(30.6001*(m+1))+d+B-1524.5
print *,JD
end program |
Ma première idée (c'est la première formule que j'écris d'ailleurs) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| real function JD(d,m,y)
implicit none
integer,intent(in)::d,m,y
real::B,A
IF(m<=2) THEN
y=y-1
m=m+12
ENDIF
IF(y>1582) THEN
A=y/100
B=2-A+(A/4)
ELSE
B=0
ENDIF
JD=INT(365.25*(y+4716))+INT(30.6001*(m+1))+d+B-1524.5
end function |
Cependant j'ai compris que les variables de la fonction ne peuvent être impliqués dans le "calcul" (ex. y=y-1)
Je suppose que pour l'algorithme il faut utiliser des nouvelles données mais alors je ne comprends pas bien comment ça peut affecter la fonction et ses variables ?
Code:
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
| real function JD(d,m,y)
implicit none
integer,intent(in)::d,m,y
real::B,A,o,p,q
IF(p<=2) THEN
q=q-1
p=p+12
ENDIF
IF(q>1582) THEN
A=q/100
B=2-A+(A/4)
ELSE
B=0
ENDIF
o=d
p=m
q=y
JD=INT(365.25*(q+4716))+INT(30.6001*(p+1))+o+B-1524.5
end function |
Je sais pas du tout ce que ça vaut le dernier paragraphe ?! Il est sûrement faux :-/
Au passage est-ce vous pourriez me donner un petit programme qui utilise la fonction en question car j'ai pas encore appris ça mais c'est super utile pour savoir si la fonction fonctionne correctement
Merci d'avance !