%FSTYLE{/syracuse/fabrique/styles/fabrique.css} %AUTEUR{Jean-Michel Sarlat} %MAIL{jsarlat@planete.net} %DATE{4 novembre 2002} %TITRE{Calculs avec PARI (1)} %P{§l/syracuse/pari/§Voir la page PARI sur ce site§} %P{Cette page est un premier essai d'utilisation de §gPARI§ à travers les fichiers tagués. Le sujet est simple : calculer la date en jours juliens c'est à dire déterminer le nombre de jours écoulés depuis le 1 janvier 4713 à midi (Greenwich) avant notre ère. Cette échelle de temps est utile pour synchroniser les calendriers ; c'est celle qui est utilisée en astronomie pour dater les événements.} %S{Le script julien.gp} FICHIER:julien.gp: \\ Julien est en l'honneur de Jules Scaliger, le père du mathématicien \\ qui a introduit cette échelle de temps en 1583. Le calendrier \\ grégorien date de 1582. \\ Calcul de la date en jours juliens JD(J,M,A,h,m,s) = { local(AT,BT,JDT) ; if (M<3 , A = A-1; M = M+12); AT = floor(A/100); BT = 2-AT+floor(AT/4); JDT = floor(365.25*(A+4716)) +floor(30.6001*(M+1)) +J +(h+(m+s/60)/60)/24 +BT -1524.5; return(JDT); } \\ Calcul de la date en jours juliens rapportée à l'époque 2000 \\ Utile pour l'utilisation des théories planétaires actuelles JD2000(J,M,A,h,m,s) = JD(J,M,A,h,m,s)-JD(1,1,2000,12,0,0); \\ Calcul de la date calendaire à partir du JD \\ La valeur retounée est le vecteur [J,M,A,h,m,s,JS] \\ (JS est le jour de la semaine) CD(jd) = { local(a,A,B,C,D,E,F,G,h,m,s,Z); Z = floor(jd+0.5); F = jd+0.5-Z; if (Z>=2299161, a = floor((Z-1867216.25)/36524.25); A = Z+1+a-floor(a/4), A = Z; ); B = A+1524; C = floor((B-122.1)/365.25); D = floor(365.25*C); E = floor((B-D)/30.6001); G = B-D-floor(30.6001*E)+F; h = (G-floor(G))*24; m = (h-floor(h))*60; s = (m-floor(m))*60; if (E<14,E=E-1,E=E-13); if (floor(E)>2,C=C-4716,C=C-4715); return([floor(G),E,C,floor(h),floor(m),floor(s),(Z+1)%7]); } § FICHIER:format.gp: MOIS = ["janvier","février","mars","avril","mai","juin",\ "juillet","août","septembre","octobre","novembre","décembre"]; JOURS = ["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"]; \\ format degrés, minutes, secondes format_dms(d) = Str(d[1]"°"d[2]"'"floor(d[3])"''"); \\ format j mois AAAA, h:m:s format_date(d) = Str(JOURS[d[7]+1]" "d[1]" "MOIS[d[2]]" "d[3]\ ", "d[4]":"d[5]":"floor(d[6])); § M:gp2html: gp="julien.gp" html="julien.html" %S{Le script format.gp} M:gp2html: gp="format.gp" html="format.html" %S{Utilisation} %SS{exemple} <[ ]> FICHIER:fabrique.gp: prevar(c) = return(Str(c" = ")); preexe(c) = return(Str(c" -> ")); fb(c) = return(Str(""c"")); fi(c) = return(Str(""c"")); out(c,e) = write(sortie,Str(""c" "e"")); outv(c) = out(prevar(c),eval(c)); oute(c) = out(preexe(c),eval(c)); outl(c,s) = write(sortie,Str(""c"")); § FICHIER:bgp1.txt: FICHIER:cmd%%n%%.gp: § FICHIER:egp1.txt: FICHIER:entete.gp: sortie = "test%%n%%.txt"; read("fabrique.gp"); %§ FICHIER:pied.gp: \\ \w test%%n%%.txt \q %§ SH:rm -f test%%n%%.txt SH:cat entete.gp cmd%%n%%.gp > test%%n%%.gp SH:gp < test%%n%%.gp 2> /dev/null SH:rm entete.gp pied.gp <[
]> 
<[cmd%%n%%.gp]> 
<[
   
]> <[test%%n%%.txt]> <[
]> § M:bgp1: n="1" \p 15 read("julien.gp"); read("format.gp"); outl("Calcul de la date en jours juliens","section"); oute("JD(4,11,2002,5,0,4)"); oute("JD(12,5,-40,12,0,0)"); outl("Calcul de la durée entre deux dates","section"); oute("a = JD(23,5,1983,17,0,0)"); oute("b = JD(20,1,1988,23,0,0)"); oute("b-a"); outl("Détermination de la date dans le calendrier grégorien","section"); oute("d = CD(2299160)"); out(fb("formaté : "),format_date(d)); oute("d = CD(2299161)"); out(fb("formaté : "),format_date(d)); oute("d = CD(2000000)"); out(fb("formaté : "),format_date(d)); outl("Réversibilité","section"); oute("a = JD(26,2,1848,15,20,0)"); oute("CD(a)"); § M:egp1: %SS{formatage des résultats} %P{Pour faire en sorte que certains résultats soient inscrits dans un fichier avec un préformatage HTML, j'utilise un petit script, c'est là que l'on trouve la définition des fonctions commençant par §vout§.} M:gp2html: gp="fabrique.gp" html="fabrique.html" %%EOF