Консультация № 184777
13.12.2011, 18:05
114.68 руб.
0 29 1
Здравствуйте! Прошу помощи в следующем вопросе:
Ранее в запросе №184598 была составлен программа тему:
"Интегрирование функции, заданной графически методом левых прямоугольников".

Где было необходимо составить программу на языке Borland Pascal для вычисления значения интеграла на интервале [a, b] для функции, заданной графически. Значение интеграла вычислить приближённо по итерационной формуле левых прямоугольников:
(1)
и где h=(b-a)/n - величина шага между двумя соседними точками разбиения интервала интегрирования; fi = f(xi) - значение функции в точке xi = a+h(i-1); i = 1,2,...n.

Вычисления надо было закончить при выполнении условия l In-In2 l < e (эпсилон), где e>0 - достаточно малое значение, задаваемое пользователем (точность вычислений). Здесь In, I2n - значения интеграла, вычисленные по (1) при количестве интервалов разбиения n и 2n соответственно.

Численные значения всех величин, участвующих в вычислениях, надо было считать параметрами программы, и определить их путём ввода.

График представлен на рисунке:

Код:
program graf_fun;
uses crt;
var
E,a,b,s,h,R,k,x,d,In2,In1:real;
i:integer;
n:longint;
begin {ввод исходных данных}
clrscr;
writeln ('Программа предназначена для вычисления значения интеграла');
writeln ('на интервале [a,b], для функции заданной графически');
writeln;
In1:=0;
repeat
write('Введите величину разбиения n='); readln(n);
if n<=0 then writeln ('n должно быть больше 0. Повторите ввод! ');
until (n>0);
repeat
write('Введите границу интервала вычислений a: '); readln(a);
write('Введите границу интервала вычислений b: '); readln(b);
if not (a<b) then writeln ('a должно быть меньше b. Повторите ввод! ');
until (a<b);
repeat
write('Введите радиус R (R>0): '); readln(r);
if R<=0 then writeln ('R должно быть больше 0. Повторите ввод! ');
until (R>0);
repeat
write('Введите d (d<0): '); readln(d);
if d>=0 then writeln ('d должно быть меньше 0. Повторите ввод! ');
until (d<0);
repeat
write('Введите k (k>0): '); readln(k);
if k<=0 then writeln ('k должно быть больше 0. Повторите ввод! ');
until (k>0);
repeat
write('Введите точность вычисления интеграла E (E>0): '); readln(E);
if E<=0 then writeln ('E должно быть больше 0. Повторите ввод! ');
until (E>0);
repeat
begin
h:=(b-a)/n; {расчет шага изменения аргумента}
s:=0;
for i:=0 to n-1 do
begin
x:=a+i*h; {приращение аргумента}
if x<=-2*R+d then s:=s+R{сумма значений функции на отрезке [a,b]}
else if x<d then s:=s+R-SQRT(sqr(R)-sqr(x+R-d))
else if x<k then s:=s-x+k
else if x<k+2*R then s:=s-sqrt(sqr(R)-sqr(x-k-R))
else s:=s+0;
end;
In2:=In1; {сохранение предыдущего значения интеграла}
n:=n*2;
In1:=h*s; {расчет интеграла}
end until (abs(In1-In2)<E);
writeln('Результат rez=',In1);
end.


Суть этого вопроса в следующем:
По данной программе необходимо провести:
1. Математическая формулировка задачи;
2. Численный метод решения.

Для примера выполнения могу привести следующий документ, который можно скачать по ссылке представленной ниже:
Пример оформления поставленной задачи

Обсуждение

давно
Академик
320937
2216
13.12.2011, 22:12
общий
Добрый вечер!
Пример оформления поставленной задачи
Просто картинка
Неизвестный
13.12.2011, 22:16
общий
по ссылке не документ а фото графика

