Изобразить два графика с указанием точек пересечения - Pascal ABC (13644)

Узнай цену своей работы

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

Нужно написать программу, изображающую два графика с указанием точек пересечения y=-x^2-5x+6 и y=|x-1| Помогите пожалуйста

Решение задачи: «Изобразить два графика с указанием точек пересечения»

textual
Листинг программы
uses graphABC;
function F1(x:real):real;
begin
F1:=-x*x-5*x+6;
end;
function F2(x:real):real;
begin
F2:=abs(x-1);
end;
 
var xn,xk,max,min,mx,my,dx:real;
    x,x1,x2,y1,y2:real;
    n,x0,y0,i,k:integer;
    s1,s2:string;
begin
//интервал по Х
xn:=-6;
xk:=3;
//найдем мин. макс. и корни
x:=xn;
max:=F1(x);
min:=F1(x);
dx:=0.001;
k:=0;
while x<=xk+dx do
 begin
  if F1(x)>max then max:=F1(x);
  if F2(x)>max then max:=F2(x);
  if F1(x)<min then min:=F1(x);
  if F2(x)<min then min:=F2(x);
  if abs(F1(x)-F2(x))<dx then
    begin
     if k=0 then
      begin
       x1:=x;
       y1:=F1(x);
       k:=1;
      end
     else
      begin
       x2:=x;
       y2:=F1(x);
      end;
    end;
  x:=x+dx;
 end;
 //координатная сетка
x0:=round(windowwidth*(-xn)/(xk-xn));
mx:=(windowwidth-30)/(xk-xn);
y0:=windowheight div 2;
if max>abs(min) then my:=(y0-20)/max
else my:=(y0-20)/abs(min);
n:=trunc(xk)+1;
if max>xk then n:=trunc(max)+1;
if trunc(abs(min))+1>n then n:=trunc(abs(min))+1;
line(0,y0,windowwidth,y0);{оси}
line(x0,0,X0,windowheight);
for i:=1 to n 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);
  if i mod 2=0 then
   begin
    textout(x0-20,y0-round(i*my),inttostr(i));
    textout(x0-25,y0+round(i*my),inttostr(-i));
   end;
  textout(x0+round(i*mx),y0+10,inttostr(i));
  textout(x0-round(i*mx),y0+10,inttostr(-i));
 end;
textout(x0+5,y0+10,'0');
textout(windowwidth-10,y0-20,'X');
textout(x0+10,0, 'Y');
//графики
x:=xn;
while x<=xk do
 begin
  setpixel(x0+round(x*mx),y0-round(F1(x)*my),clBlue);
  setpixel(x0+round(x*mx),y0-round(F2(x)*my),clRed);
  x:=x+dx;
 end;
//пояснения
textout(20,y0+30,'Графики функций');
setfontcolor(clBlue);
textout(20,y0+45,'y=-x^2-5x+6');
setfontcolor(clRed);
textout(20,y0+60,'y=|x-1|');
setfontcolor(clBlack);
textout(20,y0+75,'na intervale [-6;3]');
str(x1:5:2,s1);
str(y1:5:2,s2);
textout(20,y0+105,'x1='+s1+' y1='+s2);
str(x2:5:2,s1);
str(y2:5:2,s2);
textout(20,y0+120,'x2='+s1+' y2='+s2);
setbrushcolor(clGreen);
//точки пересечения
circle(x0+round(x1*mx),y0-round(y1*my),4);
circle(x0+round(x2*mx),y0-round(y2*my),4);
end.

Объяснение кода листинга программы

В данном коде используется графический пакет PascalABC для создания двух графиков и отображения точек пересечения. Переменные и функции:

  • xn, xk, max, min, mx, my, dx: реальные;
  • x, x1, x2, y1, y2: реальные;
  • n, x0, y0, i, k: integer;
  • s1, s2: строки;
  • F1, F2: функции;
  • x0, y0, windowwidth, windowheight: константы;
  • clBlue, clRed, clBlack, clGreen: цвета;
  • setpixel, textout, setfontcolor, str: функции графического пакета. Код начинается с определения переменных и функций. Затем следует блок while, который выполняет следующие действия:
  • вычисляет текущие координаты x и y для графика;
  • проверяет, пересекаются ли графики функций, и если да, то устанавливает соответствующие пиксели на экране;
  • увеличивает счетчик i;
  • выводит на экран текущие координаты x и y, а также номер i;
  • повторяет предыдущие действия до тех пор, пока x не станет больше или равно xk плюс шаг dx. Далее следует блок, который выводит на экран координаты осей и графики функций. Затем вычисляются координаты точек пересечения и рисуются круги на экране. В конце кода выводятся сообщения на экран, которые содержат координаты точек пересечения.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.111 из 5
Похожие ответы