Построение графика функции

Программа позволяет построить график функции. Здесь демонстрируются возможности графического режима для построения графиков.
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.
Онлайн всего: 28
Гостей: 28
Пользователей: 0

STUDLAB Сообщить про опечатку на сайте