По данной программе необходимо провести:
1. Математическая формулировка задачи;
Ответ: тут все есть
2. Численный метод решения.
Ответ: если не ошибаюсь это простое решение в ручную или это как раз обьяснение того алгоритма что я сделал для того вопроса?
Неизвестный
13.12.2011, 22:21
общий
Адресаты:
может автор имелл ввиду этот фаил?
вот
это взято с вопроса 184779
Неизвестный
13.12.2011, 22:50
общий
Извините, вот ссылка на пример решения: Пример решения
p.s. На вопросы нужно ответить более подробно... и в численном методе решить на примере и с подробными объяснениями...
Желательно чтобы ответ был полным (в общем на 2 вопроса от 2 и более страниц)... Материальное вознаграждение в размере от 100р гарантирую...
Неизвестный
14.12.2011, 16:29
общий
это ответ
Здравствуйте, Посетитель - 386678!
1)Математическая формулировка задачи
Пусть требуется определить значение интеграла функции на отрезке [a,b] . Этот отрезок делится точками x0,x1,x2...xn на n равных отрезков длиной
h=(b-a)/n.
Обозначим через y0,y1,y2....yn значение функции в точках x0,x1,x2...xn.
Далее составляем суммы y0*h+y1*h+....+yn*h.
Каждая из сумм — интегральная сумма функции f(x) и поэтому приближённо выражает интеграл.




2)Численный метод решения.
Требуется вычислить определенный интеграл на интервале [a,b] методом левых прямоугольников. Такое вычисление следует продолжать, пока не будет найдено приблеженное значение интеграла заданной точности e. Как только модуль разницы между значением интеграла и значения интеграла на предыдущем шаге меньше точности - завершаем вычисление. Тоисть |I1-I2|<e. Поскольку функция задана графически, то необходимо определять её на неких интервалах. Такими интервалами в нашем случае являются :
1)x<=-2*R+d
2)x<d
3)x<k
4)x<k+2*R
5)x>=k+2*R
На каждом интервале функция будет соответственно принимать вид:
1)y=R
2)y=R-SQRT(sqr(R)-sqr(x+R-d))
3)y=-x+k
4)y=-sqrt(sqr(R)-sqr(x-k-R))
5)y=0
где k,d,r-определенные значения на графике функции.
5
Неизвестный
14.12.2011, 16:32
общий
14.12.2011, 16:33
Цитата: 386678
Желательно чтобы ответ был полным (в общем на 2 вопроса от 2 и более страниц)... Материальное вознаграждение в размере от 100р гарантирую...

не знаю каким шрифтом надо писать, чтобы написать вычисление и мат. постановку задачи. Метод довольно прост и решение не такое сложное для подобного метода. Если будет надо то можно очень детально расписать каждый аспект и везде расставить запятые и знаки функции, как обычно делают студенты-первокурсники, которые пишут спецификации к программам.
Неизвестный
14.12.2011, 17:51
общий
Если можно распишите пожалуйста каждый аспект... Буду признателен...
Неизвестный
14.12.2011, 19:53
общий
к 23.00 по МСК сделаю
Неизвестный
14.12.2011, 20:01
общий
ок, спасибо...
Неизвестный
14.12.2011, 22:46
общий
1)Математическая формулировка задачи
Пусть требуется определить значение интеграла функции f(x) на отрезке [a,b] . Этот отрезок делится точками x0,x1,x2...xn на n равных отрезков длиной
h=(b-a)/n.
Обозначим через y0,y1,y2....yn значение функции f(x) в точках x0,x1,x2...xn.
Далее составляем суммы y0*h+y1*h+....+yn*h.
Каждая из сумм — интегральная сумма функции f(x) для [a,b] и поэтому приближённо выражает интеграл.
Как бы на этом теория задачи кончается.


2)Численный метод решения.
Требуется вычислить определенный интеграл на интервале [a,b] методом левых прямоугольников. Такое вычисление следует продолжать, пока не будет найдено приблеженное значение интеграла заданной точности e. Как только модуль разницы между значением интеграла и значения интеграла на предыдущем шаге меньше точности - завершаем вычисление. Тоисть |I1-I2|<e. Поскольку функция задана графически, то необходимо определять её на неких интервалах. Такими интервалами в нашем случае являются :
1)x<=-2*R+d
2)x<d
3)x<k
4)x<k+2*R
5)x>=k+2*R
На каждом интервале функция будет соответственно принимать вид:
1)y=R
2)y=R-SQRT(sqr(R)-sqr(x+R-d))
3)y=-x+k
4)y=-sqrt(sqr(R)-sqr(x-k-R))
5)y=0
где k,d,r-определенные значения на графике функции.
После того как определен y - значение функции в точке х, считается интегральная сумма.

