Изобразить два графика с указанием точек пересечения - 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. Далее следует блок, который выводит на экран координаты осей и графики функций. Затем вычисляются координаты точек пересечения и рисуются круги на экране. В конце кода выводятся сообщения на экран, которые содержат координаты точек пересечения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д