Паскаль. Основы программирования


Решение уравнений с одной переменной методом половинного деления - часть 2


Эту функцию мы устроим уже известным нам способом и назовем fx:

    Function fx(x : real) : real;

          begin

             fx := cos(x) - 0.1*x

          end;

В основной программе, естественно потребовать от пользователя ввода границ промежутка и шага. В качестве границ промежутка будут переменные a и b, а для шага - h (в качестве значения шага, при выполнении программы возьмем 0.1).

Для подсчета числа промежутков будет служить счетчик k. Первоначальное значение левой границы: x1:=a; а первая правая граница будет равна сумме левой границы и шага: x2:=x1+h; значение функции в левой границе первого промежутка: y1:=fx(x1).

Последовательно к левой границе добавляется шаг h и так должно продолжаться пока

это значение не станет равно правой границе данного промежутка b. Значит, необходимо организовать цикл "пока": while x2 <= b do

В цикле, вычислять значение функции в точке x2, которая уже получилась от увеличения x1 на h: y2 := fx(x2).

Теперь следует проверить знак произведения значений функций на концах промежутка (fx(x1)*fx(x2)) и, если оно отрицательно, то на этом промежутке будет существовать корень, а значит надо выдать на экран координаты этого промежутка и его номер:

         if y1*y2 < 0 then

                               begin

                                   k := k + 1;

                                   writeln(k,'-й корень на [',x1:6:4,'; ',x2:6:4,']')

                               end;

Далее следует продолжить движение к правой границе, а для этого выполнить следующие операторы:

x1 := x2; x2 := x1 + h; y1 := y2

Вот и вся несложная тактика этой программы. Полностью она приводится ниже:

Program

Separation_root; { Программа отделения корней }

    uses WinCrt;

    var

        a, b, h, x1, x2, y1, y2 : real;

        k : integer;

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

    Function fx(x : real) : real;

       begin

          fx := cos(x) - 0.1*x

       end;




Начало  Назад  Вперед