Приближенное вычисление определенного интеграла методом трапеций, страница 2

procedure teoria;

begin

     clrscr;

     window(10,3,73,20);

     textcolor(white);

     clrscr;

     gotoxy(21,1);

     textcolor (12);

     writeln('<-> Теория <->');

      textcolor (15);

writeln('  График функции y=f(x) представляется в виде ломанной, соеди-',#10,#13,

        'няющей точки (Xi,Yi). В этом случае площадь всей фигуры (кри-',#10,#13,

        'волинейной трапеции) складывается из площадей элементарных',#10,#13,

        'трапеций.');

writeln;

writeln('  Площадь каждой такой трапеции равна произведению полусуммы',#10,#13,

        'основания на высоту:',#10,#13,

        '            Si=((Yi-1+Yi)/2)*Hi, i=1,2,...n',#10,#13,

        'Таким образом:                                             ',#10,#13,

        '                                                           ',#10,#13,

        '      bГ          1   ___n                                 ',#10,#13,

        '       | f(x)dx= ---  \      Hi*(Yi-1+Yi)                   ',#10,#13,

        '      aJ          2   /__i=1                                ');

     textcolor(0);

     readln;

end;

{*************************************************************************}

procedure reshenie;

var

a,b,n :word;

k: integer;

h,x,y,I,Ya,Yb,d,t,p:real;

{---------------------------------------------------------------------------}

function int(x:real):real;

begin

     int:=arctan(sqrt(x));

end;

{---------------------------------------------------------------------------}

function perv(x:real):real;

begin

     perv:=x*arctan(sqrt(x))-sqrt(x)+arctan(sqrt(x));

end;

{---------------------------------------------------------------------------}

begin

writeln;

TextColor(15);

writeln('введите пределы интегрирования...');

write('a:');

read (a);

write('b:');

read (b);

writeln;

writeln('введите число n-количество отрезков разбиения');

write('n:');

read (n);

h:=(b-a)/n;

I:=0;

k:=1;

while k<=n-1 do begin

                x:=a+k*h;

                y:=int(x);

                I:=I+y;

                k:=k+1;

                end;

  Ya:=int(a);

  Yb:=int(b);

  I:=h*((Ya+Yb)/2+I);

  writeln;

  TextColor(10);

  writeln('значение полученное методом трапеций ',I:0:5);

writeln;

TextColor(15);

writeln('ПРОВЕРКА МЕТОДОМ НЬЮТОНА-ЛЕЙБНИЦА');

writeln;

t:=perv(b);

p:=perv(a);

d:=t-p;

     TextColor(10);

     writeln('значение полученное методом Ньютона-Лейбница ',d:0:5);

      readln;

end;

{****************************************************************************}

procedure graf;

const

    cen_x=20;

    cen_y=440;

var

   Gd,Gm,I,xo,yo,x,y: Integer;

   num_st:string;

begin

     Gd := Detect; InitGraph(Gd, Gm,'');

     SetBkColor(1);

     SetColor(14);

     {ось y}

     line(cen_x,1,cen_x,getmaxy);

     line(cen_x,1,cen_x-5,cen_x-5);

     line(cen_x,1,cen_x+5,cen_x-5);

     {ось x}

     line(0,cen_y,getmaxx,cen_y);

     line(getmaxx,cen_y,getmaxx-10,cen_y-5);

     line(getmaxx,cen_y,getmaxx-10,cen_y+5);

     {ось x}

     i:=cen_x;

     repeat

          str(round(i/200),num_st);

          outTextxy(cen_x+i-15,cen_y-10,num_st);

          line(i,cen_y-10,i,cen_y+10);i:=i+200;

          {end;}

     until i>620;

     {ось y}

     i:=cen_y-round(cen_y/2);

     repeat

            str(round(i/200),num_st);

            outTextxy(cen_x+10,cen_y-i+30,num_st);

            i:=i+200;

     until i<0;

     i:=cen_y;

     repeat

     line(cen_x-10,i,cen_x+10,i);i:=i-200;

     until i<0;

     num_st:='y=arctan(sqrt(x))';

     outTextxy(300,30,num_st);

     num_st:='X';

     outTextxy(getmaxx-cen_x,cen_y+20,num_st);

     num_st:='Y';

     outTextxy(cen_x+20,getmaxy-cen_y-20,num_st);

     for x:=0 to GetMaxX do

     begin

          xo:=x+1;

          y:=round(arctan(sqrt(x/200))*200);delay(15);

          yo:=round(arctan(sqrt(xo/200))*200);

          line(x+cen_x,cen_y-y,xo+cen_x,cen_y-yo);

     end;

