Почему данная программа выводит в списке в цикле в том числе и строку, где t=110? Ведь в условии цикла сказано - while t<st, st=103, т.е. должно выполняться, пока t будет меньше 103, т.е. до 100 включительно (шаг t=10). t=110>103, почему цикл продолжает выполняться на этой строке и как этого избежать?
program s1;
uses crt;
const Gk=6.67E-11; M=6E+24; R=6371E+3;
var st, th, g, t, h, vorbit, vvert, vgor:real;
x, i:integer;
al, tl, A: array of real;
function rad(Angle:real):real;
var Ak:real;begin
Ak:=(3.14*Angle)/180;
rad:=Ak;
end;
begin
th:=10;setlength (al, 3);
setlength (tl, 3);
setlength (A,3);
al[1]:=40;
tl[1]:=103;
A[1]:=45;
al[2]:=50;
tl[2]:=40;
A[2]:=45;
t:=0;
h:=0;
vvert:=0;
vgor:=0;
g:=(Gk*M)/(R*R);
vorbit:=sqrt((Gk*M)/R);
i:=0;
st:=0;
i:=i+1;
st:=st+tl[1];
while (t<st) and (vgor<vorbit) and (h>=0) do
begin
t:=t+th;
h:=h+(vvert*th)+(0.5*al[1]*sin(rad(A[1]))*th*th)-(0.5*g*th*th); vvert:=vvert+al[1]*sin(rad(A[1]))*th-g*th;
vgor:=vgor+al[1]*cos(rad(A[1]))*th;
g:=(Gk*M)/((R+h)*(R+h));
vorbit:=sqrt((Gk*M)/(R+h));
writeln ('1 cycle t=' ,t:1:2, ' h=', h:1:2, ' g=', g:1:2, ' vvert=', vvert:1:2, ' vgor=', vgor:1:2, ' vorbit=', vorbit:1:2);
end;
end.
Answers & Comments