Текст программы прилагаю. Но её необходимо доработать. я застопорилась. подтолкните. пожалуйста.
Условие задачи в следующем:"Составить программу, в которой
1. определить все корни уравнения (которое записано в задаче у меня)" на отрезке от -10 до 10.
2. вычислить определенный интеграл от х (i) до x(i+1). поинтегральная функция - это уравнение из пункта 1, x(i) x(i+1) - это два соседних корня заданного уравнения, i=1,2,3,..,n-1. n- число корней.
Указания: 1. при определении корней использовать метод сканирования с последующим уточнением решения методом хорд
2. определенные интегралы вычислять методом правых прямоугольников.
3. методы интегрирования и уточнения корней оформить в виде процедур или функций языка Пакаль.
4.Пределы интегрирования вводить не вручную, а запомнить результаты решения в виде массива и использовать для вычисления интеграла.
Вот.
Эта программа находит три корня уравнения= 1,3,7. Как их запомнить в виде массива? и как потом из этих трёх выбрать два для задания пределов интегрирования.
Найденные корни надо брать только из метода хорд. А как их ввести в процедуру Prav_pryam для ввода пределов интегрирования? Что-то не так. Если убрать процедуру нахождения интеграла, то всё идет как надо вроде. а в ней я нав. напортачила. если можно побыстрее.пож-ста.
Препод сказал, что нужно запомнить в массиве не сами корни, а их количество. Ну помоготе, прошу. В общем, все верно. но вот с этими массивами и затем вводами пределов из массива проблема.
Код:
uses crt;
const xh=-10;xk=10;n=100;e=0.001;
var i:integer; x,z,w,h:real;
Function f(x: real): real;
Begin
f:=x*x*x-11*x*x+31*x-21;
end;
procedure metod_scanirov(x:real);
var h:real;
begin clrscr;
writeln ('vvedite X=');
readln (z);
writeln ('vvedite pogreshnost H=');
readln (w);
if f(z+w)>f(z) then w:=-w;
repeat z:=z+w; until f(z+w)>f(z);
writeln ('1j koren po metodu scanirovaniya=',(z-w):2:1);
writeln ('2j koren po metodu scanirovaniya=',(z+w):2:1); readln;
end;
procedure metod_hord(a,b:real);
var t:integer; c1,c: real; m:array [1..3] of real;
begin
c:=a;
repeat c1:=c;
c:=a-(f(a)*(b-a))/(f(b)-f(a));
if (f(a)*f(c)<=0) then
b:=c else a:=c;
until abs (c1-c)<e;
writeln ('koren uravnenia po metodu hord = ',c:2:1);
m[t]:=c; writeln ('m=',m[t]:2:0);
writeln ('funkciya ot kornya=',c:2:1,' ravna F(',c:1:0,')= ',f(c):2:1);
readln; end;
procedure prav_pryam;
var i,t,n:integer; d,k,h,xb,s:real; m:array [1..3] of real;
begin
for t:=1 to 3 do read (m[t]);
d:=m[t]; k:=m[t+1];
h:=(d-k)/n; s:=0; xb:=d;
s:=0;
for i:=1 to n do begin x:=xb+i*h; s:=s+f(x)*h; end;
writeln ('integral ot',d:2:0,' do',k:2:0,' funkcii F (x) raven ',s:5:3);
readln; end;
begin
metod_scanirov(x);
x:=xh; h:=(xk-xh)/n;
for i:=1 to n do begin
if f(x)*f(x+h)<=0 then metod_hord (x,x+h); x:=x+h;
prav_pryam; end; end.