На заданном отрезке найти все корни уравнения - Free Pascal
Формулировка задачи:
На заданном отрезке найти все корни уравнения f(x)=0 с точностью exp:
exp(x)-cos*cos*2-0.1=0
и привести графики,выполненные в табличном процессоре MS Excel.
Помогите пожалуйста найти ошибки..или доделать задачу..
Program laba5;
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*cos*x-0.1;
end;
begin
repeat
write ('a=');
readln(a);
write('b>a b=');
readln(b);
write ('0<e<1');
readln(e);
until (a<b) and (e>0) and (e<1);
k:=0;
c:=a;
write ((xk+xn)/2:10:6);
end;
c:=d
until c+h>b;
if k=0 then
writeln('корней нет');
end.Решение задачи: «На заданном отрезке найти все корни уравнения»
textual
Листинг программы
uses crt;
function F(x:real):real;
begin
F:=exp(x)-sqr(cos(x))-0.1;
end;
function Bisec(a,b,e:real):real;
var x,c:real;
begin
repeat
c:=(a+b)/2;
if F(a)*F(c)<0 then b:=c
else a:=c;
until b-a<e;
Bisec:=(a+b)/2;
end;
var x,x1,x2,dx,x11,x12,eps:real;
i:integer;
begin
clrscr;
x1:=-2;{интервал для поиска корней}
x2:=1;
dx:=0.1; {шаг для поиска интервалов}
eps:=0.0001;{точность определения корней}
x:=x1;
i:=0;
while x<=x2 do
begin
x11:=x;
x12:=x+dx;
if F(x11)*F(x12)<0 then{если знак на концах интервала разный}
begin
i:=i+1; {сть корень номер i}
writeln('X',i,'=',Bisec(x11,x12,eps):8:5);{находим его методом бисекции}
end;
x:=x+dx;
end;
readln
end.
Объяснение кода листинга программы
- Начинается с объявления функций и переменных.
- Используется функция F, которая представляет собой функцию, которую нужно решить.
- Используется функция Bisec, которая используется для разбиения интервала на две части.
- Переменные x, a и b используются для хранения текущего значения, нижней и верхней границ интервала соответственно.
- Используются переменные dx, eps и i для хранения шага, точности и счетчика корней соответственно.
- Цикл while используется для перебора всех значений x в заданном интервале.
- Внутри цикла определяются значения x11 и x12, которые представляют собой границы текущего интервала.
- Если знак функции F(x11) и F(x12) разный, то это означает, что в этом интервале есть корень, и он находится с помощью функции Bisec.
- Корень и его значение выводятся на экран.
- После цикла программа завершается.