ReadLn;

CloseGraph;

end;

{****************************************************************************}

     type

     mas=array[1..6] of string[23];

     Const

     menu:mas=(' *> О программе <* ',

               '   *> Задание <*   ',

               '   *> Теория  <*   ',

               '   *> Решение <*   ',

               '   *> График  <*   ',

               '   *> Выход   <*   ');

     var

     i,k:byte;

     kod:char;

begin

k:=1;

1: TextMode(CO80);

   ClrScr;

   window(15,4,67,22);

   TextBackGround (3);

   TextColor(0);

   ClrScr;

 writeln(' ╔════════════════════════════════════════════════╗');

 writeln(' ║                                                ║');

 writeln(' ║      ▓▓▓▓  ▓  ▓  ▓   ▓   ▓▓▓  ▓▓▓▓▓   ▓▓▓      ║');

 writeln(' ║      ▓     ▓  ▓  ▓▓  ▓  ▓  ▓  ▓      ▓  ▓      ║');

 writeln(' ║      ▓▓▓▓  ▓▓▓▓  ▓ ▓ ▓  ▓▓▓▓  ▓ ▓▓▓  ▓▓▓▓      ║');

 writeln(' ║         ▓  ▓  ▓  ▓  ▓▓  ▓  ▓  ▓   ▓  ▓  ▓      ║');

 writeln(' ║      ▓▓▓▓  ▓  ▓  ▓   ▓  ▓  ▓  ▓▓▓▓▓  ▓  ▓      ║');

 writeln(' ║                                                ║');

 writeln(' ║             ╔═══════════════════╗              ║');

 writeln(' ║             ║                   ║              ║');

 writeln(' ║             ║                   ║              ║');

 writeln(' ║             ║                   ║              ║');

 writeln(' ║             ║                   ║              ║');

 writeln(' ║             ║                   ║              ║');

 writeln(' ║             ║                   ║              ║');

 writeln(' ║             ╚═══════════════════╝              ║');

 writeln(' ║                                Lihobabin Artem ║');

 writeln(' ╚════════════════════════════════════════════════╝');

   GoToXY(3,2);

   Kod:=' ';

      while kod<>#13 do

      begin

          for i:=1 to 6 do

          begin

          if i=k then begin

                      TextBackGround(11);

                      TextColor(128);

                      end

                 else begin

                      TextBackGround(11);

                      TextColor(0);

                      end;

                 GoToXY(17,i+9);

                 Write(Menu[i]);

                 end;

          Kod:=ReadKey;

          Sound(600);

          Delay(200);

          sound(500);

          Delay(200);

          sound(400);

          Delay(200);

           NoSound;

             if Kod=#0 then begin

                            kod:=ReadKey;

                            if Kod=#72 then if k>1 then k:=k-1

                                            else k:=6;

                            if Kod=#80 then if k<6 then k:=k+1

                                            else k:=1;

                            end;

             end;

   window (1,1,80,25);

   TextBackGround(0);

   TextColor(15);

   ClrScr;

   GoToXY (33,15);

{**************************************************************************}

  begin

    case k of 1: begin  about end;

              2: begin zadanie end;

              3: begin teoria end;

              4: begin reshenie end;

              5: begin graf end;

              6: goto 2;

   end;

   goto 1;

   end;

 2:

end.