Home Page

Enrico Barsanti

PROGRAMMA PIANETI


PER IL CALCOLO DELLE ORBITE E DELLE POSIZIONI PLANETARIE


PROGRAMMA IN GW-BASIC

Il seguente programma, con tutti i dati necessari per il calcolo, applica il metodo e i punti descritti in Pianeti.

0 REM - PIANETI - REL.6 - gennaio 1988 - di ENRICO BARSANTI

1 REM - REVISIONE LUGLIO 1991

2 REM - REL.1 DEL 1981, PER TI59

3 REM - REL.2 DEL 1981, PER SINCLAIR ZX80

4 REM - REL.3 DEL 1984, PER COMMODOR 16

5 REM - REL.5 DEL 1986, PER APPLE II

6 REM - REL.6 DEL 1988, PER IBM PC

8 DIM X(28), M$(11):

10 GOTO 10000: REM - PROGRAMMA PRINCIPALE

100 REM ­­­­­­­­­­­­­­­­­­­­­­

110 REM - SUBROUTINES

120 REM ­­­­­­­­­­­­­­­­­­­­­­

130 REM ======================

140 REM - PAUSA

150 REM ======================

160 LOCATE 16, 1: PRINT "Un tasto per continuare...";

170 INK$ = INPUT$(1): RETURN

200 REM ======================

210 REM - TRASF. DA GG.MMSS A GG.DDDD

220 REM ======================

230 H0 = ABS(H): H1 = (H0 - INT(H0)) * 100: H2 = INT(H1 + .001)

240 H3 = INT(H0) + H2 / 60 + (H1 - H2) / 36

250 IF H < 0 THEN H3 = -H3

260 H = H3: RETURN

300 REM ======================

310 REM - TRASF. DA GG.DDDD A GG.MMSS

320 REM ======================

330 H0 = ABS(H): H1 = (H0 - INT(H0)) * 60: H2 = INT(H1 + .001)

335 H3 = INT(H0) + H2 / 100 + (H1 - H2) * .006

340 IF H < 0 THEN H3 = -H3

350 H = H3: RETURN

400 REM ======================

410 REM - RIDUZIONE AMBITO DA 0 A 2*PI

420 REM ======================

430 S1 = S1 / P2: S1 = (S1 - INT(S1)) * P2

440 IF S1 >= 0 THEN RETURN

450 S1 = S1 + P2: RETURN

500 REM ======================

510 REM - PRESENTA ORE FORMATO HH:MM:SS

520 REM ======================

525 K$ = "": IF VAL(J$) < 0 THEN K$ = "-"

530 J$ = RIGHT$(J$, LEN(J$) - 1)

535 FOR I = 1 TO LEN(J$)

540 IF MID$(J$, I, 1) = "." THEN J$ = RIGHT$("00" + LEFT$(J$, I - 1), 2) + ":" +

RIGHT$("00" + MID$(J$, I + 1, 2), 2) + ":" + RIGHT$("00" + MID$(J$, I + 3, 2), 2)

545 NEXT

570 IF LEN(J$) < 3 THEN J$ = RIGHT$("00" + J$, 2) + ":" + "00" + ":" + "00"

575 J$ = K$ + J$

580 RETURN

600 REM ======================

610 REM - ARROTONDAMENTO

620 REM ======================

630 H1 = ABS(H): H2 = (H1 - INT(H1)) * P

640 H3 = INT(H2): IF H2 - H3 >= .5 THEN H3 = H3 + 1

650 J$ = RIGHT$("0000" + MID$(STR$(H3), 2), LEN(STR$(P)) - 2)

660 K$ = "": IF H < 0 THEN K$ = "-"

670 J$ = K$ + MID$(STR$(INT(H1)), 2) + "." + J$: RETURN

700 REM ======================

710 REM - INTESTAZIONE

720 REM ======================

730 CLS : PRINT TAB(32); : COLOR 0, 7: PRINT " P I A N E T I ": COLOR 7, 0

735 PRINT : PRINT TAB(21); "PROGRAMMA PER IL CALCOLO DELLE

ORBITE"

737 PRINT TAB(25); "E DELLE POSIZIONI PLANETARIE": PRINT

738 PRINT TAB(26); "(c) ENRICO BARSANTI - 1981"

740 RETURN

750 REM ======================

752 REM - SCELTE

754 REM ======================

756 PRINT : PRINT "SCELTE:"

758 PRINT : PRINT "1 - Dati su monitor"

760 PRINT "2 - Dati su stampante"

765 PRINT "3 - Fine": PRINT "? "; : LOCATE , , 1

770 A$ = INKEY$: IF A$ < "1" OR A$ > "3" THEN 770

775 IF A$ = "3" THEN SYSTEM

777 IF A$ = "2" THEN STAMP$ = "SI"

778 IF STAMP$ <> "SI" THEN RETURN

781 GOSUB 800: REM - INIT STAMPANTE

