Составить программу для вычисления значения интеграла - Turbo Pascal
Формулировка задачи:
Помогите пожалуйста составить программу на языке Turbo Pascal 7.0 вычисления значения интеграла на интервале [a, b] для функции, заданной графически. Значение интеграла вычислить приближённо по итерационной формуле левых прямоугольников:
где h=(b-a)/n - величина шага между двумя соседними точками разбиения интервала интегрирования; fi = f(xi) - значение функции в точке xi = a+h(i-1); i = 1, 2, ..., n.
Вычисления закончить при выполнении условия |In-I2n| < z, где z>0 - достаточно малое значение, задаваемое пользователем (точность вычислений). Здесь In, I2n - значения интеграла, вычисленные по (1) при количестве интервалов разбиения n и 2n соответственно.
Функция:
Решение задачи: «Составить программу для вычисления значения интеграла»
textual
Листинг программы
- uses crt;
- var r,a,b,z,h,xi,fi,s1,s2:real;
- n,i:integer;
- begin
- repeat
- write('Введите радиус R>0 R=');
- readln(r);
- until r>0;
- repeat
- write('Введите левый край интервала a>=',-2*r:0:1,' a=');
- readln(a);
- until a>=-2*r;
- repeat
- write('Введите правый край интервала b>',a:0:1,' b=');
- readln(b);
- until b>a;
- repeat
- write('Введите число разбиений n>1 n=');
- readln(n);
- until n>1;
- repeat
- write('Введите точность 0<z<1 e=');
- readln(z);
- until (z>0)and(z<1);
- s1:=0;
- s2:=2*z;
- repeat
- s1:=s2;
- h:=(b-a)/n;
- s2:=0;
- for i:=1 to n do
- begin
- xi:=a+(i-1)*h;
- if xi<=-r then fi:=xi+r
- else if xi<=r then fi:=sqrt(r*r-xi*xi)
- else if xi<=0 then fi:=sqrt(r*r-sqr(xi+r))
- else fi:=0.5*xi-2*r;
- s2:=s2+fi*h;
- end;
- n:=n*2;
- until abs(s1-s2)<z;
- writeln('Интеграл на отрезке [',a:0:1,';',b:0:1,']=',s2:0:4);
- end.
Объяснение кода листинга программы
- Создается переменная
r
, которая предназначена для хранения значения радиуса. - Создается переменная
a
, которая предназначена для хранения значения левого края интервала. - Создается переменная
b
, которая предназначена для хранения значения правого края интервала. - Создается переменная
z
, которая предназначена для хранения значения точности. - Выполняется цикл
repeat
, который предназначен для получения значения радиуса, левого и правого краев интервала, а также числа разбиений и точности. - Внутри цикла
repeat
переменныеr
,a
,b
иz
считываются из входных данных. - Выполняется проверка на корректность введенных значений: радиус должен быть больше нуля, левый край интервала должен быть больше или равен минус двум радиусам, правый край интервала должен быть больше левого края, число разбиений должно быть больше единицы, а точность должна быть меньше единицы.
- Если все условия выполняются, то присваиваются переменным
s1
иs2
начальные значения:s1
равна 0, аs2
равна 2*z. - Вычисляется шаг
h
для разбиения интервала на отрезки. - Выполняется цикл
for
, который предназначен для вычисления значений интеграла на каждом отрезке интервала. - Внутри цикла
for
переменнойxi
присваивается значение левого края интервала, увеличенное на текущий шагh
. - Вычисляется значение
fi
, которое является произведением числаi
и шагаh
. - Проверяется условие, при котором
xi
меньше или равно минус радиусуr
. Если это условие выполняется, то значениеfi
присваивается значениюxi
плюсr
. - Если условие из предыдущего пункта не выполняется, то проверяется, находится ли
xi
внутри интервала отr
доa
. Если это условие выполняется, то значениеfi
вычисляется как квадратный корень из разности квадратовr
иxi
. - Если условие из предыдущего пункта не выполняется, то проверяется, находится ли
xi
внутри интервала отa
до0
. Если это условие выполняется, то значениеfi
вычисляется как половинаxi
минус2*r
. - Значение
s2
увеличивается на произведениеfi
и шагаh
. - После завершения цикла
for
выполняется проверка на изменение значенияs1
иs2
. Если изменение превышает заданную точностьz
, то значениеn
удваивается. - Выводится значение интеграла на отрезке интервала [
a
,b
] с помощью функцииwriteln
. - Выполняется цикл
repeat
, который предназначен для повторного вычисления значения интеграла с новыми значениямиr
,a
,b
иz
. - Конец программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д