Из TurboPascal переделать в PascalAbc - Pascal ABC
Формулировка задачи:
Переделать в PascalAbc
Листинг программы
- uses graphabc,crt;
- const x:real=0;
- x1:real=1;
- y:real=0;
- y1:real=0;
- g=9.8;
- w=0.1;
- dt=0.01;
- L=98;
- var
- gl,w1,x0,x10,y0,y10,ak,xp,yp,x1p,y1p:real;
- k1,k2,k3,k4,11,12,13,14:real;
- grDrivere:integer;
- grMode:integer;
- ErrCode:integer;
- begin
- gl:=g/l-w*w;
- w2:=2*w;
- grDriver:=Detect;
- InitGraph(grDriver,grMode,'c:\bp\bgi');
- ErrCode:=GraphResult;
- if ErrCode = grOk then
- begin
- repeat
- x0:=x;
- x10:=x1;
- y0:=y;
- y10:=y1;
- k1:=dt*(-gl*x0+w2*y10);
- 11:=dt*(-gl*y0-w2*x10);
- xp:=x0+dt*x10/2+dt*k1)/8;x1p:=x10+k2/2;
- yp:=y0+dt*y10/2+dt*11/8;y1p:=y10+11/2;
- k2:=dt*(-gl*xp+w2*y1p);
- l2:=dt*(-gl*yp-w2*x1p);
- xp:=x0+dt*x10/2+dt*k1/8;x1p:=x10+k2/2;
- yp:=y0+dt*y10/2+dt*11/8;y1p:=y10+12/2;
- k3:=dt*(-gl*xp+w2*y1p);
- l3:=dt*(-gl*yp-w2*x1p);
- xp:=x0+dt*x10+dt*k3/2;x1p:=y10+k3;
- yp:=y0+dt*y10+dt*13/2;y1p:=y10+l3;
- k4:=dt*(-gl*xp+w2*x1p);
- l4:=dt*(-gl*yp-w2*x1p);
- ak:=x10+(k1+k2+k3)/6;
- x1:=ak+(k2+k3+k4)/6;
- x:=x0+dt*ak;
- ak:=y10+(11+12+13)/6;
- y1:=ak+(12+13+14)/6;
- y:=y0+dt*ak;
- PutPixel(round(GetMaxX/2+x*75),round(GetMaxY/2-y*75),while);
- until KeyPressed;
- CloseGraph;
- end;
- else
- writeln('Graphics error:',GraphErrorMsg(ErrCode));
- end.
Решение задачи: «Из TurboPascal переделать в PascalAbc»
textual
Листинг программы
- uses graphABC;
- const
- g=9.8;
- w=0.1;
- dt=0.01;
- L=98;
- var
- gl,w1,x0,x10,y0,y10,ak,xp,yp,x1p,y1p:real;
- x,x1,y,y1,k1,k2,k3,k4,l1,l2,l3,l4,w2:real;
- begin
- setwindowsize(600,500);
- centerwindow;
- gl:=g/l-w*w;
- w2:=2*w;
- x:=0;
- y:=0;
- repeat
- x0:=x;
- x10:=x1;
- y0:=y;
- y10:=y1;
- k1:=dt*(-gl*x0+w2*y10);
- l1:=dt*(-gl*y0-w2*x10);
- xp:=x0+dt*x10/2+dt*k1/8; x1p:=x10+k2/2;
- yp:=y0+dt*y10/2+dt*l1/8; y1p:=y10+11/2;
- k2:=dt*(-gl*xp+w2*y1p);
- l2:=dt*(-gl*yp-w2*x1p);
- xp:=x0+dt*x10/2+dt*k1/8; x1p:=x10+k2/2;
- yp:=y0+dt*y10/2+dt*l1/8; y1p:=y10+l2/2;
- k3:=dt*(-gl*xp+w2*y1p);
- l3:=dt*(-gl*yp-w2*x1p);
- xp:=x0+dt*x10+dt*k3/2; x1p:=y10+k3;
- yp:=y0+dt*y10+dt*l3/2; y1p:=y10+l3;
- k4:=dt*(-gl*xp+w2*x1p);
- l4:=dt*(-gl*yp-w2*x1p);
- ak:=x10+(k1+k2+k3)/6;
- x1:=ak+(k2+k3+k4)/6;
- x:=x0+dt*ak;
- ak:=y10+(l1+l2+l3)/6;
- y1:=ak+(l2+l3+l4)/6;
- y:=y0+dt*ak;
- SetPixel(round(x*75),windowheight div 2-round(y*75),clBlack);
- until(windowheight div 2-round(y*75)=250)and(round(x*75)=300);
- end.
Объяснение кода листинга программы
- Используется библиотека graphABC.
- Константы: g=9.8, w=0.1, dt=0.01, L=98.
- Переменные: gl, w1, x0, x10, y0, y10, ak,xp,yp,x1p,y1p:real; x,x1,y,y1,k1,k2,k3,k4,l1,l2,l3,l4,w2:real;
- Устанавливается размер окна.
- Вычисляется значение gl.
- Вычисляется значение w2.
- Инициализируются переменные x, y, k1, k2, k3, k4, l1, l2, l3, l4, w2.
- Запускается цикл повторения.
- В каждой итерации цикла вычисляются значения x0, x10, y0, y10, k1, l1, xp, yp, x1p, y1p.
- Вычисляются значения k2, l2, k3, l3, k4, l4.
- Вычисляются значения ak, x1, x0, y1, y0, x1p, y1p.
- Вычисляются значения x1, x0, y1, y0, xp, yp.
- Устанавливаются цвета пикселей.
- Остановка цикла при выполнении условия окончания движения (округленные значения y и x равны 300 и 250 соответственно).
- Остановка программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д