782 PRINT : PRINT "Grafico di pianeti n.? <1-9> "; : LOCATE , , 1

785 A$ = INKEY$: IF A$ < "1" OR A$ > "9" THEN 785

790 N = VAL(A$)

795 RETURN

800 REM ======================

810 REM - STAMPANTE

820 REM ======================

830 REM - INIT PER TESTO

840 REM - WIDTH "LPT1:", 80

850 REM - OPEN "LPT1:" AS #1

860 REM - PRINT #1, CHR$ (17);: REM - SELECT

870 REM - PRINT #1, CHR$ (27) "@": REM - CLEAR

880 RETURN

900 REM - INIT PER GRAFICA

910 REM - PRINT CHR$(27); "3"; CHR$(28)

920 REM - PRINT CHR$(9); "G2"

930 RETURN

940 REM - DISINIT STAMPANTE

950 REM - PRINT #1, CHR$ (27) "@": REM - CLEAR

965 REM - CLOSE #1

970 RETURN

1000 REM ­­­­­­­­­­­­­­­­­­­­­­

1010 REM - STAMPA SU MONITOR

1020 REM ­­­­­­­­­­­­­­­­­­­­­­

1030 REM ======================

1040 REM - SCRIVE ORA E GIORNO

1050 REM ======================

1060 IF STAMP$ = "SI" THEN 2000

1070 CLS : COLOR 0, 7: PRINT " Ore "; H$; " T.U. di "; G$(D); G; M$(M - 1); A; " ":

COLOR 7, 0: PRINT

1080 RETURN

1090 REM ======================

1100 REM - SCRIVE DATI TERRA/SOLE

1110 REM ======================

1120 IF STAMP$ = "SI" THEN 2110

1130 PRINT "TEMPO SIDERALE ="; RIGHT$(SP$ + TS$, 9); " EQUAZ.TEMPO

="; RIGHT$(SP$ + ET$, 9); " TEMPO VERO ="; RIGHT$(SP$ + TV$, 9)

1140 PRINT "INCL. EQUATORE ="; RIGHT$(SP$ + IO$, 9); " A.R. SOLE =";

RIGHT$(SP$ + AR$, 9); " DECL. SOLE ="; RIGHT$(SP$ + DE$, 9)

1150 PRINT "LONG.ORB.TERRA ="; RIGHT$(SP$ + LO$, 9); " DIST. SOLE =";

RIGHT$(SP$ + RV$, 9): PRINT

1152 REM ======================

1155 REM - SCRIVE INTESTAZIONE DATI PIANETI

1157 REM ======================

1160 W$ = "¦": REM - LINEA VERTICALE

1170 COLOR 0, 7: PRINT " PIANETA"; W$; " A.R. "; W$; " DECL. "; W$;

"DS.TE"; W$; "DS.SO"; W$; "IN.OR"; W$; "LNG.EL"; W$; "LAT.EL"; W$; "LNG.GE"; W$;

"LAT.GE"; W$; "LNG.OR"; : COLOR 7, 0

1180 RETURN

1190 REM ======================

1200 REM - SCRIVE DATI PIANETI

1210 REM ======================

1220 IF STAMP$ = "SI" THEN 2200

1230 W$ = "¦": REM - LINEA VERTICALE

1240 PRINT LEFT$(A$ + SP$, 8); W$; AR$; W$; RIGHT$(SP$ + DE$, 9); W$;

RIGHT$(SP$ + DT$, 5); W$;

1250 PRINT RIGHT$(SP$ + RV$, 5); W$; RIGHT$(SP$ + IO$, 5); W$;

1260 PRINT RIGHT$(SP$ + LE$, 6); W$; RIGHT$(SP$ + TE$, 6); W$;

RIGHT$(SP$ + LG$, 6); W$;

1270 PRINT RIGHT$(SP$ + TG$, 6); W$; RIGHT$(SP$ + LO$, 6);

1280 RETURN

1290 REM ======================

1300 REM - SCRIVE LINEA ORIZZONTALE

1310 REM ======================

1320 W$ = "-": FOR I = 1 TO 80: PRINT W$; : NEXT

1330 RETURN

2000 REM ­­­­­­­­­­­­­­­­­­­­­­

2010 REM - STAMPA SU CARTA

2020 REM ­­­­­­­­­­­­­­­­­­­­­­

2030 REM ======================

2040 REM - SCRIVE ORA E GIORNO

2050 REM ======================

2060 LPRINT " Ore "; H$; " T.U. di "; G$(D); G; M$(M - 1); A: LPRINT

2070 RETURN

2080 REM ======================

2090 REM - SCRIVE DATI TERRA/SOLE

2100 REM ======================

2110 LPRINT "TEMPO SIDERALE ="; RIGHT$(SP$ + TS$, 9); " EQUAZ.TEMPO

="; RIGHT$(SP$ + ET$, 9); " TEMPO VERO ="; RIGHT$(SP$ + TV$, 9)

