Составить программу для вычисления значения интеграла - 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
. - Конец программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д