По просьбе автора:
Инструкция для программиста для данной программы.
Поскольку это инструкция для *программиста*то я думаю будет уместно сделать комментарии в коде.
Код:
program graf_fun;
uses crt;
var
E,a,b,s,h,R,k,x,d,In2,In1:real;
i:integer;
n:longint;
begin {ввод исходных данных}
clrscr;
writeln ('Программа предназначена для вычисления значения интеграла');
writeln ('на интервале [a,b], для функции заданной графически');
writeln;
In1:=0; {считаем что значение интеграла 0}
repeat

{далее следует блок кода ввода корректных данных в программу}

write('Введите величину разбиения n='); readln(n);
if n<=0 then writeln ('n должно быть больше 0. Повторите ввод! ');
until (n>0);
repeat
write('Введите границу интервала вычислений a: '); readln(a);
write('Введите границу интервала вычислений b: '); readln(b);
if not (a<b) then writeln ('a должно быть меньше b. Повторите ввод! ');
until (a<b);
repeat
write('Введите радиус R (R>0): '); readln(r);
if R<=0 then writeln ('R должно быть больше 0. Повторите ввод! ');
until (R>0);
repeat
write('Введите d (d<0): '); readln(d);
if d>=0 then writeln ('d должно быть меньше 0. Повторите ввод! ');
until (d<0);
repeat
write('Введите k (k>0): '); readln(k);
if k<=0 then writeln ('k должно быть больше 0. Повторите ввод! ');
until (k>0);
repeat
write('Введите точность вычисления интеграла E (E>0): '); readln(E);
if E<=0 then writeln ('E должно быть больше 0. Повторите ввод! ');
until (E>0);
{----------------------------------------------------------}
repeat
begin
h:=(b-a)/n; {расчет шага изменения аргумента}
s:=0; {интеагральная сумма}
for i:=0 to n-1 do {расчет функции y=f(x) }
begin
x:=a+i*h; {приращение аргумента}
if x<=-2*R+d then s:=s+R{сумма значений функции на отрезке [a,b]}
else if x<d then s:=s+R-SQRT(sqr(R)-sqr(x+R-d))
else if x<k then s:=s-x+k
else if x<k+2*R then s:=s-sqrt(sqr(R)-sqr(x-k-R))
else s:=s+0;
end;
In2:=In1; {сохранение предыдущего значения интеграла}
n:=n*2; {наращиваем шаг}
In1:=h*s; {расчет интеграла}
end until (abs(In1-In2)<E); {проверка точности вычисления}
writeln('Результат rez=',In1);
end.
Неизвестный
18.12.2011, 03:28
общий
По просьбе автора:
Так как численные методы в численном интегрировании носят характер приближенных, то результаты итоговые должны почти совпадать....

Рассмотрим решение вручную

Интеграл определенный на интервале [0,1] функции cos(x)
Вполне решаемый интеграл:
1)находим первообразную cos(x)=sin(x);
2)По формуле Ньютона-Лейбница

Имеем sin(1)-sin(0)=0.8414709;

3)Теперь проведем тест программы для данного интеграла:
Убрал лишний ввод и сделал решение функции заданной уравнение y=f(x) а не графически
Код:
program graf_fun;
var
E,a,b,s,h,R,k,x,d,In2,In1:real;
i:integer;
n:longint;
begin {ввод исходных данных}
writeln;
In1:=0; {считаем что значение интеграла 0}
repeat
{далее следует блок кода ввода корректных данных в программу}
write('Введите величину разбиения n='); readln(n);
if n<=0 then writeln ('n должно быть больше 0. Повторите ввод! ');
until (n>0);
repeat
write('Введите границу интервала вычислений a: '); readln(a);
write('Введите границу интервала вычислений b: '); readln(b);
if not (a<b) then writeln ('a должно быть меньше b. Повторите ввод! ');
until (a<b);
repeat
write('Введите точность вычисления интеграла E (E>0): '); readln(E);
if E<=0 then writeln ('E должно быть больше 0. Повторите ввод! ');
until (E>0);
{----------------------------------------------------------}
repeat
begin
h:=(b-a)/n; {расчет шага изменения аргумента}
s:=0; {интеагральная сумма}
for i:=0 to n-1 do {расчет функции y=f(x) }
begin
x:=a+i*h; {приращение аргумента}
s:=cos(x)+s; {вот наша функция новая....не стал выность в отдельную процедуру}
end;
In2:=In1; {сохранение предыдущего значения интеграла}
n:=n*2; {наращиваем шаг}
In1:=h*s; {расчет интеграла}
end until (abs(In1-In2)<E); {проверка точности вычисления}
writeln('Результат rez=',In1,' rez sin(1)=', sin(1));
end.


