Код: Выделить всё
uses
crt, graph;
const
m=0.3; r=0.4; k=0.001; dt=0.001; q=300; N=51;
var
teta, F, t, y : real;
i, xx, vv, aa, FF, tt, Gd, Gm : integer;
eta, ksi : array [0..N] of real;
Procedure Graph_Init;
Begin
Gd:= Detect;
InitGraph(Gd, Gm,'c:\bp\bgi');
end;
Procedure Soliton;
Begin
F:=q*(ksi[i-1]-ksi[i])+q*(ksi[i+1]-ksi[i]);
teta:=(F-r*eta[i]-k*ksi[i])/m;
eta[i]:=eta[i]+teta*dt;
ksi[i]:=ksi[i]+eta[i]*dt;
end;
BEGIN Graph_Init;
Repeat
begin
t:=t+dt;
For i:=1 to N do
begin
y:=ksi[i];
Soliton;
if 10*t<3.142 then ksi[1]:=20*sin(5*t)
else ksi[1]:=0;
ksi[N]:=0;
setcolor(8);
circle(12*i, 240-round(y*10),3);
setcolor(15);
circle(12*i, 240-round(ksi[i]*10),3);
end;
end;
SetColor(10);
OutTextXY(627, 230, 'x');
OutTextXY(330, 10, 'U');
SetColor(DarkGray);
MoveTo(0, 240);
LineTo(640, 240);
LineTo(630, 238);
LineTo(630, 242);
LineTo(640, 240);
MoveTo(320, 480);
LineTo(320, 0);
LineTo(318, 10);
LineTo(322, 10);
LineTo(320,0);
until KeyPressed;
CloseGraph;
END.
И если можно, объясните за счет чего осуществляется колебание против оси х (какая команда отвечает).