2120 LPRINT "INCL. EQUATORE ="; RIGHT$(SP$ + IO$, 9); " A.R. SOLE =";

RIGHT$(SP$ + AR$, 9); " DECL. SOLE ="; RIGHT$(SP$ + DE$, 9)

2130 LPRINT "LONG.ORB.TERRA ="; RIGHT$(SP$ + LO$, 9); " DIST. SOLE

="; RIGHT$(SP$ + RV$, 9): LPRINT

2135 REM ======================

2137 REM - SCRIVE INTESTAZIONE DATI PIANETI

2139 REM ======================

2140 W$ = "¦": REM - LINEA VERTICALE

2150 LPRINT " PIANETA"; W$; " A.R. "; W$; " DECL. "; W$; "DS.TE"; W$;

"DS.SO"; W$; "IN.OR"; W$; "LNG.EL"; W$; "LAT.EL"; W$; "LNG.GE"; W$; "LAT.GE"; W$;

"LNG.OR";

2155 LPRINT "--------+--------+---------+-----+-----+-----+------+------+------+------+------";

2160 RETURN

2170 REM ======================

2180 REM - SCRIVE DATI PIANETI

2190 REM ======================

2200 W$ = "¦": REM - LINEA VERTICALE

2210 LPRINT LEFT$(A$ + SP$, 8); W$; AR$; W$; RIGHT$(SP$ + DE$, 9); W$;

RIGHT$(SP$ + DT$, 5); W$;

2220 LPRINT RIGHT$(SP$ + RV$, 5); W$; RIGHT$(SP$ + IO$, 5); W$;

2230 LPRINT RIGHT$(SP$ + LE$, 6); W$; RIGHT$(SP$ + TE$, 6); W$;

RIGHT$(SP$ + LG$, 6); W$;

2240 LPRINT RIGHT$(SP$ + TG$, 6); W$; RIGHT$(SP$ + LO$, 6);

2250 RETURN

4000 REM ­­­­­­­­­­­­­­­­­­­­­­

4010 REM - SUB DEI CALCOLI

4020 REM ­­­­­­­­­­­­­­­­­­­­­­

4025 REM ======================

4030 REM - DETERMINAZIONE NUOVI DATI ORBITALI

4040 REM ======================

4050 X(0) = (X(0) + X(1) * GG) / 360: X(0) = (X(0) - INT(X(0))) * 360: REM -

LONG.MEDIA

4060 X(2) = X(2) + X(3) * GG: REM - LONG.PERIELIO

4070 X(4) = X(4) + X(5) * GG: REM - ECCENTRICITA'

4080 X(6) = X(6) + X(7) * GG: REM - LONG.NODO ASCENDENTE

4090 X(8) = X(8) + X(9) * GG: REM - INCLINAZ.ORBITA/INCLINAZ.EQUATORE

4100 X(11) = (X(0) - X(2)) / 360: X(11) = (X(11) - INT(X(11))) * P2: REM -

ANOMALIA MEDIA

4110 REM - RISOLUZ.EQUAZ.DI KEPLERO - 4110/4150

4120 S1 = X(11)

4130 X(18) = SIN(S1) * X(4) + X(11): IF ABS((S1) - X(18)) < .000001 THEN 4150

4140 S1 = X(18): GOTO 4130

4150 X(12) = X(18): REM - ANOMALIA ECCENTRICA

4160 S1 = 2 * ATN(SQR((1 + X(4)) / (1 - X(4))) * TAN(X(12) / 2)): GOSUB 430:

X(13) = S1: REM - ANOMALIA VERA

4170 S1 = X(13) + X(2) * PI / 180: GOSUB 430: X(14) = S1: REM -

LONG.ORBITALE VERA

4180 V = X(14): REM - LONG.ORBIT.IN RADIANTI PER GRAFICA

4190 X(15) = X(10) * (1 - X(4) * COS(X(12))): REM - RAGGIO VETTORE

4260 RETURN

5000 REM ======================

5010 REM - SOLO TERRA/SOLE

5020 REM ======================

5030 ASN = SIN(E) * SIN(X(14) + PI): X(16) = ATN(ASN / SQR(-ASN * ASN + 1)):

REM - DECLINAZIONE DEL SOLE

5040 ACS = COS(X(14) + PI) / COS(X(16)): X(17) = -ATN(ACS / SQR(-ACS *

ACS + 1)) + PI / 2: REM - ASCENSIONE RETTA SOLE

5050 IF X(16) >= 0 THEN 5070

5060 X(17) = P2 - X(17)

5070 X(18) = X(0)

5080 S1 = X(17) + PI: GOSUB 430: X(19) = X(0) - S1 * 180 / PI: REM -

EQU.TEMPO

5090 H9 = H9 + X(19) / 15: IF H9 < 0 THEN H9 = H9 + 24: REM - TEMPO VERO

5100 H = H9: GOSUB 330: H9 = H

