Программа


{ ЛИАП
  Найти наименьший по модулю корень
  методом хорд }
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.

Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию