Найти уравнение скорости движения тела и положение тела как функцию от времени - Turbo Pascal
Формулировка задачи:
Решение задачи: «Найти уравнение скорости движения тела и положение тела как функцию от времени»
uses crt,graph;
const v0=2;
s0=0;
function a(k:byte;t:real):real;
begin
a:=k*cos(t);
end;
function v(k:byte;t:real):real;
var u:real;
begin
u:=a(k,t);
v:=v0+u*t;
end;
function s(k:byte;t:real):real;
var u:real;
begin
u:=a(k,t);
s:=s0+v0*t+u*t*t/2;
end;
var k,i,x0,y0,x1,x2:integer;
t,u,max,mx,my:real;
st:string;
begin
clrscr;
writeln('Значения x,v,a при k=[1..3] t=[0..5]');
for k:=1 to 3 do
begin
t:=0;
while t<=5 do
begin
write('k=',k,' t=',t:0:0,' x=',s(k,t):5:2,' v=',v(k,t):5:2,' a=',a(k,t):5:2);
writeln;
t:=t+1;
end;
end;
write('Нажмите Enter для перехода в графический режим');
readln;
k:=0;
initgraph(k,i,'');
x0:=50;
y0:=getmaxY div 2;
x1:=0;
x2:=5;{интервал по Х}
t:=x1;
{построим графики при к=2, иначе нужно строить 9 графиков}
max:=a(2,t);
while t<=x2 do
begin
if abs(a(2,t))>max then max:=abs(a(2,t));
if abs(v(2,t))>max then max:=abs(v(2,t));
if abs(s(2,t))>max then max:=abs(s(2,t));
t:=t+0.1;
end;
mx:=(getmaxX-x0-30)/x2;{масштаб по Х}
my:=(y0-20)/max;
settextstyle(0,0,1);
line(0,y0,getmaxX,y0);{оси}
line(x0,0,x0,getmaxY);
for i:=1 to trunc(max)+1 do{максимальное количество засечек в одну сторону}
begin
line(x0-3,y0-round(i*my),x0+3,y0-round(i*my));{засечки на оси У}
line(x0-3,y0+round(i*my),x0+3,y0+round(i*my));
{подпись оси У}
str(i,st);
outtextXY(x0-35,y0-round(i*my),st);{соответственно засечкам}
outtextXY(x0-40,y0+round(i*my),'-'+st);
line(x0+round(i*mx),y0-3,x0+round(i*mx),y0+3); {засечки на оси Х}
{подпись оси Х}
outtextXY(x0+round(i*mx)+5,y0+10,st);
end;
{центр}
outtextXY(x0-15,y0+10,'0');
{подписи концов осей}
outtextXY(getmaxX-10,y0-10,'X');
outtextXY(x0+5,10, 'Y');
{графики}
t:=x1;
setcolor(12);{при k=2}
while t<=x2 do
begin
if t=x1 then moveto(x0+round(t*mx),y0-round(s(2,t)*my))
else lineto(x0+round(t*mx),y0-round(s(2,t)*my));
t:=t+0.1;
end;
t:=x1;
setcolor(13);
while t<=x2 do
begin
if t=x1 then moveto(x0+round(t*mx),y0-round(v(2,t)*my))
else lineto(x0+round(t*mx),y0-round(v(2,t)*my));
t:=t+0.1;
end;
t:=x1;
setcolor(14);
while t<=x2 do
begin
if t=x1 then moveto(x0+round(t*mx),y0-round(a(2,t)*my))
else lineto(x0+round(t*mx),y0-round(a(2,t)*my));
t:=t+0.1;
end;
{название}
setcolor(15);
outtextXY(100,10,'k=2 t=[0..5]');
setcolor(12);
outtextXY(100,30,'s(k,t)=s0+v0*y+a*t^2/2');
setcolor(13);
outtextXY(100,50,'v(k,t)=v0+a*t');
setcolor(14);
outtextXY(100,70,'a(k,t)=k*cos(t)');
readln
end.
Объяснение кода листинга программы
В данном коде используется функция a, которая вычисляет скорость движения тела как функцию от времени. Функция v вычисляет положение тела как функцию от времени, а функция s вычисляет ускорение тела как функцию от времени.
Для построения графика используются функции line и outtextXY. Функция line используется для построения линий на графике, а функция outtextXY используется для вывода текста на график.
В цикле while происходит построение графика для каждого значения k. При этом используются различные цвета для отображения различных функций.
Также в коде присутствуют строки с текстом, которые выводятся на график. Они используются для подписи осей и названия графика.
В конце кода происходит вывод названия графика и некоторых формул, описывающих зависимости функций от времени.