5110 X(20) = X(15) * COS(X(14)): REM - X = COORD.CART.ECL.ELIOC.TERRA

5120 X(21) = X(15) * SIN(X(14)): REM - Y = COORD.CART.ECL.ELIOC.TERRA

5130 R = X(20): S = X(21)

5140 REM - TRASF.DA RADIANTI IN GRADI - 5135/5170

5150 FOR I = 11 TO 17

5160 IF I = 15 THEN 5180

5170 X(I) = X(I) * 180 / PI

5180 NEXT

5190 REM - TRASF.DA GRADI IN HH.MMSS - 5175/5190

5200 FOR I = 17 TO 19: H = X(I) / 15: GOSUB 330

5210 X(I) = H: NEXT: H = X(16): GOSUB 330: X(16) = H

5220 REM ======================

5230 REM - DATI PER LA STAMPA

5240 REM ======================

5242 P = 10000: H = X(8): GOSUB 600: IO$ = J$: REM - INCL.ORBITA

5244 H = X(14): GOSUB 600: LO$ = J$: REM - LONG.ORBITALE

5246 H = X(15): GOSUB 600: RV$ = J$: REM - RAGGIO VETTORE

5250 P = 10000

5260 H = X(8): GOSUB 330: GOSUB 600: GOSUB 530: IO$ = J$: REM -

INCL.EQUAT.

5270 H = X(17): GOSUB 600: GOSUB 530: AR$ = J$: REM - ASCENSIONE

RETTA

5280 H = X(16): GOSUB 600: GOSUB 530: DE$ = J$: REM - DECLINAZIONE

5290 H = X(18): GOSUB 600: GOSUB 530: TS$ = J$: REM - TEMPO SIDERALE

5300 H = X(19): GOSUB 600: GOSUB 530: ET$ = J$: REM - EQUAZIONE

TEMPO

5310 H = H9: GOSUB 600: GOSUB 530: TV$ = J$: REM - TEMPO VERO

5320 RETURN

6000 REM ======================

6010 REM - SOLO PIANETI

6020 REM ======================

6030 O = X(14) - X(6) * PI / 180: ASN = SIN(O) * SIN(X(8) * PI / 180)

6040 X(16) = ATN(ASN / SQR(-ASN * ASN + 1)): REM -

LAT.ECLIT.ELIOC.PIANETA

6050 PR = X(15) * COS(X(16)): REM - PROIEZ.RAGGIO VETTORE SU

ECLITTICA PER GRAFICA

6060 REM - CALCOLO LONG.ECLITTICALE ELIOCENTRICA - 6055/6090

6070 ACS = COS(O) / COS(X(16))

6080 X(17) = -ATN(ACS / SQR(-ACS * ACS + 1)) + PI / 2

6090 IF X(16) < 0 THEN X(17) = P2 - X(17)

6100 X(17) = X(17) + X(6) * PI / 180: S1 = X(17): GOSUB 430: X(17) = S1: REM -

LONG.ECLIT.ELIOC.PIANETA

6110 V = X(17): REM - LONG.ECL.ELIOC.IN RADIANTI PER GRAFICA

6120 X(18) = X(15) * COS(X(16)) * COS(X(17)): REM - X =

COORD.CART.ECLIT.ELIOC.PIANETA

6130 X(19) = X(15) * COS(X(16)) * SIN(X(17)): REM - Y =

COORD.CART.ECLIT.ELIOC.PIANETA

6140 X(20) = X(15) * SIN(X(16)): REM - Z =

COORD.CART.ECLIT.ELIOC.PIANETA

6150 X(21) = X(18) - R: REM - X = COORD.CART.ECLIT.GEOC.PIANETA

6160 X(22) = X(19) - S: REM - Y = COORD.CART.ECLIT.GEOC.PIANETA

6170 X(23) = X(20): REM - Z = COORD.CART.ECLIT.GOEC.PIANETA

6180 X(24) = SQR((ABS(X(21))) ^ 2 + (ABS(X(22))) ^ 2 + (ABS(X(23))) ^ 2): REM -

DISTANZA TERRA-PIANETA

6190 ASN = X(23) / X(24): X(26) = ATN(ASN / SQR(-ASN * ASN + 1)): REM -

LAT.ECLIT.GOEC.PIANETA

6200 X(25) = ABS(ATN(X(22) / X(21))): REM - LONG.ECLIT.GEOC.PIANETA

6210 REM - AGGIUSTAMENTO PER X(25) - 6185/6210

6220 IF X(21) < 0 AND X(22) > 0 THEN X(25) = PI - X(25)

6230 IF X(21) < 0 AND X(22) < 0 THEN X(25) = PI + X(25)

6240 IF X(21) > 0 AND X(22) < 0 THEN X(25) = P2 - X(25)

6250 REM - CALCOLO DICLINAZIONE - 6225/6240

6260 ASN = COS(E) * SIN(X(26)) + SIN(E) * COS(X(26)) * SIN(X(25))

