Найти область определения функции D(f), ее нули экстремумы и множество значений W(f) построить график функций - Pascal
Формулировка задачи:
Найти область определения функции D(f), ее нули экстремумы и множество значений W(f) построить график функций нарисовав и разместив оси координат y=x^3-3x^2+2 (Pascal abc)
Решение задачи: «Найти область определения функции D(f), ее нули экстремумы и множество значений W(f) построить график функций»
textual
Листинг программы
uses graphABC;
function F(x:real):real;
begin
F:=power(x,3)-3*power(x,2)+2;
end;
var xn,xk,x,mx,my,dx,xmn,min,xmx,max:real;
k:array[1..3] of real;
x0,y0,i,n:integer;
s1,s2:string;
begin
//интервал
xn:=-2;
xk:=4;
//графическое окно
setwindowsize(600,600);
centerwindow;
//начало координат
x0:=windowwidth div 3;
y0:=round(windowheight*F(xk)/(F(xk)-F(xn)));
//масштабы
mx:=(x0-30)/-xn;{масштаб по Х}
my:=(y0-20)/F(xk);{по У}
//координатная сетка
for i:=1 to trunc(F(xk))+1 do
begin
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);
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));
textout(x0+round(i*mx),y0+10,inttostr(i));
textout(x0-round(i*mx),y0+10,inttostr(-i));
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;
end;
line(0,y0,windowwidth,y0);{оси}
line(windowwidth,y0,windowwidth-10,y0+5);
line(windowwidth,y0,windowwidth-10,y0-5);
line(x0,0,X0,windowheight);
line(x0,0,x0-5,10);
line(x0,0,x0+5,10);
textout(x0+5,y0+10,'0');
textout(windowwidth-10,y0-20,'X');
textout(x0+10,0, 'Y');
//график
n:=0;
x:=xn;
setpencolor(clBlue);
setpenwidth(2);
dx:=0.01;
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));
if (F(x-dx)>F(x))and(F(x+dx)>F(x))then
begin
xmn:=x;
min:=F(x);
end;
if (F(x-dx)<F(x))and(F(x+dx)<F(x))then
begin
xmx:=x;
max:=F(x);
end;
if abs(F(x))<dx*2 then
begin
inc(n);
k[n]:=x;
end;
x:=x+dx;
end;
setpencolor(clRed);
setbrushcolor(clRed);
circle(x0+round(xmx*mx),y0-round(max*my),3);
setpencolor(clLime);
setbrushcolor(clLime);
circle(x0+round(xmn*mx),y0-round(min*my),3);
setpencolor(clBlack);
setbrushcolor(clBlack);
for i:=1 to 3 do
circle(x0+round(k[i]*mx),y0,2);
setbrushstyle(bsClear);
setfontsize(10);
setfontcolor(clBlue);
textout(x0+50,0,'График функции y=x^3-3x^2+2');
textout(x0+50,20,'на интервале [-2;4]');
textout(x0+50,40,'Область определения D(f)=R');
str(F(xn):0:1,s1);
str(F(xk):0:1,s2);
textout(x0+50,60,'Множество значений W(f)= ['+s1+';'+s2+']');
str(xmn:0:1,s1);
str(min:0:1,s2);
setfontcolor(clLime);
textout(x0+50,80,'Локальный минимум: x='+s1+' F(x)='+s2);
str(xmx:0:1,s1);
str(max:0:1,s2);
setfontcolor(clRed);
textout(x0+50,100,'Локальный максимум: x='+s1+' F(x)='+s2);
setfontcolor(clBlack);
textout(x0+50,120,'Нули функции:');
s2:='';
for i:=1 to n do
begin
str(k[i]:0:3,s1);
s2:=s2+'x'+inttostr(i)+'='+s1+' ';
end;
textout(x0+50,140,s2);
end.
Объяснение кода листинга программы
- Объявление функции F(x), где x - входной параметр, инициализация переменной F
- Инициализация переменных xn, xk, x, mx, my, dx, xmn, min, xmx, max, k, x0, y0, i, n, s1, s2
- Установка интервала xn(=-2) и xk(=4)
- Настройка графического окна и координат начала координат
- Расчет масштабов для координатной сетки
- Построение координатной сетки
- Настройка осей, подписей и надписей
- Построение графика
- Поиск и отметка локальных минимумов и максимумов на графике
- Отображение области определения функции D(f), множества значений W(f), локальных минимумов/максимумов и нулей функции с помощью надписей и различных цветовые обозначений Написанный код выводит график функции y=x^3-3x^2+2, определяет область определения, множество значений, нули функции, экстремумы и строит график функции.