Listado del programa:
1 REM CIRCUNSTANCIAS LOCALES EN UN ECLIPSE SOLAR (MEEUS) #23 SAVE...ESM23
2 PI=3.14159265#:SCREEN 0:WIDTH 80
3 DEF FN AS(X)=ATN(X/SQR(1-X*X))
4 DEF FN AC(X)=-ATN(X/SQR(1-X*X))+PI/2
10 REM LEER FICHERO ECLIPSE.BIN SAVE...MEEUS6
20 DEFDBL J,M
30 OPEN "R",#1, "ECLIPSE.BIN",117
40 FIELD #1, 2 AS A$,1 AS M$,1 AS D$,1 AS T$,4 AS F$,4 AS G$,8 AS J$,2 AS K$,1 AS S$,1 AS T0$,4 AS X0$,4 AS X1$,4 AS X2$,4 AS X3$,76 AS Z1$
50 FIELD #1, 41 AS Z2$,4 AS Y0$,4 AS Y1$,4 AS Y2$, 4 AS Y3$,4 AS D0$, 4 AS D1$,4 AS D2$,8 AS M0$,8 AS M1$,32 AS Z3$
60 FIELD #1, 85 AS Z4$,4 AS L10$, 4 AS L11$,4 AS L12$,4 AS L20$,4 AS L21$,4 AS L22$,4 AS F1$, 4 AS F2$
70 FOR S=1 TO 6
80 READ TIPO$
90 TP$(S)=TIPO$
100 NEXT S
110 DATA ECLIPSE PARCIAL,ECLIPSE CENTRAL TOTAL,ECLIPSE CENTRAL ANULAR,ECLIPSE ANULAR NO CENTRAL,ECLIPSE TOTAL NO CENTRAL,ECLIPSE ANULAR-TOTAL
120 CLS:PRINT "ELEMENTOS BESSELIANOS DE UN ECLIPSE SOLAR (PERIODO 1951-2200)"
130 PRINT "============================================================="
140 INPUT "NUMERO DEL ECLIPSE EN EL PERIODO (menor que 571)=";NUM
150 IF NUM>570 THEN 120
160 GET #1,NUM
170 PRINT "A¥O=";CVI(A$);" MES=";ASC(M$)-64;" DIA=";ASC(D$)-64
180 DT=29.1+.7026*(CVI(A$)-1950)
190 FE$=STR$(ASC(D$)-64)+"-"+STR$(ASC(M$)-64)+"-"+STR$(CVI(A$))
200 FM=CVS(F$):TIPO=ASC(T$)-64
210 PRINT "TIPO=";TP$(TIPO);
220 IF ASC(T$)=65 THEN PRINT " FASE MAX.=";CVS(F$) ELSE PRINT " "
230 PRINT "GAMMA=";CVS(G$)
240 PRINT
250 PRINT "JDE=";CVD(J$);" K=";CVI(K$);" SAROS=";ASC(S$)
260 PRINT "T0=";ASC(T0$)-64
270 T0=ASC(T0$)-64
280 PRINT
290 PRINT "X0=";CVS(X0$);" X1=";CVS(X1$);" X2=";CVS(X2$);" X3=";CVS(X3$)
300 X0=CVS(X0$):X1=CVS(X1$):X2=CVS(X2$):X3=CVS(X3$)
310 PRINT "Y0=";CVS(Y0$);" Y1=";CVS(Y1$);" Y2=";CVS(Y2$);" Y3=";CVS(Y3$)
320 Y0=CVS(Y0$):Y1=CVS(Y1$):Y2=CVS(Y2$):Y3=CVS(Y3$)
330 PRINT
340 PRINT "d0=";CVS(D0$);" d1=";CVS(D1$);" d2=";CVS(D2$)
350 D0=CVS(D0$):D1=CVS(D1$):D2=CVS(D2$)
360 PRINT "M0=";CVD(M0$);" M1=";CVD(M1$)
370 M0=CVD(M0$):M1=CVD(M1$)
380 PRINT
390 PRINT "L10=";CVS(L10$);" L11=";CVS(L11$);" L12=";CVS(L12$)
400 L10=CVS(L10$):L11=CVS(L11$):L12=CVS(L12$)
410 PRINT "L20=";CVS(L20$);" L21=";CVS(L21$);" L22=";CVS(L22$)
420 L20=CVS(L20$):L21=CVS(L21$):L22=CVS(L22$)
430 PRINT "TAN f1=";CVS(F1$);" TAN f2=";CVS(F2$)
440 F1=CVS(F1$):F2=CVS(F2$)
442 LOCATE 4,35:PRINT "DIFERENCIA TD Y TU (SEG) =";:PRINT USING "####.##";DT
444 LOCATE 4,35:INPUT "DIFERENCIA TD Y TU (SEG) =";DT
450 LOCATE 21,5:PRINT "Pulse O para otro eclipse"
460 LOCATE 22,5:PRINT "Pulse C para calcular el eclipse"
470 Z$=INKEY$ :IF Z$="" THEN 470
480 IF Z$="c" OR Z$="C" THEN 500 ELSE 120
490 REM CALCULO DEL ECLIPSE SOLAR (2ø metodo para longitudes dadas)
500 CLS:PRINT "ECLIPSE SOLAR DEL ";FE$;" ";TP$(TIPO);" ";
510 IF TIPO=1 THEN PRINT "FASE MAXIMA=";FM ELSE PRINT
520 PRINT "==================================================================="
530 PRINT "CIRCUNSTANCIAS LOCALES "
540 PRINT "INGRESAR LA POSICION DEL OBSERVADOR LONGITUD Y LATITUD GEOGRAFICA "
550 INPUT "LONGITUD (+W en grados) =";LG
560 INPUT "LATITUD (+N en grados) =";FI
570 INPUT "ALTURA (metros)=";ALTURA
580 REM COORDENADAS GEOCENTRICAS
590 FU=ATN(.99664719#*TAN(FI*PI/180))
600 RSIN=.99664719#*SIN(FU)+ALTURA*SIN(FI*PI/180)/6378140!
610 RCOS=COS(FU)+ALTURA*COS(FI*PI/180)/6378140!
620 J=0:T=0:I=0:S=0:REM CALCULO DEL MAXIMO DEL ECLIPSE
630 GOSUB 1240 'SUBPROGRAMA DE CALCULO ITERATIVO
640 TM=T:TD=T0+T:TU=TD-DT/3600
650 PRINT
660 PRINT "VALORES EN EL MAXIMO DEL ECLIPSE"
665 AN=TD:GOSUB 3450
670 PRINT "INSTANTE (TD)=";TD;"=";GR;" h";MI;" m";INT(SG);" s"
675 AN=TU:GOSUB 3450
680 PRINT "INSTANTE (TU)=";TU;"=";GR;" h";MI;" m";INT(SG);" s"
690 M=SQR(U*U+V*V)
700 G=(L1P-M)/(L1P+L2P)
710 IF G<0 THEN PRINT "NO HAY ECLIPSE EN ESTE LUGAR":GOTO 1230
720 PRINT "FASE MAXIMA LOCAL DEL ECLIPSE=";G
730 IF ABS(L2P)>M AND L2P<0 THEN PRINT "ECLIPSE TOTAL EN ESTE LUGAR"
740 IF ABS(L2P)>M AND L2P>0 THEN PRINT "ECLIPSE ANULAR EN ESTE LUGAR"
750 IF ABS(L2P)<M THEN PRINT "ECLIPSE PARCIAL EN ESTE LUGAR"
760 RATIO=(L1P-L2P)/(L1P+L2P)
770 PRINT "RELACION DIM LUNAR/DIM. SOLAR=";RATIO
780 PM=180/PI*ATN(U/V)
790 IF V<0 THEN PM=PM+180
800 IF PM<0 THEN PM=PM+360
810 IF PM>360 THEN PM=PM-360
820 PRINT "EL ANGULO DE POSICION DE LA LUNA SE MIDE DESDE EL NORTE Y HACIA EL ESTE"
830 PRINT "ANGULO POSICION DEL CENTRO LUNA =";PM
840 ALT=FN AS(SIN(D)*SIN(FI*PI/180)+COS(D)*COS(FI*PI/180)*COS(H))
850 PRINT "ALTURA DEL SOL=";ALT*180/PI
860 PRINT :PRINT
870 PRINT "PULSE UNA TECLA PARA SEGUIR"
880 Z$=INKEY$:IF Z$="" THEN 880
890 CLS:PRINT "ECLIPSE SOLAR DEL ";FE$;" ";TP$(TIPO);" ";
900 IF TIPO=1 THEN PRINT "FASE MAXIMA=";FM ELSE PRINT
910 PRINT "==================================================================="
920 PRINT "CIRCUNSTANCIAS LOCALES":PRINT
930 PRINT "COMIENZO Y FIN DEL ECLIPSE PARCIAL (CONTACTOS EXTERNOS)"
940 S=(A*V-U*B)/N/L1P
950 TAU=L1P/N*SQR(1-S*S)
960 PC=TM-TAU:UC=TM+TAU
970 T=PC:J=0:I=-1 'REM CORRECCION AL Primer Contacto
980 GOSUB 1240
990 PRINT :PRINT "VALORES DEL PRIMER CONTACTO"
1000 TD=T0+T:TU=TD-DT/3600
1005 AN=TD:GOSUB 3450
1010 PRINT "INSTANTE (TD)=";TD;"=";GR;" h";MI;" m";INT(SG);" s"
1015 AN=TU:GOSUB 3450
1020 PRINT "INSTANTE (TU)=";TU;"=";GR;" h";MI;" m";INT(SG);" s"
1030 ALT=FN AS(SIN(D)*SIN(FI*PI/180)+COS(D)*COS(FI*PI/180)*COS(H))
1040 PRINT "ALTURA DEL SOL=";ALT*180/PI
1050 PM=180/PI*ATN(U/V)
1060 IF V<0 THEN PM=PM+180
1070 IF PM<0 THEN PM=PM+360
1080 IF PM>360 THEN PM=PM-360
1090 PRINT "ANGULO POSICION DEL CENTRO LUNA =";PM
1100 T=UC:J=0:I=1 'rem CORRECCION AL Ultimo Contacto
1110 IF PM>360 THEN PM=PM-360
1120 GOSUB 1240
1130 PRINT :PRINT "VALORES DEL ULTIMO CONTACTO"
1140 TD=T0+T:TU=TD-DT/3600
1145 AN=TD:GOSUB 3450
1150 PRINT "INSTANTE (TD)=";TD;"=";GR;" h";MI;" m";INT(SG);" s"
1155 AN=TU:GOSUB 3450
1160 PRINT "INSTANTE (TU)=";TU;"=";GR;" h";MI;" m";INT(SG);" s"
1170 ALT=FN AS(SIN(D)*SIN(FI*PI/180)+COS(D)*COS(FI*PI/180)*COS(H))
1180 PRINT "ALTURA DEL SOL=";ALT*180/PI
1190 PM=180/PI*ATN(U/V)
1200 IF V<0 THEN PM=PM+180
1210 IF PM<0 THEN PM=PM+360
1220 PRINT "ANGULO POSICION DEL CENTRO LUNA =";PM
1230 END
1240 REM COMIENZO DE LA ITERACION
1250 J=J+1:T2=T*T:T3=T2*T
1260 X=X0+X1*T+X2*T2+X3*T3
1270 Y=Y0+Y1*T+Y2*T2+Y3*T3
1280 D=D0+D1*T+D2*T2
1290 M=M0+M1*T
1300 REM VARIACIONES DIARIAS
1310 VX=X1+2*X2*T+3*X3*T2
1320 VY=Y1+2*Y2*T+3*Y3*T2
1330 H=M-LG-4.17807E-03*DT
1340 REM CALCULOS DE P,Q,R
1350 D=D*PI/180:H=H*PI/180
1360 P=RCOS*SIN(H)
1370 Q=RSIN*COS(D)-RCOS*COS(H)*SIN(D)
1380 R=RSIN*SIN(D)+RCOS*COS(H)*COS(D)
1390 VP=1.745329E-02*M1*RCOS*COS(H)
1400 VQ=1.745329E-02*(M1*P*SIN(D)-R*D1)
1410 U=X-P:V=Y-Q
1420 A=VX-VP:B=VY-VQ
1430 N=SQR(A*A+B*B)
1440 L1=L10+L11*T+L12*T2
1450 L2=L20+L21*T+L22*T2
1460 L1P=L1-R*F1
1470 L2P=L2-R*F2
1480 TAU=-(U*A+V*B)/(N*N)+I*L1P*SQR(1-S*S)/N
1490 T=T+TAU
1500 IF J>20 THEN 1530
1510 IF ABS(TAU)>.000001 THEN 1240
1520 RETURN
1530 PRINT :PRINT "NO EXISTE CONVERGENCIA EN EL TIEMPO"
1540 RETURN
3450 REM conversion a sistema sexagesimal
3460 A1=ABS(AN)
3470 GR=SGN(AN)*INT (A1)
3480 MI=INT((A1-INT(A1))*60)
3490 SG=((A1-INT(A1))*60-MI)*60
3500 RETURN
This HTML document was created by GT_HTML 6.0d 20/07/98 18:16.