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

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

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

На заданном отрезке найти все корни уравнения f(x)=0 с точностью . . Вот код, но при вводе "" программа виснет. Помогите исправить.
Листинг программы
  1. const h=0.1;
  2. var a,b,C,D,e,XN,XK,S: real;
  3. K : integer;
  4. function F(x: real): real;
  5. begin
  6. F:= exp(x)- cos(x)*cos(x)-0.1
  7. end;
  8. begin
  9. repeat
  10. write('a=');
  11. readln(A);
  12. write('b>a b=');
  13. readln(B);
  14. readln(E)
  15. until (A<B);
  16. K:=0; C:=A;
  17. repeat
  18. D:=C+H;
  19. if F(C)*F(D)<=0 then
  20. begin
  21. XN:=C; XK:=D; K:=1;
  22. while ABS(XK-XN)>E do
  23. begin S:=(XN+XK)/2;
  24. if F(XN)*F(S)<=0 then XK:=S
  25. else XN:=S
  26. end;
  27. write((XK+XN)/2:10:6);
  28. end;
  29. C:=D
  30. until C+H>B;
  31. if K=0 then writeln('korney net') ;
  32. readln
  33. end.

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

textual
Листинг программы
  1.  const h=0.1;
  2.   var a,b,C,D,e,XN,XK,S: extended;
  3.   K : integer;
  4.   function F(x: extended): extended;
  5.   begin
  6.     F:= exp(x)- cos(x)*cos(x)-0.1
  7.   end;
  8. begin
  9.   repeat
  10.     write('a=');
  11. readln(A);
  12. write('b>a   b=');
  13. readln(B);
  14. write('epsilon=');
  15. readln(E)
  16.   until (A<B);
  17.   K:=0; C:=A;
  18.   repeat
  19.     D:=C+H;
  20.     if F(C)*F(D)<=(1e-32) then
  21.     begin
  22.       XN:=C; XK:=D; K:=1;
  23.       while ABS(XK-XN)>E do
  24.     begin S:=(XN+XK)/2;
  25.             if F(XN)*F(S)<=(1e-32) then XK:=S
  26. else XN:=S
  27.       end;
  28.        write((XK+XN)/2:10:6);
  29.     end;
  30.     C:=D
  31.   until C+H>B;
  32.    if K<(1e-32) then writeln('korney net')  ;
  33.    readln
  34. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы