Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ точки пересечения

Автор: Vipka 16.04.2003 18:09

Помогите составить программу для вычисления точек пересечения двух функиций.

и еще может кто нить дать ссылку где на примере показывается как составить прогу для вычилении функции с траемя перемеными.

Автор: Dark 20.04.2003 7:19

Ну, насколько я помню из математики, две функции пересекаются тогда, когда при одинаковых значениях их переменных они равны,
т.е. x^2+x+2 пересек. c x+2 тогда, когда x^2+x+2=x+2(к примеру не придирайтесь - взят из головы...)

Код
program peresek;
var
i: integer;

begin
for i:=1 to 1000 do
begin
if ((i*i)+i+2)=(i+2) then writeln('Пересечение! х= ',i);
end;
end.


Ну и соответственно для функции с двумя неизвесными - двойной цикл.

Автор: Shadow 21.04.2003 8:16

:D а можно когда разница координат двух фн-ций
меньше чем напрмер 1
---
взвисимости какой тосности надо получить результат

Автор: Vipka 21.04.2003 18:59

2 Dark что не работает.

Надо чтоб эта программа не тока считала но и рисовала график но с этим проблем меньше...........есть програама которая рисует один график:

Код
program gluk;
uses crt,graph;
var
grdr,grmod,i,y0,dy1,dy,dx1,dx:integer;
const ny=300;nx=400;
type func= function(x:real):real;
var a,b,hx, n,x,y,yg,scaly,ym,max,min:real;
stma,stmi:string;
const xmax=640;ymax=480;pi=3.14;t1=10;t2=2;t=3;
{$F+}
function f(x:real):real;
begin
   f:=-x;
end;
{$F-}
procedure maxmin(var max,min:real;var y0:integer; a,b,hx:real;f:func);
begin
  x:=a; min:=f(a); max:=min;
  repeat
  x:=x+hx;
  y:=f(x);
      if y>max then max:=y
      else
         begin
             if y<min then min:=y;
         end;
      until x>b;
      writeln('max=',max);
      writeln('min=',min);
      if (max>0) and (min<0) then
          begin
              yg:=max+abs(min);
              scaly:=ny/yg;
              y0:=dy+round(scaly*max);
          end
      else
          begin
              if(max>0) and (min>=0) then
                  begin
                      yg:=max;
                      y0:=ny+dy;
                  end
              else
                  begin
                       yg:=abs(min);
                       y0:=dy;
                  end
          end;
  writeln('scaly=',scaly);    scaly:=ny/yg;
end;
begin
   a:=0; b:=20; hx:=(b-a)/nx;
   dy:=round((ymax-ny)/2);
   dx:=round((xmax-nx)/2);
   dx1:=round(dx/2);
   dy1:=round(dy/2);
   maxmin(max,min, y0,a,b,hx,f);
   grdr:=detect;
   initgraph(grdr,grmod,'');
   setcolor(129);
   line(dx1,y0,xmax-dx1,y0);
   line(dx,ymax-dy1,dx,dy1);
   setcolor(5);
   line(xmax-dx,y0+5,xmax-dx,y0-5);
   line(dx+5,y0-round(max*scaly),dx-5,y0-round(max*scaly));
   line(dx-5,y0-round(min*scaly),dx+5,y0-round(min*scaly));
   line(xmax-dx1,y0,xmax-dx1-5,y0-5);
   line(xmax-dx1,y0,xmax-dx1-5,y0+5);
   line(dx,dy1,dx+5,dy1+5);
   line(dx,dy1,dx-5,dy1+5);
   str(max,stma);
   str(min,stmi);
   delete(stma,5,7);
   delete(stmi,5,7);
            OutTextXY (100,46 ,'y');
            outtextxy (dx1+15,y0-10,'(0.0)');
            outtextxy (dx-100,y0-round(max*scaly)-10,stma);
            outtextxy (dx-100,y0-round(min*scaly)-10,stmi);
            outtextxy (xmax-dx+55,y0+5,'x');
delay(2000);
for i:=0 to nx do
          putpixel(dx+i,y0-round(scaly*f(a+i*hx)),2);

readln;
closegraph;
end.


но незнаю как сделать чтоб оба рисовала и считала точку пересечения........кто может помогите перделать

если что функции f1:=-x; f2:=sqr(x+4); при -4<=x<=0