Навигация

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

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

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

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

10 класс. П.70 Практическая работа №62. Решение уравнений методом деления отрезка пополам

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


Практическая работа №62. Решение уравнений методом методом деления отрезка пополам

Напишите программу, которая находит все решения заданного вам уравнения на интервале [-5;5].  Программа должна выполнить следующие действия:

1.       Определяет и выводит на экран интервалы, на которых расположены корни уравнения.

2.       На каждом интервале, используя метод перебора, ищет решение с точностью 0,001 и выводит полученные решения на экран.

Вычисление функции, стоящей в левой части уравнения, оформите в виде подпрограммы.

Уровень A. Интервалы, на которых расположены корни, можно найти с помощью электронных таблиц. Программа запрашивает границы очередного интервала и выводит найденный корень уравнения.

Пример:

Введите границы интервала:

1.5 2

Решение: 1.7201

Уровень B. Составить две программы, одна из которых выделяет все интервалы, на которых находятся корни, а вторая запрашивает границы очередного интервала и выводит найденный корень уравнения, а также число шагов, которые потребовались для достижения заданной точности.

Пример:

Введите границы интервала:

1.5 2

Решение: 1.7201

Число шагов: 8

Уровень C. Составить одну программу, которая работает полностью автоматически: достаточно ввести в программу функцию и запустить. Программа находит все интервалы, на которых расположены корни и уточняет решения. После того, как очередной интервал найден, программа выводит его на экран и, применяя метод деления отрезка пополам, уточняет решение и определяет необходимое для этого количество шагов.

Пример:

Интервал [-2;-1,5]

  Решение: -1.7201

  Число шагов: 8

Интервал [1,5;2]

  Решение: 1.7201

  Число шагов: 8 

Вариант 1. x3 - 8*x + 1 = sin(x)

 

program pr62ABC;

 

function f(x: real): real;

begin

  f := x * x * x - 8 * x + 1 - 5 * sin(x);

end;

 

const

  eps = 0.001;

 

var

  delta, a, b, c: real;

  k: integer;

 

begin

  //Уровень АB

  writeln('Введите границы интервала:');

  readln(a, b);

  k := 0;

  delta := 2 * eps;

  if (f(a) * f(b) > 0 ) then writeln('На промежутке может не быть корней')

  else begin

          while b - a > delta do

          begin

           k := k + 1;

           c := (a + b) / 2;

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

               then b := c

               else a := c;

          end;

          writeln('Решение: ', (a + b) / 2:6:3);

          writeln('Число шагов: ', k);

         end;

 

  //Уровень C

  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

      writeln('Интервал [', a, ';', a + 0.1, ']');

      k := 0;

      b := a + 0.1;

      delta := 2 * eps;

      while b - a > delta do

      begin

        k := k + 1;

        c := (a + b) / 2;

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

          then b := c

          else a := c;

      end;

      writeln('Решение: ', (a + b) / 2:6:3);

      writeln('Число шагов: ', k);

    end;

    a := a + 0.1;

  end;

end.

 

C++

#include [iostream]

#include [math.h]

using namespace std;

 

double f(double x)

{

  return x * x * x - 8 * x + 1 - 5 * sin(x);

}

 

  int main ()

  {

  double delta, a, b, c;

  double eps = 0.001;

  int k; 

  setlocale(LC_ALL, "Russian");

 

 //Уровень АB

  cout << "Введите границы интервала: ";

  cin >> a >> b;

  k = 0;

  delta = 2 * eps;  

  if (f(a) * f(b) > 0 ) cout << "На промежутке может не быть корней" << endl; 

  else {

         while (b - a > delta) 

         {

         k ++;

         c = (a + b) / 2;

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

         else a = c;

         }

         cout << "Решение: " << (a + b) / 2 << endl;

         cout << "Число шагов: " << k << endl;

        }

 

  //Уровень C

 
 a = -100;

  while (a <= 100) 

  {

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

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

    {

      cout << "Интервал [" << a << ";" << a + 0.1 << "]" << endl;

      k = 0;

      b = a + 0.1;

      delta = 2 * eps;

      while (b - a > delta)

      {

        k = k + 1;

        c = (a + b) / 2;

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

        else a = c;

      }

      cout << "Решение: " << (a + b) / 2 << endl;

      cout << "Число шагов: " << k << endl;

    }

    a += 0.1;

  };

  return 0;

}