Построить график функции, y=acosx+ b, где а и b- числа — Pascal(Паскаль)

uses graph, crt;

function F(a, b, x: real): real;
begin
  F := a * cos(x) + b; { функция }
end;

var
  a, b, xn, xk, x, y, mx, my, dx, max, min: real;
  x0, y0, i, px, py: integer;
  s: string;

begin
  clrscr;
  writeln('Functia y=acosx+b');
  writeln('Vvedite a,b');
  readln(a, b);
  x0 := 0;
  initgraph(x0, y0, '');
  x0 := getmaxX div 2; { центр экрана по Х }
  xn := -2 * pi;
  xk := 2 * pi; { интервал по Х }
  max := F(a, b, xn);
  min := F(a, b, xn); { найдем максимальное и минимальное значения }
  x := xn;
  dx := 0.001;
  while x <= xk do
  begin
    if F(a, b, x) > max then
      max := F(a, b, x);
    if F(a, b, x) < min then
      min := F(a, b, x);
    x := x + dx;
  end;
  if (min < 0) and (max > 0)
  then { если экстремумы функции по разные строны от Х }
  begin
    y0 := round(getmaxY * max / (max - min));
    { ось Х между ними пропорционально }
    if max > abs(min) then
      my := y0 / max { масштаб по У, если макс болше модуля мин }
    else
      my := y0 / abs(min); { если модуль мин больше }
  end
  else if (min < 0) and (max < 0) then { если оба ниже Х }
  begin
    y0 := 50; { ось на 50 пикселей ниже верха }
    my := (getmaxY - 70) / abs(min); { масштаб от минимума, он ниже }
  end
  else if (min > 0) and (max > 0) then { если оба выше оси Х }
  begin
    y0 := getmaxY - 50; { ось выше на 50 нижней границы экрана }
    my := (getmaxY - 70) / max; { делим на мкс, он выше }
  end;
  mx := 620 / (xk - xn); { масштаб по Х }
  setbkcolor(15); { цвет фона }
  setcolor(8); { цвет линий }
  line(0, y0, getmaxX, y0); { оси }
  line(x0, 0, x0, getmaxY);
  for i := 1 to round(xk - xn) +
    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));
    line(x0 + round(i * mx), y0 - 3, x0 + round(i * mx), y0 + 3);
    { засечки на оси Х }
    line(x0 - round(i * mx), y0 - 3, x0 - round(i * mx), y0 + 3);
    str(i, s);
    { подпись оси У }
    outtextXY(x0 - 15, y0 + round(i * my), '-' + s); { соответственно засечкам }
    outtextXY(x0 - 15, y0 - round(i * my), s);
    { подпись оси Х }
    str(i, s);
    outtextXY(x0 + round(i * mx), y0 + 10, s);
    outtextXY(x0 - round(i * mx), y0 + 10, '-' + s);
  end;
  { центр }
  outtextXY(x0 + 5, y0 + 10, '0');
  { подписи концов осей }
  outtextXY(getmaxX - 10, y0 - 10, 'X');
  outtextXY(x0 - 10, 10, 'Y');
  setcolor(8);
  { график }
  x := xn;
  while x <= xk do
  begin
    x := x + dx; { наращиваем х }
    px := x0 + round(x * mx); { изменение по оси Х }
    y := F(a, b, x); { график в реальных координатах }
    py := y0 - round(y * my); { в экранных }
    putpixel(px, py, 8);
  end;
  readln

end.

Leave a Comment

3 + 5 =