6270 X(27) = ATN(ASN / SQR(-ASN * ASN + 1)): REM - DECL.PIANETA

6280 REM - CALCOLO ASCENSIONE RETTA - 6245/6270

6290 ACS = COS(X(26)) * COS(X(25)) / COS(X(27))

6300 X(28) = -ATN(ACS / SQR(-ACS * ACS + 1)) + PI / 2: REM - A.R.PIANETA

6310 IF SIN(X(25)) < TAN(E) * TAN(X(26)) THEN X(28) = P2 - X(28)

6320 REM - TRASF.RADIANTI IN GRADI - 6275/6310

6330 FOR I = 11 TO 17

6340 IF I = 15 THEN 6360

6350 X(I) = X(I) * 180 / PI

6360 NEXT: FOR I = 25 TO 28: X(I) = X(I) * 180 / PI: NEXT

6370 REM - TRASF.GG.DDDD IN GG.MMSS/HH.MMSS

6380 H = X(28) / 15: GOSUB 330: X(28) = H

6390 H = X(27): GOSUB 330: X(27) = H

6400 REM ======================

6410 REM - DATI PER LA STAMPA

6420 REM ======================

6422 P = 100: H = X(8): GOSUB 600: IO$ = J$: REM - INCL.ORBITA

6424 H = X(14): GOSUB 600: LO$ = J$: REM - LONG.ORBITALE

6426 H = X(15): GOSUB 600: RV$ = J$: REM - RAGGIO VETTORE

6430 P = 10000: H = X(28): GOSUB 600: GOSUB 530: AR$ = J$: REM - A.R.

6440 H = X(27): GOSUB 600: GOSUB 530: DE$ = J$: REM - DECLINAZ.

6450 P = 100: H = X(16): GOSUB 600: TE$ = J$: REM - LAT.ECL.ELIOC.

6460 H = X(17): GOSUB 600: LE$ = J$: REM - LONG.ECL.ELIOC.

6470 H = X(24): GOSUB 600: DT$ = J$: REM - DIST.TERRA

6480 H = X(26): GOSUB 600: TG$ = J$: REM - LAT.ECL.GEOC.

6490 H = X(25): GOSUB 600: LG$ = J$: REM - LONG.ECL.GEOC.

6500 RETURN

7000 REM ­­­­­­­­­­­­­­­­­­­­­­

7010 REM = PARTE GRAFICA

7020 REM ­­­­­­­­­­­­­­­­­­­­­­

7025 REM ======================

7030 REM = CERCHIO DI RIFERIMENTO

7040 REM ======================

7045 COL = 14: RIG = 13: IF SCRN = 12 THEN RIG = 16

7050 SCREEN SCRN

7055 IF SCRN = 2 THEN COL = 7: GOTO 7072

7071 COLOR 9, 1

7072 LOCATE 24, 72: PRINT "PREMERE";

7074 LOCATE 25, 72: PRINT "UN TASTO";

7075 LOCATE RIG, 6: PRINT "180 ";

7076 LOCATE RIG, 72: PRINT "0 ";

7080 FOR I = -1 TO 1

7090 PSET (CX + I, CY), COL

7095 PSET (CX, CY + I), COL

7100 NEXT

7105 PSET (CX + CY / FA + 2, CY), 11

7110 FOR I = 0 TO P2 STEP P2 / 36

7120 PSET (CX + COS(I) * CY / FA, CY - SIN(I) * CY), 11

7130 NEXT

7700 REM ======================

7710 REM = CALCOLO E STAMPA DELLA POSIZIONE DEI PIANETI

7720 REM ======================

7730 FOR I = 1 TO N

7740 F = COS(V(I)) * R(I): G = -SIN(V(I)) * R(I) * FA

7750 PSET (F + CX, G + CY)

7760 NEXT

7770 RETURN

8000 REM ­­­­­­­­­­­­­­­­­­­­­­

8010 REM - CALENDARIO PERPETUO

8020 REM ­­­­­­­­­­­­­­­­­­­­­­

8030 REM ======================

8035 REM - IMMISSIONE GIORNO, MESE E ANNO

8037 REM ======================

8039 GOSUB 700

8040 LOCATE 8, 1: PRINT "Scrivere la data per i calcoli."

8050 LOCATE 10, 22: PRINT " "

8055 LOCATE 10, 1: INPUT "Giorno (da 1 a 31): "; G: IF (G < 1 OR G > 31) OR G

<> INT(G) THEN 8050

8060 LOCATE 11, 20: PRINT " "

8065 LOCATE 11, 1: INPUT "Mese (da 1 a 12): "; M: IF (M < 1 OR M > 12) OR M

<> INT(M) THEN 8060

8070 IF G = 31 AND (M = 4 OR M = 6 OR M = 9 OR M = 11) THEN GOSUB 700:

GOTO 8040

8080 IF G > 29 AND M = 2 THEN GOSUB 700: GOTO 8040

