Попытался сделать, но не получается. Помогите
Код:
uses CRT;
label Start, Quit;
Const
t0 = 0.0;
y0 = 0.0;
z0 = 0.0;
h = 0.01;
t_max = 1.0;
Var
T,Y,Z,Y1,Z1:real;
i,N:integer;
Function f(t,y,z:real):real;
begin
f := (t + 2) * y - z - cos(t);
end;
Function g(t,y,z:real):real;
begin
g := z;
end;
Procedure RK(t,y,z:real; var Uy:real; var Uz:real);
var k1,k2,k3,k4,q1,q2,q3,q4:real;
begin
k1:=h*f(t,y,z);
q1:=h*g(t,y,z);
k2:=h*f(t+h/2,y+q1/2,z+k1/2);
q2:=h*g(t+h/2,y+q1/2,z+k1/2);
k3:=h*f(t+h/2,y+q2/2,z+k2/2);
q3:=h*g(t+h/2,y+q2/2,z+k2/2);
k4:=h*f(t+h,y+q3,z+k3);
q4:=h*g(t+h,y+q3,z+q3);
Uz:=z+(k1+2*k2+2*k3+k4)/6;
Uy:=y+(q1+2*q2+2*q3+q4)/6;
end;
Begin
N:=Round((t_max-t0)/h);
Start:
T:=t0;
Y:=y0;
Z:=z0;
//Writeln('t= ',T:4:2,' y= ',Y:8:5);
For i:=1 to N do
begin
RK(T,Y,Z,Y1,Z1);
T:=T+h;
Y:=Y1;
Z:=Z1;
//Writeln('t= ',T:4:2,' y= ',Y:8:5);
end;
if ((z0 - e) < Y) and (Y < (z0 + e)) then goto Quit else t := t_max;
For i:=1 downto N do
begin
RK(T,Y,Z,Y1,Z1);
T:=T-h;
Y:=Y1;
Z:=Z1;
Writeln('t= ',T:4:2,' y= ',Y:8:5);
end;
if ((t0 - e) < Y) and (Y < (t0 + e)) then goto Quit else goto Start;
Quit:
for i := 1 to n do
Writeln('t= ',T:4:2,' y= ',Y:8:5);
End.