На заданном отрезке найти все корни уравнения с заданной точностью - Free Pascal

Узнай цену своей работы

Формулировка задачи:

На заданном отрезке найти все корни уравнения f(x)=0 с точностью . . Вот код, но при вводе "" программа виснет. Помогите исправить.
  const h=0.1;
  var a,b,C,D,e,XN,XK,S: real; 
  K : integer;
  function F(x: real): real;
  begin
    F:= exp(x)- cos(x)*cos(x)-0.1
  end;
begin
  repeat
    write('a='); 
readln(A); 
write('b>a   b='); 
readln(B);
readln(E)
  until (A<B);
  K:=0; C:=A;
  repeat
    D:=C+H;
    if F(C)*F(D)<=0 then
    begin
      XN:=C; XK:=D; K:=1;
      while ABS(XK-XN)>E do
    begin S:=(XN+XK)/2;
            if F(XN)*F(S)<=0 then XK:=S 
else XN:=S
      end;
       write((XK+XN)/2:10:6);
    end;
    C:=D
  until C+H>B;
   if K=0 then writeln('korney net')  ;
   readln
end.

Решение задачи: «На заданном отрезке найти все корни уравнения с заданной точностью»

textual
Листинг программы
 const h=0.1;
  var a,b,C,D,e,XN,XK,S: extended;
  K : integer;
  function F(x: extended): extended;
  begin
    F:= exp(x)- cos(x)*cos(x)-0.1
  end;
begin
  repeat
    write('a=');
readln(A);
write('b>a   b=');
readln(B);
write('epsilon=');
readln(E)
  until (A<B);
  K:=0; C:=A;
  repeat
    D:=C+H;
    if F(C)*F(D)<=(1e-32) then
    begin
      XN:=C; XK:=D; K:=1;
      while ABS(XK-XN)>E do
    begin S:=(XN+XK)/2;
            if F(XN)*F(S)<=(1e-32) then XK:=S
else XN:=S
      end;
       write((XK+XN)/2:10:6);
    end;
    C:=D
  until C+H>B;
   if K<(1e-32) then writeln('korney net')  ;
   readln
end.

Объяснение кода листинга программы

  1. Объявлены константы и переменные:
    • h = 0.1 (поиск корней осуществляется с точностью 0.1)
    • a, b, C, D, e, XN, XK, S: extended (это тип данных, подобный float, но с большей точностью)
    • K: integer (счетчик, увеличиваемый на 1 при каждом найденном корне)
    • F(x): extended (функция, значение которой будет приближенно равно 0 при нахождении корня)
  2. Задаются начальные значения a и b (с помощью функции readln вводится значение a, затем с помощью функции readln вводится значение b)
  3. Задается точность e (с помощью функции readln вводится значение e)
  4. Пока a < b выполняется цикл:
    • Задаются значения C и D (C = a, D = a + h)
    • Если значение функции F(C) * F(D) меньше или равно 1e-32 (это очень маленькое число, близкое к нулю), то это означает, что между точками C и D находится корень, и цикл изменяет значения C и D, чтобы они стали равными XN и XK соответственно
    • Если значение функции F(C) * F(D) больше 1e-32, то значение C заменяется на значение D, и цикл продолжает работу с новыми значениями C и D
  5. Если корни не найдены (т.е. K < 1e-32), то выводится сообщение korney net
  6. Ввод/вывод осуществляется с помощью функции readln (для ввода) и функции writeln (для вывода)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.154 из 5
Похожие ответы