Навигация

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

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

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

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

10 класс. П.70 Практическая работа №64. Вычисление длины кривой

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


Практическая работа №64. Вычисление длины кривой

//Уровень A. Найдите длину параболы y = x * x на интервале [0;10]  .

//Уровень B. Для примера «Полет мяча» вычислите длину траектории движения шарика

//           для углов вылета 35,5° и 65,8°. Сравните полученные результаты. 

//Уровень C. Постройте с помощью табличного процессора эллипс, который описывается уравнением

//           (x*x)/(a*a)+(y*y)/(b*b)=1  при a = 2 и b = 3.

//Напишите программу, которая вычисляет периметр этого эллипса с помощью дискретизации.

//Сравните ваш результат с тем, что получается по приближенной формуле Рамануджана:

//  L = Pi*|_3*(a+b)-sqrt((3*a+b)(a+3*b))_|

//Экспериментально определите наибольший интервал дискретизации, при котором ошибка

// численного метода (в сравнении с результатом, полученным по формуле Рамануджана)

// составляет не более 1%. 

   

PASCAL

program pr64ABC;


function fA(x: real): real;

begin

    fA := x * x;

end;


function fB(x,v0,alfa: real): real;

const g = 9.8;

var t: real;

begin

    if v0 = 0 then t := 0 else t := x / v0 * cos(alfa);

    fB := v0 * t * sin(alfa) - g * t * t / 2;

end;


function fC(x: real): real;

begin

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

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

end;


var

  x, y1, y2, L, L0, L1, L2, v0, h, alfa, a, b: real;


begin

  

  //Уровень А

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

  x:= a; 

  L:= 0;

  while x < b do begin

      y1:= fA(x);

      y2:= fA(x+h);

      L:= L + sqrt(h * h + (y2-y1) * (y2-y1)); 

      x:= x + h;

  end;

  writeln('Длина кривой ', L:10:3);


  //Уровень B

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

  x:= a; 

  L1:= 0;

  alfa := 35.5;

  v0 := 12;

  while x < b do begin

      y1:= fB(x,v0,alfa);

      y2:= fB(x+h,v0,alfa);

      L1:= L1 + sqrt(h * h + (y2-y1) * (y2-y1)); 

      x:= x + h;

  end;

  writeln('Длина кривой при ',alfa,'  ', L1:10:3);

  x:= a; 

  L1:= 0;

  alfa := 65.8;

  v0 := 12;

  while x < b do begin

      y1:= fB(x,v0,alfa);

      y2:= fB(x+h,v0,alfa);

      L2:= L2 + sqrt(h * h + (y2-y1) * (y2-y1)); 

      x:= x + h;

  end;

  writeln('Длина кривой при ',alfa,'  ', L2:10:3);


  //Уровень C

  L0 := PI * (3 * (2 + 3) - sqrt((3 * 2 + 3) * (2 + 3 * 3)));

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

  repeat

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

     while x < b do begin

         y1:= fC(x);

         y2:= fC(x+h);

         L:= L + sqrt(h * h + (y2-y1) * (y2-y1)); 

         x:= x + h;

     end;

     L := L * 2;

  until (abs(L0 - L) / L0 < 0.0001);

  

  writeln('Длина кривой ', L:10:3);

  writeln('Длина кривой по формуле', L0:8:3);

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

  

end.

 

C++

#include [iostream]

#include [math.h]

using namespace std;

 

float fA(float x)

{

    return (x * x);

}


float fB(float x, float v0, float alfa)

{  const float g = 9.8;

    float t;

    if (v0 = 0) t = 0; else t = x / v0 * cos(alfa);

    return (v0 * t * sin(alfa) - g * t * t / 2);

}


float fC(float x)

{

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

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

}


int main()

{

  float x, y1, y2, L, L0, L1, L2, v0, h, alfa, a, b;

  

  //Уровень А

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

  x = a; 

  L = 0;

  while (x < b) {

      y1 = fA(x);

      y2 = fA(x+h);

      L = L + sqrt(h * h + (y2-y1) * (y2-y1)); 

      x = x + h;

  }

  cout << "Длина кривой " << L << endl;


  //Уровень B

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

  x = a; 

  L1 = 0;

  alfa = 35.5;

  v0 = 12;

  while (x < b) {

      y1 = fB(x,v0,alfa);

      y2 = fB(x+h,v0,alfa);

      L1 = L1 + sqrt(h * h + (y2-y1) * (y2-y1)); 

      x = x + h;

  }

  cout << "Длина кривой при " << alfa << "  " << L1 << endl;

  x = a; 

  L1 = 0;

  alfa = 65.8;

  v0 = 12;

  while (x < b) {

      y1 = fB(x,v0,alfa);

      y2 = fB(x+h,v0,alfa);

      L2 = L2 + sqrt(h * h + (y2-y1) * (y2-y1)); 

      x = x + h;

  }

  cout << "Длина кривой при " << alfa << "  " << L2 << endl;


  //Уровень C

  L0 = M_PI * (3 * (2 + 3) - sqrt((3 * 2 + 3) * (2 + 3 * 3)));

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

  do

     { L = 0; x = a; h = h / 2;  

       while (x < b) {

           y1 = fC(x);

           y2 = fC(x+h);

           L = L + sqrt(h * h + (y2-y1) * (y2-y1)); 

           x = x + h;

       }

       L = L * 2;

    }

  while (fabs(L0 - L) / L0 > 0.0001);

  

  cout << "Длина кривой " << L << endl;

  cout << "Длина кривой по формуле " << L0 << endl;

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

 

  return 0;

}