Построение графика функции - PascalABC.NET (24905)
Формулировка задачи:
Дорогие программисты прошу у вас помощи, нужно построить универсальный график функции(т.е можно построить любой график).
Надеюсь на вашу помощь.
Желательно под Pascal ABC Net.
Решение задачи: «Построение графика функции»
textual
Листинг программы
uses graphABC;
function F1(x:real):real;
begin
F1:=sqr(sin(x));
end;
function F2(x:real):real;
begin
F2:=0.5-sqr(cos(x));
end;
var xn,xk,x,mx,dx:real;
x0,y0,my,i:integer;
s:string;
begin
x0:=windowwidth div 2;{центр экрана}
y0:=windowheight div 2;
xn:=-2*pi;xk:=2*pi;{интервал по Х}
mx:=(x0-30)/xk;{масштаб по Х}
my:=y0-40;{по У}
line(0,y0,windowwidth,y0);{оси}
line(x0,0,X0,windowheight);
line(x0-3,y0+my,x0+3,y0+my);
textout(x0-15,y0+my,'-1');
line(x0-3,y0-my,x0+3,y0-my);
textout(x0-15,y0-my,'1');
for i:=1 to trunc(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);
str(i,s);
{подпись оси Х}
textout(x0+round(i*mx)-15,y0+10,s);
textout(x0-round(i*mx),y0+10,'-'+s);
end;
{центр}
textout(x0+5,y0+10,'0');
{подписи концов осей}
textout(windowwidth-10,y0-10,'X');
textout(x0-10,10, 'Y');
{графики}
x:=xn;
dx:=0.001;
while x<=xk do
begin
x:=x+dx; {наращиваем х}
setpixel(x0+round(x*mx),y0-round(F1(x)*my),clBlue);
setpixel(x0+round(x*mx),y0-round(F2(x)*my),clRed);
end;
end.
Объяснение кода листинга программы
- Объявление функций F1 и F2, которые принимают аргумент x типа real и возвращают значения функций соответственно.
- Объявление переменных xn, xk, x, mx, dx, x0, y0, my, i, s типа real и переменных windowwidth, windowheight типа integer.
- Задание начального значения x0, y0, my, i, s, mx и dx.
- Отображение осей X и Y на экране с помощью функции line.
- Отображение подписей концов осей X и Y с помощью функции textout.
- В цикле for от 1 до trunc(xk)+1 происходит построение засечек на оси Х с помощью функции line.
- С помощью функции textout отображаются подписи на оси Х.
- С помощью цикла while от xn до xk происходит наращивание значения x на dx и вызов функции setpixel для отображения точек графика функций F1 и F2 на экране.
- Конец программы.