4)Резьльтат такой программы:
Код:

Введите величину разбиения n=10
Введите границу интервала вычислений a: 0
Введите границу интервала вычислений b: 1
Введите точность вычисления интеграла E (E>0): 0.000001
Результат rez=0.841471686250257 rez sin(1)=0.841470984807897


5)Как видно программа соответствует решению вручную.

Теперь о самом методе:
Вот теоретическая база
1)вики
2)алгмет
Надеюсь в теории все потянто будет после прочтения материалов.

Если чтото упустил то скажите ибо писал все это в пол четвертого и глаза слипались
Неизвестный
18.12.2011, 14:47
общий
Конечно можно просчитать каждую точку и найти интеграл, но это решение будет уже не стандартное(не по формуле Ньютона - Лейбница) а уже конкретно ручные итерации метода. Это рутина, но можно все автоматизировать и заставить программу показывать промежуточные результаты, по которым можно судить чтото. Ибо смотрите.....
Наш исходный интеграл это сумма интегралов на участках всего графика, где меняется функция. Можно попробовать высчитать каждый интеграл вручную и в итоге суммировать все.
Если вас интересует это, то я напишу программу для расчета всего этого.
Неизвестный
18.12.2011, 14:56
общий
А не легче будет если находить функцию в ручную, на каком нибудь малом промежутке (о и 1 например)???
Неизвестный
18.12.2011, 14:58
общий
посудите сами....у вас график дан функции....на промежутке от 0 до 1 он будет тока 1 вид функции иметь....вы просто упростите мою задачу по вычислению всех промежутков к 1 промежутку.
Неизвестный
18.12.2011, 15:01
общий
правда все зависит от числа k - в другом случае может быть что он меняется....до 2х максимум промежутков упрощается задача.
Неизвестный
18.12.2011, 15:09
общий
и решая на промежутко от 0 до 1 мы тока часть решения получим...
Неизвестный
18.12.2011, 15:12
общий
Это всего лишь аналитическая работа, так что главное здесь, чтобы ответы программы совпадали с результатами ручного ввода, не важно на каких интервалах...
Неизвестный
18.12.2011, 15:20
общий
Цитата: 386678
Это всего лишь аналитическая работа, так что главное здесь, чтобы ответы программы совпадали с результатами ручного ввода, не важно на каких интервалах...

хорошо сделаю вам ручное решение на интервале от 0 до 1 и при этом k>1....значит функция не меняется
Неизвестный
18.12.2011, 15:57
общий
18.12.2011, 16:03
Так ка функция задана графически, то требуется определить какое уравнение соответствует на интервале от 0 до 1..
На первый взгляд это прямая, значит её уравнение в общем виде это y=kx+b, где k и b числа, задающие направление роста/убывания графика по осям.
Имеем уравнение y=kx+b.....Чтобы определить какое тут уравнение нужно определить через какие точки проходит функция.

Как видно из графика это точки (b,R) и (k,0).
Поскольку k,b,R - это значениея, которые задаются в программе путем ввода с клавиатуры, значит предположим, что
k=2,
b=-1,
R=3.
Далее составим систему
3=-1*k+b;
0=2*k+b;
Для начада выразим b в 2м уравнении:
3=-1*k+b;
b=-2k;
Подставляем и находим k
3=-1k-2k;
3=-3k;
k=-1;
Теперь найдем b
b=-2k=2;
Исходное уравнение этого промежутка это y=-x+2;
Теперь зная уравнение решаем интеграл по старой доброй форумуле Ньютона-Лейбница:
Первообразная -x+2=-1/2*x2+2x
Теперь считаем на интервале от 0 до 1:
-1/2*12+2*1+1/2*0+2*0=-1/2+2=1.5;

