Программа
Program HalfDivision;{ Поиск корня уравнения методом половинного деления
(метод дихотомии) }
Var Result:real; { Корень }
a,b:real; { Левая и правая границы интервала локализации корня }
Function F(x:real):real; { Вычисление функции }
Begin
F:=(Sqr(Sqr(x))-1)*x-2
End;
Function Root(a,b:real):real; { Функция нахождения корня }
const Eps=0.01; { Точность вычислений }
var c:real; { Средняя точка интервала локализации корня }
Iteration:longint; { Счетчик итераций }
Begin
Iteration:=0; { Сброс счетчика итераций }
while abs(b-a)>Eps do { Сужение интервала до заданной точности }
begin
Inc(Iteration); { Набор числа итераций }
c:=(a+b)/2; { Определение средней точки интервала локализации корня }
if (c=a)or(c=b)
then begin a:=c; b:=c end { Блокирование сбоя при потере точности }
else if F(a)*F(c)<0 { Если функция меняет знак на левом участке }
then b:=c { то переопределение правой границы }
else if F(b)*F(c)<0
{ иначе - если функция меняет знак на правом участке }
then a:=c { то переопределение левой границы }
else begin
{ Блокирование сбоя при потере точности
или случайном нахождении корня }
if F(a)=0 then begin c:=a; b:=a end;
if F(b)=0 then begin c:=b; a:=b end;
if F(a)*F(b)*F(c)=0 then begin a:=c; b:=c end
end
end;
Root:=(a+b)/2; { Определение значения функции }
WriteLn('Число итераций ',Iteration);
End;
BEGIN
{ Ввод интервала локализации корня: }
Write('Введите левую границу интервала локализации корня ');
ReadLn(a);
Write('Введите правую границу интервала локализации корня ');
ReadLn(b);
Result:=Root(a,b); { Вычисление корня }
writeln('x=',Result,' F(x)=',F(Result)) { Вывод корня и проверки }
END.
Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию