1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
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:=sin(3*x)+cos(x)/exp(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.
это программа построения графика функции по точкам почему-то она не работает при данной функции f:=sin(3*x)+cos(x)/exp(x) при значениях b больше 19 пишет ошибку invalid floating point operation может кто подскажет
Сообщение отредактировано: volvo - 5.11.2006 19:00