Построение графика функции
Программа позволяет построить график функции. Здесь демонстрируются возможности графического режима для построения графиков.
program Grafik_funkcii; uses crt,graph; var {координаты графика функции} x,y,a,b:real; {Номера типа графического дрaйвера и номера графического режима} driver,mode:integer; {cx,cy - координаты центра системы координат на экране, mx,my - масштаб (количество пикселей на единицу), ex,ey - координаты точки графика в масштабе экрана} cx,cy,mx,my,ex,ey,n:integer; {Описание функции, график которой затем выводится на экран} function f(x:real):real; {Закомментированы варианты функций для тестрирования} begin f:=3*sin(x/2+0.5)+2*sin(x+3)+sin(2*x)+sin(6*x) {f:=sin(3*x)+cos(x)/exp(x)} {f:=abs(sin(sqr(x)));} {f:=4*exp(x/4)*sin(8*x)} end; procedure DeleniyaX(a:real); var stroka:string;x,s:real; begin {Деления выставляются в 10-ти точках от -a до a c шагом s} x:=-a;s:=2*a/10; repeat ex:=trunc(cx+x*mx)-10; ey:=cy+5; str(x:3:1,stroka); outtextxy(ex,ey,stroka); x:=x+s; until x>a; end; procedure DeleniyaY(b:real); var stroka:string;y:real;s:integer; begin {Деления по оси Y выставляются в 10 точках от -b до b} s:=trunc((getmaxy-30)/10);ey:=getmaxy-30; repeat ex:=cx+5; y:=b-ey/my; str(y:3:1,stroka); if abs(y)>0.5 then outtextxy(ex,ey+5,stroka); ey:=ey-s; until ey<10; end; {Подпрограмма построения графика} procedure MyGrafik(a,b:real); {Процедура строит график от -a до a c шагом s} var p,n:integer;s,t:real; strx:string; begin {Положение начала координат на экране} cx:=trunc(getmaxx/2);cy:=trunc(getmaxy/2); {Цвета фона и текста} SetBkColor(yellow);SetColor(blue); line(10,cy,getmaxx-50,cy);{Ось X} {Стрелочка на оси X} line(getmaxx-60,cy-5,getmaxx-50,cy); line(getmaxx-60,cy+5,getmaxx-50,cy); line(cx,10,cx,getmaxy-20); {Ось Y} {Рисование стрелочки на оси y} line(cx-5,20,cx,10);line(cx+5,20,cx,10); setcolor(magenta); {Подписи к осям} outtextxy(cx+10,10,'y'); outtextxy(getmaxx-50,cy-10,'x'); {Определение масштаба по осям X и Y исходя из того, что X от -a до a} mx:=trunc((getmaxx)/(2*a)); {Y от -b до b} my:=trunc((getmaxy)/(2*b)); {Вывод значений по оси X от -a до a} DeleniyaX(a); {Вывод значений по оси Y от -b до b} DeleniyaY(b); outtextxy(10,50,'График функции'); {x меняется от -a до a c шагом s в n+1 точке} x:=-a;n:=500;s:=2*a/n; moveto(trunc(cx+x*mx),trunc(cy-f(x)*my)); Repeat y:=f(x); ex:=trunc(cx+x*mx); ey:=trunc(cy-y*my); lineto(ex,ey); x:=x+s; Until ex>getmaxx-70; end; Begin clrscr; write('a=');readln(a); write('b=');readln(b); {Открытие графического режима} driver:=detect; initgraph(driver,mode,'d:\tp\bgi'); {очистка экрана в графическом режиме} cleardevice; {выполнение процедуры вывода графика} MyGrafik(a,b); {задержка} repeat {до нажатия клавиши Enter} until keypressed; End.