Показать сообщение отдельно
иксуй!
Аватар для иксуй!
Сообщения: 9,556
Регистрация: 23.11.2007
Старый пост, нажмите что бы добавить к себе блог 18 января 2010, 22:00
  #322 (ПС)
Код:
program task1;

  const

       eps=0.001;
       p=0.333;


  type TypeFunc = function (x:real):real;


  var  x,a,b,c,Fa,Fb,Fc,S,s1,s2,s3,xr1,xr2,xr3:real;
       n0:integer;


{$F+}

    {***f1***}
    function f1 (x:real):real; begin f1:=3*(0.5/(x+1)+1) end;


    {***f2***}
    function f2 (x:real):real; begin f2:=2.5*x-9.5       end;


    {***f3***}
    function f3 (x:real):real; begin f3:=5/x             end;

    {******}


    procedure root (f,g:TypeFunc; eps,a,b:real; var x:real);

    begin

      while b-a > eps do

      begin

        c:=0.5*(b+a);

        Fc:=f(c)-g(c);
        Fa:=Fc*(f(a)-g(a));
        Fb:=Fc*(f(b)-g(b));
        if Fa < 0 then b:=c
        else
            if Fb < 0 then a:=c
        else
            if Fc = 0 then begin
                    b:=c;a:=c;
                    break
                    end;
      end;

        x:=(b+a)*0.5;

    end;

    {******}

    {******FUNCTION INTEGRAL******}

    function integral(f:TypeFunc;a,b,eps:real):real;
      const p=3;
      var
      n,i:integer;
      s1,s2,h:real;
    begin
      n:=1;
      h:=(b-a)/n;
      s1:=h*0.5*(f(a)+f(a+h));
      n:=2*n;
      h:=(b-a)/n;
      s2:=h*(0.5*f(a)+f(a+h)+0.5*f(a+n*h));
      repeat
           h:=(b-a)/n;
           s1:=s2;
           s2:=0.5*h*(f(a+n*h)+f(a+2*n*h));
           for i:=n+1 to 2*n-1 do
           begin
             h:=(a-b)/i;
             s2:=s2+f(a+i*h);
           end;
           n:=2*n;
     until (abs(s1-s2)/p)<eps;
     integral:=s2;
     end;

{------------------------Ѓ‹ЋЉ-------------------------}

begin
writeln('ўўҐ¤ЁвҐ Є®®а¤Ё­ вл в®зҐЄ a Ё b ­  ®бЁ x');
readln(a,b);
root(f1,f2,eps,a,b,xr1);
root(f2,f3,eps,a,b,xr2);
root(f3,f1,eps,a,b,xr3);
writeln('в®зЄЁ ЇҐаҐбҐзҐ­Ёп:')
writeln('  x1=',xr1,'  x2=',xr2,'  x3=',xr3);
writeln();
Writeln('S=',integral(f1,xr3,xr2,eps)-integral(f3,xr3,xr2,eps)+integral(f1,xr2,xr1,eps)-integral(f2,xr2,xr1,eps));
readln(s)
end.
ребятааа кто шарит помогите сделать чтобы она заработала
вообщем программа должна находить площадь фигуры образованной графиками трёх функций
процедура root находит точки пересечения методом деления отрезка пополам, а функция integral вычисляет его по формуле трапеций, ну ф-ла в задании дана..
что надо чтобы она работала ?

offline
Ответить с цитированием