8090 LOCATE 12, 1: INPUT "Anno (negativo se a.C.): "; A: IF A <> INT(A) THEN

LOCATE 12, 27: PRINT " ": GOTO 8090

8100 IF A = 0 THEN PRINT : PRINT "L'anno 0 non esiste": GOSUB 100: GOSUB

700: GOTO 8040

8110 IF A < 0 THEN A = A + 1

8120 IF NOT (G = 29 AND M = 2) THEN 8200

8130 IF INT(A / 4) * 4 = A GOTO 8160

8140 IF A <= 0 THEN A = A - 1

8145 PRINT

8150 PRINT "L'anno"; A; "non è bisestile.": GOSUB 100: GOSUB 700: GOTO 8040

8160 IF A <= 1582 THEN 8200

8170 IF INT(A / 100) * 100 <> A GOTO 8200

8180 IF INT(A / 400) * 400 = A GOTO 8200

8190 PRINT : PRINT "Nel calendario gregoriano": GOTO 8150

8200 IF A > 1582 OR (A = 1582 AND M > 10) OR (A = 1582 AND M = 10 AND G >

14) THEN 8270

8210 IF A < 1582 OR (A = 1582 AND M < 10) OR (A = 1582 AND M = 10 AND G <

5) THEN 8250

8220 LOCATE 8, 1: PRINT " "

8225 LOCATE 10, 1: PRINT "Il giorno"; G; "ottobre 1582 non esiste,"

8230 PRINT "perché soppresso dalla riforma"

8240 PRINT "gregoriana del calendario. ": GOSUB 100: GOSUB 700: GOTO

8040

8246 REM - ======================

8248 REM - CALCOLO DEI GIORNI GIULIANI

8249 REM - ======================

8250 IF M < 3 THEN C = INT((A + 4711) / 4) + (A + 4712) * 365 + 31 * (M - 1) + G:

GOTO 8310

8260 C = INT((A + 4712) / 4) + (A + 4712) * 365 - INT((M - 1) * .4 + 2.7) + 31 * (M -

1) + G: GOTO 8310

8270 IF M < 3 THEN 8300

8280 C = 365 * A + 31 * (M - 1) + G + INT(A / 4) - INT((M - 1) * .4 + 2.7)

8290 C = C - INT(A / 100) + INT(A / 400) + 1721060!: GOTO 8310

8300 C = 365 * A + 31 * (M - 1) + G + INT((A - 1) / 4) - INT((A - 1) / 100) + INT((A -

1) / 400) + 1721060!

8310 GG = C - 2415021.5#: D = C - INT(C / 7) * 7

8320 IF A <= 0 THEN A = A - 1

8330 LOCATE 14, 1: PRINT "**** "; G$(D); G; M$(M - 1); A; "****"

8390 REM - ======================

8400 REM - IMMISSIONE HH.MMSS

8405 REM - ======================

8410 LOCATE 16, 17: PRINT " ";

8415 LOCATE 16, 1: INPUT "Ora (HH.MMSS): "; H

8420 IF H < 0 OR H > 23.5959 THEN 8410

8425 J$ = STR$(H): JJ$ = ""

8430 FOR I = 1 TO LEN(J$)

8432 IF MID$(J$, I, 1) = "." THEN J$ = J$ + "00000": JJ$ = MID$(J$, I + 1, 4)

8435 NEXT

8440 IF VAL(JJ$) > 5959 THEN 8410

8445 IF VAL(RIGHT$(JJ$, 2)) > 59 THEN 8410

8450 GOSUB 500: H$ = J$

8460 GOSUB 200: H9 = H: GG = GG + H / 24: E = (C(8) + C(9) * GG) * PI / 180

8470 RETURN

9000 REM ­­­­­­­­­­­­­­­­­­­­­­

9010 REM - SUB INIZIALIZZAZIONE

9020 REM ­­­­­­­­­­­­­­­­­­­­­­

9021 REM ======================

9022 REM - INIT SISTEMA PER GRAFICA

9023 REM ======================

9024 PRINT : PRINT "SCEGLIERE TRA:"

9025 PRINT : PRINT " 1 - SCHEDA VIDEO VGA 640x480"

9026 PRINT : PRINT " 2 - SCHEDA VIDEO EGA 640x350"

9027 PRINT : PRINT " 3 - SCHEDA VIDEO CGA 640x200"

9028 PRINT : PRINT " 4 - SCHEDA VIDEO CGA 640x400"

9029 PRINT : PRINT " 5 - SCHEDA VIDEO HGC 720x348"

9030 A$ = INKEY$: A = VAL(A$): IF A < 1 OR A > 5 THEN 9030

9031 IF A = 1 THEN PX = 640: PY = 480: SCRN = 12

9032 IF A = 2 THEN PX = 640: PY = 350: SCRN = 9

9033 IF A = 3 THEN PX = 640: PY = 200: SCRN = 2

