Программа
{ ЛИАП
Найти наименьший по модулю корень
методом хорд }
Program ChordForEguation;
Const E=2e-4; { Точность вычислений }
Var A,B,C, { Параметры уравнения }
xLeft,xRight,xCentre, { Левая, правая границы интервала
локализации корня и промежуточная точка }
FLeft,FRight,FCentre:real; { Значения функции на левой и правой границах
интервала локализации корня и в помежуточной точке }
Function F(A,B,C,x:real):real; { Вычисление функции }
Begin
F:=A*Cos(x+B)+C*x*x*x
End;
BEGIN
Write('? A='); { Вывод приглашения ввести параметр "A" }
ReadLn(A); { Ввод параметра "A" }
Write('? B='); { Вывод приглашения ввести параметр "B" }
ReadLn(B); { Ввод параметра "B" }
Write('? C='); { Вывод приглашения ввести параметр "C" }
ReadLn(C); { Ввод параметра "C" }
xRight:=Pi/2; xLeft:=-xRight; { Начальная локализация корня }
while Abs(xRight-xLeft)>E do
{ Цикл сужения интервала до выполнения критерия точности }
begin
FLeft:=F(A,B,C,xLeft);
{ Определение значения функции на левой границе интервала локализации }
FRight:=F(A,B,C,xRight);
{ Определение значения функции на правой границе интервала локализации }
xCentre:=xLeft+(xRight-xLeft)*FLeft/(FLeft-FRight);
{ Вычиление точки пересечения хорды с осью абсцисс }
if (xCentre=xLeft)or(xCentre=xRight)
then begin { Блокирование зависания программы при потере точности }
xRight:=xCentre;
xLeft:=xCentre
end;
FCentre:=F(A,B,C,xCentre);
{ Определение значения функции в средней точке интервала локализации }
{ Переопределение границ интервала локализации
по условию сохранения знака функции на данном подинтервале: }
if FCentre*FRight>0 { Если функция сохраняет знак
на правой части интервала }
then xRight:=xCentre { то переопределение правой границы }
else xLeft:=xCentre { иначе переопределение левой границы }
end;
WriteLn('x=',(xRight+xLeft)/2,' F(x)=',F(A,B,C,(xRight+xLeft)/2))
{ Ввывод результата }
END.
Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию