begin;
comment JAZ164, R743, Outer Planets
;
integer K, T;
real A, K2, X;
Boolean FI;
array Y, YA, Z, ZA[1 : 15], M[0 : 5], E[1 : 60], D[1 : 33];
array OWND[1 : 5, 1 : 5], OWNR[1 : 5];
real procedure F(K);
integer K;
begin;
integer I, J, I3, J3;
real P;
if K
1 then goto A;
for I := 1 step 1 until 4 do
begin;
I3 := 3
I;
for J := I + 1 step 1 until 5 do
begin;
J3 := 3
J;
P := (Y[I3 - 2] - Y[J3 - 2])
2 + (Y[I3 - 1] - Y[J3 - 1])
2 + (Y[I3] - Y[J3])
2;
OWND[I, J] := OWND[J, I] := 1 ÷ P ÷ SQRT(P);
end ;
end ;
for I := 1 step 1 until 5 do
begin;
I3 := 3
I;
OWND[I, I] := 0;
P := Y[I3 - 2]
2 + Y[I3 - 1]
2 + Y[I3]
2;
OWNR[I] := 1 ÷ P ÷ SQRT(P);
end ;
A: I := (K - 1) ÷ 3 + 1;
F := K2
(-M[0]
Y[K]
OWNR[I] + SUM(J, 1, 5, M[J]
((Y[3
(J - I) + K] - Y[K])
OWND[I, J] - Y[3
(J - I) + K]
OWNR[J])));
end F;
procedure RK3N(X, A, B, Y, YA, Z, ZA, FXYJ, J, E, D, FI, N);
value B, FI, N;
integer J, N;
real X, A, B, FXYJ;
Boolean FI;
array Y, YA, Z, ZA, E, D;
begin;
integer JJ;
real XL, H, HMIN, INT, HL, ABSH, FHM, DISCRY, DISCRZ, TOLY, TOLZ, MU, MU1, FHY, FHZ;
Boolean LAST, FIRST, REJECT;
array YL, ZL, K0, K1, K2, K3, K4, K5[1 : N], EE[1 : 4
N];
if FI then begin;
D[3] := A;
for JJ := 1 step 1 until N do
begin;
D[JJ + 3] := YA[JJ];
D[N + JJ + 3] := ZA[JJ];
end ;
end ;
D[1] := 0;
XL := D[3];
for JJ := 1 step 1 until N do
begin;
YL[JJ] := D[JJ + 3];
ZL[JJ] := D[N + JJ + 3];
end ;
if FI then D[2] := B - D[3];
ABSH := H := ABS(D[2]);
if B - XL < 0 then H := -H;
INT := ABS(B - XL);
HMIN := INT
E[1] + E[2];
for JJ := 2 step 1 until 2
N do
begin;
HL := INT
E[2
JJ - 1] + E[2
JJ];
if HL < HMIN then HMIN := HL;
end ;
for JJ := 1 step 1 until 4
N do
EE[JJ] := E[JJ] ÷ INT;
FIRST := REJECT := true;
if FI then begin;
LAST := true;
goto STEP;
end ;
TEST: ABSH := ABS(H);
if ABSH < HMIN then begin;
H := if H > 0 then HMIN else -HMIN;
ABSH := HMIN;
end ;
* Syntax error at: ifH>B-XL=H>0thenbegin;
D[2] := H;
LAST := true;
H := B - XL;
ABSH := ABS(H);
end else LAST := false;
STEP: if REJECT then begin;
X := XL;
for JJ := 1 step 1 until N do
Y[JJ] := YL[JJ];
for J := 1 step 1 until N do
K0[J] := FXYJ
H;
end else begin;
FHY := H ÷ HL;
for JJ := 1 step 1 until N do
K0[JJ] := K5[JJ]
FHY;
end ;
X := XL + .276393202250021
H;
for JJ := 1 step 1 until N do
Y[JJ] := YL[JJ] + (ZL[JJ]
.276393202250021 + K0[JJ]
.038196601125011)
H;
for J := 1 step 1 until N do
K1[J] := FXYJ
H;
X := XL + .723606797749979
H;
for JJ := 1 step 1 until N do
Y[JJ] := YL[JJ] + (ZL[JJ]
.723606797749979 + K1[JJ]
.261803398874989)
H;
for J := 1 step 1 until N do
K2[J] := FXYJ
H;
X := XL + H
.5;
for JJ := 1 step 1 until N do
Y[JJ] := YL[JJ] + (ZL[JJ]
.5 + K0[JJ]
.046875 + K1[JJ]
.079824155839840 - K2[JJ]
.001699155839840)
H;
for J := 1 step 1 until N do
K4[J] := FXYJ
H;
X := if LAST then B else XL + H;
for JJ := 1 step 1 until N do
Y[JJ] := YL[JJ] + (ZL[JJ] + K0[JJ]
.309016994374947 + K2[JJ]
.190983005625053)
H;
for J := 1 step 1 until N do
K3[J] := FXYJ
H;
for JJ := 1 step 1 until N do
Y[JJ] := YL[JJ] + (ZL[JJ] + K0[JJ]
.083333333333333 + K1[JJ]
.301502832395825 + K2[JJ]
.115163834270842)
H;
for J := 1 step 1 until N do
K5[J] := FXYJ
H;
REJECT := false;
FHM := 0;
for JJ := 1 step 1 until N do
begin;
DISCRY := ABS((-K0[JJ]
.5 + K1[JJ]
1.809016994374947 + K2[JJ]
.690983005625053 - K4[JJ]
2)
H);
DISCRZ := ABS((K0[JJ] - K3[JJ])
2 - (K1[JJ] + K2[JJ])
10 + K4[JJ]
16 + K5[JJ]
4);
TOLY := ABSH
(ABS(ZL[JJ])
EE[2
JJ - 1] + EE[2
JJ]);
TOLZ := ABS(K0[JJ])
EE[2
(JJ + N) - 1] + ABSH
EE[2
(JJ + N)];
REJECT := DISCRY > TOLY
DISCRZ > TOLZ
REJECT;
FHY := DISCRY ÷ TOLY;
FHZ := DISCRZ ÷ TOLZ;
if FHZ > FHY then FHY := FHZ;
if FHY > FHM then FHM := FHY;
end ;
MU := 1 ÷ (1 + FHM) + .45;
if REJECT then begin;
if ABSH < HMIN then begin;
D[1] := D[1] + 1;
for JJ := 1 step 1 until N do
begin;
Y[JJ] := YL[JJ];
Z[JJ] := ZL[JJ];
end ;
FIRST := true;
goto NEXT;
end ;
H := MU
H;
goto TEST;
end REJ;
if FIRST then begin;
FIRST := false;
HL := H;
H := MU
H;
goto ACC;
end ;
FHY := MU
H ÷ HL + MU - MU1;
HL := H;
H := FHY
H;
ACC: MU1 := MU;
for JJ := 1 step 1 until N do
Z[JJ] := ZL[JJ] + (K0[JJ] + K3[JJ])
.083333333333333 + (K1[JJ] + K2[JJ])
.416666666666667;
NEXT: if B
X then begin;
XL := X;
for JJ := 1 step 1 until N do
begin;
YL[JJ] := Y[JJ];
ZL[JJ] := Z[JJ];
end ;
goto TEST;
end ;
if ¬LAST then D[2] := H;
D[3] := X;
for JJ := 1 step 1 until N do
begin;
D[JJ + 3] := Y[JJ];
D[N + JJ + 3] := Z[JJ];
end ;
end RK3N;
procedure TYP(X);
array X;
begin;
integer K;
NLCR;
PRINTTEXT("T = ");
ABSFIXT(7, 1, T + A);
NLCR;
NLCR;
for K := 1 step 1 until 5 do
begin;
if K = 1 then PRINTTEXT("J ") else if K = 2 then PRINTTEXT("S ") else if K = 3 then PRINTTEXT("U ") else if K = 4 then PRINTTEXT("N ") else PRINTTEXT("P ");
FIXT(2, 9, X[3
K - 2]);
FIXT(2, 9, X[3
K - 1]);
FIXT(2, 9, X[3
K]);
NLCR;
end ;
end TYP;
real procedure SUM(I, A, B, XI);
value B;
integer I, A, B;
real XI;
begin;
real S;
S := 0;
for I := A step 1 until B do
S := S + XI;
SUM := S;
end SUM;
A := READ;
for K := 1 step 1 until 15 do
begin;
YA[K] := READ;
ZA[K] := READ;
end ;
for K := 0 step 1 until 5 do
M[K] := READ;
K2 := READ;
E[1] := READ;
for K := 2 step 1 until 60 do
E[K] := E[1];
NLCR;
PRINTTEXT("JAZ164, R743, Outer Planets");
NLCR;
NLCR;
for K := 1 step 1 until 15 do
begin;
FLOT(12, 2, YA[K]);
FLOT(12, 2, ZA[K]);
NLCR;
end ;
for K := 0 step 1 until 5 do
begin;
NLCR;
FLOT(12, 2, M[K]);
end ;
NLCR;
NLCR;
FLOT(12, 2, K2);
NLCR;
NLCR;
PRINTTEXT("eps = ");
FLOT(2, 2, E[1]);
NLCR;
T := 0;
TYP(YA);
FI := true;
for T := 500,
1000 do
begin;
RK3N(X, 0, T, Y, YA, Z, ZA, F(K), K, E, D, FI, 15);
FI := false;
TYP(Y);
end ;
end;