построить график функции в паскале

Ответить
assis2007
Сообщения: 79
Зарегистрирован: 04 ноя 2007, 19:17

нужно построить график функции y=ln(x)/x. у меня что то не выходит а понять где не могу

Код: Выделить всё

program graffunc;
uses Graph,dos,crt;
var
 x1,x2,y1,y2,x,y:real;
 dx,mx,my:real;
 l,b,w,h,x0,y0:integer;
 st:string;
 grdriver:integer;
 grmode:integer;
 errcode:integer;
function f(x:real):real;
begin
 f:=(ln(x))/x;
end;

begin
 writeln('grafik fynction1');
 grdriver:=vga;
 grmode:=vgahi;
 initgraph(grdriver,grmode,'e:\tp\bgi');
 errcode:=graphresult;
 if errcode<>grok then halt(1);
 l:=40;
 b:=400;
 h:=200;
 w:=200;
 x1:=0;
 x2:=25;
 dx:=0.01;
 y1:=f(x1);
 y2:=f(x2);
 x:=x1;
 repeat
  y:=f(x);
  if y<y1 then y1:=y;
  if y>y2 then y2:=y;
  x:=x+dx;
 until (x>=x2);
 my:=h/abs(y2-y1);
 mx:=w/abs(x2-x1);
 x0:=l;
 y0:=b-abs(round(y1*my));
 line(l,b,l,b-h);
 line(x0,y0,x0+w,y0);
 str(y2:5:1,st);
 outtextXY(l+5,b-h,st);
 str(y1:5:1,st);
 outtextXY(l+5,b,st);

 x:=x1;
 repeat
  y:=f(x);
  putpixel(x0+round(x*mx),y0-round(y*my),15);
  x:=x+dx;
 until (x>=x2);
 readln;
 closegraph;
 
end.
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

Вам никто не говорил что на 0 делить нельзя
заменить x1:=0.001;
assis2007
Сообщения: 79
Зарегистрирован: 04 ноя 2007, 19:17

ставил х1=0.001 не чертил поставил 1 и вроде чертит но не правильно поднимает как-то высоко слишком
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

оцените вручную значение функции, при мелких в минус резко, потом до 0,36 и стремится к нулю, в таком масштабе сливается с системой координат
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Так зачем точки ставить?
График лучше линиями рисовать.
Кстати, воспользуйтесь поиском, я как-то здесь подобную задачу решал.
Ни что так не ограничивает фантазию программиста, как компилятор...
Ответить