9035 IF A = 4 THEN PX = 640: PY = 400: SCRN = 3

9036 IF A = 5 THEN PX = 720: PY = 348: SCRN = 2

9037 X = PX: REM - Pixel di ascissa

9040 Y = PY: REM - Pixel di ordinata

9041 REM - FATTORE DI SCALA PER CERCHIO ======================

9042 CX = INT(X / 2) - 1: CY = INT(Y / 2) - 1

9043 PI = 3.14159265359#: P2 = PI * 2

9044 FA = 4 / 3 * Y / X: REM - Rapporto tra X e Y

9045 TT = CY * 3 / 4 * X / Y: TT = TT - TT * .1: REM - Fattore di scala

9047 REM ======================

9048 REM - INIT VARIABILI

9049 REM ======================

9050 SP$ = " "

9060 G$(0) = "Lunedì": G$(1) = "Martedì": G$(2) = "Mercoledì"

9070 G$(3) = "Giovedì": G$(4) = "Venerdì": G$(5) = "Sabato": G$(6) = "Domenica"

9080 M$(0) = "gennaio": M$(1) = "febbraio": M$(2) = "marzo": M$(3) = "aprile":

M$(4) = "maggio": M$(5) = "giugno"

9090 M$(6) = "luglio": M$(7) = "agosto": M$(8) = "settembre": M$(9) = "ottobre":

M$(10) = "novembre": M$(11) = "dicembre"

9100 REM ======================

9110 REM - DATI DEI PIANETI ALLE ORE 12 DEL 1900,0

9120 REM ======================

9130 REM - 0 = Longitudine Media - 1 = Variaz.giornaliera di 0

9140 REM - 2 = Longitudine Perielio - 3 = Variaz.giornaliera di 2

9150 REM - 4 = Eccentricità - 5 = Variaz.giornaliera di 4

9160 REM - 6 = Longitud.Nodo Ascendente - 7 = Variaz.giornaliera di 6

9170 REM - 8 = Inclinaz.Orbita/Equatore - 9 = Variaz.giornaliera di 8

9180 REM - 10 = Semiasse Maggiore Orbita

9200 REM ====================== MERCURIO

9210 A(0) = 182.2714806#: A(1) = 4.09237703#: A(2) = 75.89717222#: A(3) =

.00004253167541#

9220 A(4) = .20561494#: A(5) = 5.557837098D-10: A(6) = 47.14473611#

9230 A(7) = .00003243695338#: A(8) = 7.003013889#: A(9) = 4.759297285D-08:

A(10) = .3870984

9240 REM ====================== VENERE

9250 B(0) = 344.3697361#: B(1) = 1.602168729#: B(2) = 130.1405694#: B(3) =

.0000375714503#

9260 B(4) = .00681636#: B(5) = -1.474058864D-09: B(6) = 75.78809167#: B(7) =

.00002502471671#

9270 B(8) = 3.393636111#: B(9) = 3.428397597D-08: B(10) = .72333015#

9280 REM ====================== TERRA

9290 C(0) = 100.6825139#: C(1) = .9856473416#: C(2) = 101.2187: C(3) =

.00004693718153#

9300 C(4) = .0167498: C(5) = -1.165776865D-09: C(6) = 1: C(8) = 23.45229427#:

C(9) = -.00000035626284#: C(10) = 1

9310 REM ====================== MARTE

9320 D(0) = 294.2647833#: D(1) = .5240710815#: D(2) = 334.2183306#: D(3) =

.00005038725378#

9330 D(4) = .0933088: D(5) = 2.608733744D-09: D(6) = 48.7867: D(7) =

.00002127157959#

9340 D(8) = 1.850302778#: D(9) = -1.776941212D-08: D(10) = 1.5236781#

9350 REM ====================== GIOVE

9360 E(0) = 238.1323861#: E(1) = 8.312941779999999D-02: E(2) =

12.72097222#: E(3) = .00004407834816#

9370 E(4) = .04833475#: E(5) = 4.495003422D-09: E(6) = 99.44341389#: E(7) =

.00002766680356#

9380 E(8) = 1.308736111#: E(9) = -.0000001559510229#: E(10) = 5.202561

9390 REM ====================== SATURNO

9400 F(0) = 266.597875#: F(1) = .03349787498#: F(2) = 91.09821389#: F(3) =

.00005361850331#

9410 F(4) = .05589231#: F(5) = -9.459274469999999D-09: F(6) = 112.7904139#:

F(7) = .00002390677998#

9420 F(8) = 2.492519444#: F(9) = -.0000001072933303#: F(10) = 9.554747

9430 REM ====================== URANO

9440 G(0) = 244.2092389#: G(1) = .0117690225#: G(2) = 171.5486917#: G(3) =

.00004064155449#

9450 G(4) = .0463444: G(5) = -7.277207392D-10: G(6) = 73.47711111#: G(7) =

.00001365277968#

