Навигация

Поиск по сайту

Последние новости

Новое в блогах

Родители - За безопасность детей!
Администрация, педагог
Начало
Лихоманенко Николай Иванович, педагог
Лето с футбольным мячом!
Печалёва Елена Борисовна, педагог
Дружно отдыхаем, дружно пищу поглощаем!
Печалёва Елена Борисовна, педагог
Открытие лагеря "Солнышко"
Печалёва Елена Борисовна, педагог

10 класс. П.70 Практическая работа №65. Вычисление площади фигуры.

 Учебник. К.Ю Поляков, Е.А. Ерёмин. Информатика. 10 класс. Углублённый уровень. §70 Решение уравнений


Практическая работа №65. Вычисление площади фигуры

 

//Уровень A. Найдите площадь фигуры, ограниченной параболой y = x * x  и осью OX, на интервале [0;10]  .

//Уровень B. Найдите площадь фигуры, ограниченной графиками функций y = x * x  и y = 4 * cos(x).

//Уровень C. Найдите площадь фигуры, ограниченной эллипсом (x*x)/(a*a)+(y*y)/(b*b)=1

//  при a = 2 и b = 3.

//Сравните ваш результат с точным значением S = Pi*a*b. Экспериментально определите

//наибольший интервал дискретизации, при котором ошибка численного метода составляет не более 1%.


PASCAL

program pr65ABC;


type

  FUN = function(x: real): real;


function f1A(x: real): real;

begin

  f1A := x * x;

end;


function f2A(x: real): real;

begin

  f2A := 0;

end;


function fB(x: real): real;

begin

   fB := x * x - 4 * cos(x);

end;


function f1B(x: real): real;

begin

   f1B := 4 * cos(x);

end;


function f2B(x: real): real;

begin

   f2B := x * x;

end;


function f1C(x: real): real;

begin

  if abs(x) > 2 then f1C:=0 

  else f1C := sqrt((1 - (x * x) / (2 * 2)) * 3 * 3);

end;


function f2C(x: real): real;

begin

   if abs(x) > 2 then f2C:=0 

   else f2C := -sqrt((1 - (x * x) / (2 * 2)) * 3 * 3);

end;


procedure interval(var l, r: real; f: FUN);

const

   eps = 0.00001;

var

   n: byte;

   delta, a, b, c: real;

begin

   n := 0;

   a := -100;

   while a <= 100 do

   begin

      while (f(a) * f(a + 0.1) > 0) and (a <= 100) do a := a + 0.1;

      if (f(a) * f(a + 0.1) < 0)

      then begin

         b := a + 0.1;

         delta := 2 * eps;

         while b - a > delta do

             begin

                c := (a + b) / 2;

                if f(a) * f(c) <= 0

                   then b := c

                   else a := c;

             end;

          if n = 0 then l := (a + b) / 2 else r := (a + b) / 2;

          end;

       a := a + 0.1;

       n := n + 1;

   end;

end;


var

  x, S, S0, h, a, b: real;


begin

  

  //Уровень А

  writeln('Метод прямоугольников');

  a := 0; b := 10; h := 0.01;

  S := 0; x := a;

  while x < b do 

     begin

        S := S + f1A(x + h / 2) - f2A(x + h / 2);

        x := x + h;

     end;

  S := h * S;

  writeln('Площадь ', S:8:3);

  

  //Уровень B

  writeln('Метод трапеций');

  interval(a, b, fB);

  S := 0; x := a; h := 0.01;

  while x < b do 

      begin

         S := S + f1B(x) - f2B(x) + f1B(x + h) - f2B(x + h);

         x := x + h;

      end;

  S := h * S / 2;

  writeln('Площадь ', S:8:3);

  

  //Уровень C

  S0 := PI * 2 * 3;

  writeln('Метод трапеций');

  a := -2; b := 2; h := 2;

  repeat

      S := 0; x := a; h := h / 2;  

      while x < b do 

          begin

             S := S + f1C(x) - f2C(x) + f1C(x + h) - f2C(x + h);

             x := x + h;

          end;

      S := h * S / 2;

  until (abs(S0 - S) / S0 < 0.0001);

  

  writeln('Площадь ', S:8:3);

  writeln('Площадь по формуле', S0:8:3);

  writeln('Интервал дискретизации для 0.01% ', h:8:5);

  

end.

 

C++

#include [iostream]

#include [math.h]

using namespace std;


typedef double (*fun)(double x);


double f1A(double x)

{

  return x * x;

}


double f2A(double x)

{

  return 0;

}


double fB(double x)

{

   return x * x - 4 * cos(x);

}


double f1B(double x)

{

   return 4 * cos(x);

}


double f2B(double x)

{

   return x * x;

}


double f1C(double x)

{

  if (fabs(x) > 2) return 0;

  else return sqrt((1 - (x * x) / (2 * 2)) * 3 * 3);

}


double f2C(double x)

{

   if (fabs(x) > 2) return 0;

   else return -sqrt((1 - (x * x) / (2 * 2)) * 3 * 3);

}


void interval(double &l, double &r, fun f)

{

    const double  eps = 0.00001;

   short int n;

   double delta, a, b, c;

   n = 0;

   a = -100;

   while (a <= 100)

   {

      while ((f(a) * f(a + 0.1) > 0) && (a <= 100)) a = a + 0.1;

      if (f(a) * f(a + 0.1) < 0)

       {

         b = a + 0.1;

         delta = 2 * eps;

         while (b - a > delta)

             {

                c = (a + b) / 2;

                if (f(a) * f(c) <= 0)   b = c;

                else a = c;

             }

          if (n == 0)  l = (a + b) / 2; else r = (a + b) / 2;

          }

       a = a + 0.1;

       n = n + 1;

   }

}


int main()

{

  double x, S, S0, h, a, b;

  /*Уровень А*/

  cout << "Метод прямоугольников" << endl;

  a = 0; b = 10; h = 0.01;

  S = 0; x = a;

  while (x < b)

     {

        S = S + f1A(x + h / 2) - f2A(x + h / 2);

        x = x + h;

     }

  S = h * S;

  cout << "Площадь " << endl;

  

  /*Уровень B*/

  cout << "Метод трапеций" << endl;

  interval(a, b, fB);

  S = 0; x = a; h = 0.01;

  while (x < b)

      {

         S = S + f1B(x) - f2B(x) + f1B(x + h) - f2B(x + h);

         x = x + h;

      }

  S = h * S / 2;

  cout << "Площадь " << S << endl;

  

  //Уровень C

  S0 = M_PI * 2 * 3;

  cout << "Метод трапеций" << endl;

  a = -2; b = 2; h = 2;

  do {

       S = 0; x = a; h = h / 2;  

       while (x < b)

          {

             S = S + f1C(x) - f2C(x) + f1C(x + h) - f2C(x + h);

             x = x + h;

          }

      S = h * S / 2;

      }

  while (fabs(S0 - S) / S0 > 0.0001);

  cout << "Площадь " << S << endl;

  cout << "Площадь по формуле " << S0 <

  cout << "Интервал дискретизации для 0.01% " << h << endl;

}