Теперь сверим работу прогрограммы на данном интервале и для данной функции:
Код:
program graf_fun;
const k=2;
var
E,a,b,s,h,R,x,d,In2,In1:real;
i:integer;
n:longint;
begin {ввод исходных данных}
writeln;
In1:=0; {считаем что значение интеграла 0}
repeat
{далее следует блок кода ввода корректных данных в программу}
write('Введите величину разбиения n='); readln(n);
if n<=0 then writeln ('n должно быть больше 0. Повторите ввод! ');
until (n>0);
repeat
write('Введите границу интервала вычислений a: '); readln(a);
write('Введите границу интервала вычислений b: '); readln(b);
if not (a<b) then writeln ('a должно быть меньше b. Повторите ввод! ');
until (a<b);
repeat
write('Введите точность вычисления интеграла E (E>0): '); readln(E);
if E<=0 then writeln ('E должно быть больше 0. Повторите ввод! ');
until (E>0);
{----------------------------------------------------------}
repeat
begin
h:=(b-a)/n; {расчет шага изменения аргумента}
s:=0; {интеагральная сумма}
for i:=0 to n-1 do {расчет функции y=f(x) }
begin
x:=a+i*h; {приращение аргумента}
s:=s-x+2; {вот наша функция новая....не стал выность в отдельную процедуру}
end;
In2:=In1; {сохранение предыдущего значения интеграла}
n:=n*2; {наращиваем шаг}
In1:=h*s; {расчет интеграла}
end until (abs(In1-In2)<E); {проверка точности вычисления}
writeln('Результат rez=',In1);
end.


Код:
Введите величину разбиения n=10
Введите границу интервала вычислений a: 0
Введите границу интервала вычислений b: 1
Введите точность вычисления интеграла E (E>0): 0.01
Результат rez=1.50625


Как видно результаты близки. Эта та работа, что вам нужна?
Неизвестный
18.12.2011, 16:07
общий
Вычисление на других участках будет намного сложнее(я имею ввиду окружности) потому как там первообразные просто так не найти и считать их громоздко, но все возможно
Неизвестный
18.12.2011, 16:19
общий
Давайте я попробую объяснить с помощью рисунка:

Эти данные я ввел в составленную вами программу.
Мне необходимо вывести тот же результат но уже в ручную.
Неизвестный
18.12.2011, 16:27
общий
Цитата: 386678
Эти данные я ввел в составленную вами программу.
Мне необходимо вывести тот же результат но уже в ручную.

Эт в какую?
Неизвестный
18.12.2011, 18:59
общий
Программа та же самая что и наверху, но с таким условием:
Код:
 begin
x:=a+i*h; {приращение аргумента}
if x<=-(2*R+abs(d)) then s:=s+R{сумма значений функции на отрезке [a,b]}
else if x<d then s:=s+R-SQRT(sqr(R)-sqr(x+R-d))
else if x<k then s:=s+((k-x)/(k-d))*R
else if x<k+2*R then s:=s-sqrt(sqr(R)-sqr(x-k-R))
else s:=s+0;
end;
Неизвестный
19.12.2011, 13:01
общий
Код:
Программа предназначена для вычисления значения интеграла
на интервале [a,b], для функции заданной графически

Введите величину разбиения n=1
Введите границу интервала вычислений a: -1
Введите границу интервала вычислений b: 1
Введите радиус R (R>0): 2
Введите d (d<0): -1
Введите k (k>0): 3
Введите точность вычисления интеграла E (E>0): 0.001
Результат rez=6.0009765625


Вы не ту программу составили...вернее не правильно отредактировали

Код:
program graf_fun;
var
E,a,b,s,h,R,k,x,d,In2,In1:real;
i:integer;
n:longint;
begin {ввод исходных данных}
writeln ('Программа предназначена для вычисления значения интеграла');
writeln ('на интервале [a,b], для функции заданной графически');
writeln;
In1:=0; {считаем что значение интеграла 0}
repeat

{далее следует блок кода ввода корректных данных в программу}

