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