Изобразить кусочный график - Pascal ABC

Формулировка задачи:

Помогите изобразить данный график в паскале. Заранее большое спасибо!

Код к задаче: «Изобразить кусочный график - Pascal ABC»

textual
uses graphABC;
function F(x:real):real;
begin
if x<=-5 then F:=-sqrt(4-sqr(x+7))+2
else if x<=-4 then F:=2
else if x<=0 then F:=-x/2
else if x<=pi then F:=cos(x-pi/2)
else F:=x-pi;
end;
var x,max,min,mx,my,dx:real;
    x0,y0,xn,xk,i:integer;
begin
setwindowsize(640,160);
centerwindow;
xn:=-9;
xk:=5;//интервал по Х
x0:=9*windowwidth div 14;
mx:=(x0-40)/-xn;//масштаб по Х
y0:=windowheight-50;
my:=(y0-20)/2;
line(0,y0,windowwidth-10,y0);///оси
line(windowwidth,y0,windowwidth-10,y0-5);
line(windowwidth,y0,windowwidth-10,y0+5);
line(windowwidth-10,y0-5,windowwidth-10,y0+5);
floodfill(windowwidth-8,y0,clBlack);
setfontsize(10);
textout(windowwidth-10,y0-20,'X');
line(x0,10,x0,windowheight);
line(x0,0,x0-5,10);
line(x0,0,x0+5,10);
line(x0-5,10,x0+5,10);
floodfill(x0,8,clBlack);
textout(x0+10,0,'Y');
for i:=1 to 9 do//максимальное количество засечек в одну сторону
 begin
  if i<3 then
   begin
    line(x0-3,y0-round(i*my),x0+3,y0-round(i*my));//засечки на оси У
    textout(x0-20,y0-round(i*my),inttostr(i));//подпись оси У соответственно засечкам
   end;
  if i<6 then
   begin
    line(x0+round(i*mx),y0-3,x0+round(i*mx),y0+3); //засечки на оси Х
    textout(x0+round(i*mx),y0+10,inttostr(i));//подпись оси Х
   end;
  line(x0-round(i*mx),y0-3,x0-round(i*mx),y0+3);
  textout(x0-round(i*mx),y0+10,inttostr(-i));
 end;
//центр
textout(x0+5,y0+10,'0');
//график
setpenwidth(2);
x:=xn;
while x<=xk do
 begin
  if x=xn then moveto(x0+round(x*mx),y0-round(F(x)*my))
  else lineto(x0+round(x*mx),y0-round(F(x)*my));
  x:=x+0.01;
 end;
end.

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

10   голосов, оценка 4.100 из 5


СОХРАНИТЬ ССЫЛКУ