write('Введите величину разбиения n='); readln(n);
if n<=0 then writeln ('n должно быть больше 0. Повторите ввод! ');
until (n>0);
repeat
write('Введите границу интервала вычислений a: '); readln(a);
write('Введите границу интервала вычислений b: '); readln(b);
if not (a<b) then writeln ('a должно быть меньше b. Повторите ввод! ');
until (a<b);
repeat
write('Введите радиус R (R>0): '); readln(r);
if R<=0 then writeln ('R должно быть больше 0. Повторите ввод! ');
until (R>0);
repeat
write('Введите d (d<0): '); readln(d);
if d>=0 then writeln ('d должно быть меньше 0. Повторите ввод! ');
until (d<0);
repeat
write('Введите k (k>0): '); readln(k);
if k<=0 then writeln ('k должно быть больше 0. Повторите ввод! ');
until (k>0);
repeat
write('Введите точность вычисления интеграла E (E>0): '); readln(E);
if E<=0 then writeln ('E должно быть больше 0. Повторите ввод! ');
until (E>0);
{----------------------------------------------------------}
repeat
begin
h:=(b-a)/n; {расчет шага изменения аргумента}
s:=0; {интеагральная сумма}
for i:=0 to n-1 do {расчет функции y=f(x) }
begin
x:=a+i*h; {приращение аргумента}
if x<=-2*R+d then s:=s+R{сумма значений функции на отрезке [a,b]}
else if x<d then s:=s+R-SQRT(sqr(R)-sqr(x+R-d))
else if x<k then s:=s-x+k
else if x<k+2*R then s:=s-sqrt(sqr(R)-sqr(x-k-R))
else s:=s+0;
end;
In2:=In1; {сохранение предыдущего значения интеграла}
n:=n*2; {наращиваем шаг}
In1:=h*s; {расчет интеграла}
end until (abs(In1-In2)<E); {проверка точности вычисления}
writeln('Результат rez=',In1);
end.
Неизвестный
19.12.2011, 15:56
общий
А можете на эту тогда написать ручное решение???
Неизвестный
19.12.2011, 18:01
общий
попробую. позже выложу сюда
Неизвестный
19.12.2011, 18:30
общий
спасибо, буду ждать...
Неизвестный
19.12.2011, 21:41
общий
тут нашел один интересный аспект.....когда задаются d и k, то прямая может принимать разный вид, соответственно и разные уравнения.
Прошу поучаствовать еще експертов в этом кому интересно. Я доработал вычисление интегральной суммы тем, что программа сама определяет тип прямой и уж её использует в решении.
Код:
program graf_fun;
var
E,a,b,s,h,R,k,x,d,k1,b1,In2,In1:real;
i:integer;
n:longint;
begin {ввод исходных данных}
writeln ('Программа предназначена для вычисления значения интеграла');
writeln ('на интервале [a,b], для функции заданной графически');
writeln;
In1:=0; {считаем что значение интеграла 0}
repeat
{далее следует блок кода ввода корректных данных в программу}

write('Введите величину разбиения n='); readln(n);
if n<=0 then writeln ('n должно быть больше 0. Повторите ввод! ');
until (n>0);
repeat
write('Введите границу интервала вычислений a: '); readln(a);
write('Введите границу интервала вычислений b: '); readln(b);
if not (a<b) then writeln ('a должно быть меньше b. Повторите ввод! ');
until (a<b);
repeat
write('Введите радиус R (R>0): '); readln(r);
if R<=0 then writeln ('R должно быть больше 0. Повторите ввод! ');
until (R>0);
repeat
write('Введите d (d<0): '); readln(d);
if d>=0 then writeln ('d должно быть меньше 0. Повторите ввод! ');
until (d<0);
repeat
write('Введите k (k>0): '); readln(k);
if k<=0 then writeln ('k должно быть больше 0. Повторите ввод! ');
until (k>0);
repeat
write('Введите точность вычисления интеграла E (E>0): '); readln(E);
if E<=0 then writeln ('E должно быть больше 0. Повторите ввод! ');
until (E>0);
{----------------------------------------------------------}
repeat
begin
h:=(b-a)/n; {расчет шага изменения аргумента}
s:=0; {интеагральная сумма}
for i:=0 to n-1 do {расчет функции y=f(x) }
begin
x:=a+i*h; {приращение аргумента}
if x<=-2*R+d then s:=s+R{сумма значений функции на отрезке [a,b]}
else if x<d then s:=s+R-SQRT(sqr(R)-sqr(x+R-d))
else if x<k then
begin
k1:=-R/(k-d);
b1:=R-k1*d;
s:=s+k1*x+b1;
end
else if x<k+2*R then s:=s-sqrt(sqr(R)-sqr(x-k-R))
else s:=s+0;
end;
In2:=In1; {сохранение предыдущего значения интеграла}
n:=n*2; {наращиваем шаг}
In1:=h*s; {расчет интеграла}
end until (abs(In1-In2)<E); {проверка точности вычисления}
writeln('Результат rez=',In1);
end.
Неизвестный
19.12.2011, 21:42
общий
Вполне возможно, что и на других участках будет несколько другое решение, раз все задано графически
Форма ответа