9460 G(8) = .7724638889#: G(9) = 1.711917256D-08: G(10) = 19.21814

9470 REM ====================== NETTUNO

9480 H(0) = 84.46401389#: H(1) = .006020148232#: H(2) = 46.72736389#: H(3) =

.00003900272264#

9490 H(4) = .00899704#: H(5) = 1.733059548D-10: H(6) = 130.6813889#: H(7) =

.00003008720055#

9500 H(8) = 1.779241667#: H(9) = -.0000002612898319#: H(10) = 30.10957

9510 REM ====================== PLUTONE

9520 I(0) = 93.2334772#: I(1) = .00397943#: I(2) = 224.01: I(4) = .250236

9530 I(6) = 109.74: I(8) = 17.17047: I(10) = 39.438712#

9540 RETURN

10000 REM ­­­­­­­­­­­­­­­­­­­­­­

10010 REM - PRGM PRINCIPALE

10020 REM ­­­­­­­­­­­­­­­­­­­­­­

10025 GOSUB 700: REM - INTESTAZIONE

10030 GOSUB 9000: REM - INIZIALIZZAZIONE

10035 GOSUB 700: REM - INTESTAZIONE

10040 GOSUB 750: REM - SCELTE

10050 GOSUB 8000: REM - CALENDARIO

10070 GOSUB 1000: REM - VISUAL. TEMPO E DATA

10080 FOR I = 0 TO 10: X(I) = C(I): NEXT: GOSUB 4000: GOSUB 5000

10090 V(3) = V: RV(3) = X(15): GOSUB 1100

10100 FOR I = 0 TO 10: X(I) = A(I): NEXT: GOSUB 4000: GOSUB 6000

10110 V(1) = V: RV(1) = PR: A$ = "MERCURIO": GOSUB 1200

10120 FOR I = 0 TO 10: X(I) = B(I): NEXT: GOSUB 4000: GOSUB 6000

10130 V(2) = V: RV(2) = PR: A$ = "VENERE": GOSUB 1200

10140 FOR I = 0 TO 10: X(I) = D(I): NEXT: GOSUB 4000: GOSUB 6000

10150 V(4) = V: RV(4) = PR: A$ = "MARTE": GOSUB 1200

10160 FOR I = 0 TO 10: X(I) = E(I): NEXT: GOSUB 4000: GOSUB 6000

10170 V(5) = V: RV(5) = PR: A$ = "GIOVE": GOSUB 1200

10180 FOR I = 0 TO 10: X(I) = F(I): NEXT: GOSUB 4000: GOSUB 6000

10190 V(6) = V: RV(6) = PR: A$ = "SATURNO": GOSUB 1200

10200 FOR I = 0 TO 10: X(I) = G(I): NEXT: GOSUB 4000: GOSUB 6000

10210 V(7) = V: RV(7) = PR: A$ = "URANO": GOSUB 1200

10220 FOR I = 0 TO 10: X(I) = H(I): NEXT: GOSUB 4000: GOSUB 6000

10230 V(8) = V: RV(8) = PR: A$ = "NUTTUNO": GOSUB 1200

10240 FOR I = 0 TO 10: X(I) = I(I): NEXT: GOSUB 4000: GOSUB 6000

10250 V(9) = V: RV(9) = PR: A$ = "PLUTONE": GOSUB 1200

10260 IF STAMP$ = "SI" THEN 10300

10270 PRINT : GOSUB 1300: GOSUB 1300: REM - LINEA ORIZZONTALE

10280 PRINT : PRINT "Grafico di quanti pianeti? <0=SCELTE> "; : LOCATE , , 1

10290 A$ = INKEY$: IF A$ < "0" OR A$ > "9" THEN 10290

10295 N = VAL(A$): IF N = 0 THEN 10035

10300 REM ======================

10302 REM - PROPORZIONALITA' IN GRAFICA

10305 REM ======================

10320 IF N = 1 THEN K = TT / RV(1) / 1.1

10330 IF N = 2 THEN K = TT / RV(2)

10340 IF N = 3 THEN K = TT / RV(3)

10350 IF N = 4 THEN K = TT / RV(4)

10360 IF N = 5 THEN K = TT / RV(5)

10370 IF N = 6 THEN K = TT / RV(6)

10380 IF N = 7 THEN K = TT / RV(7)

10390 IF N = 8 THEN K = TT / RV(8)

10400 IF N = 9 THEN K = TT / RV(9) / 1.1

10410 FOR I = 1 TO N

10420 R(I) = RV(I) * K: NEXT

10430 GOSUB 7000

10435 A$ = INKEY$: IF A$ = "" THEN 10435

10437 SCREEN 0: COLOR 7, 0

10438 IF STAMP$ <> "SI" THEN CLS : GOTO 10270

10450 GOSUB 940: REM - DISINIT STAMPANTE

10455 STAMP$ = ""

10460 GOTO 10035

Fine
© Copyright 1981-1997 by Enrico Barsanti



Homepage