Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методические материалы к ДЗ.doc
Скачиваний:
6
Добавлен:
09.02.2015
Размер:
472.06 Кб
Скачать

Задача 7.2.

Составить функцию вычисления площади под кривой для произвольной функции с двумя аргументами действительного типа. С использованием этой функции составить программу вычисления площади под двумя кривыми вида y=abs(f(x)) с точностью 0.001. Первая кривая f(x) является аналитической функцией и соответствует условиям задачи 6.1, а вторая представлена в виде ряда с условиями задачи 6.2.

Этап 1. Планирование структуры программы. На этом этапе следует объявить соответствующий процедурный тип и распределить местоположение программных составляющих хотя бы в виде комментариев2. В качестве первого параметра процедурного типа указан аргумент x, а вторым параметром является точность e, которая используется только при вычислении ряда. При передаче через процедурный тип аналитической функции значение второго параметра может быть любым.

Листинг 7.2а. Структура программы. Заголовок программы опущен.

Type TFunc=Function(x : real; e : real) : real;

// Определение аналитической функции.

// Определение функции, заданной рядом.

// Определение функции вычисления площади под кривой.

// Раздел описания глобальных переменных.

BEGIN

// Вычисление площади для аналитической функции.

// Вычисление площади для ряда.

// Вывод результата для аналитической функции.

// Вывод результата для ряда.

readln;

END.

Определение аналитической функции претерпело незначительные изменения: добавлен второй, фактически бесполезный параметр для соответствия шаблону процедурного типа, и результат вычисляется по модулю.

Function y(x, e : real) : real;

Begin result:=abs(x*x-sin(x)); End;

Определение функции, заданной в виде ряда, должно быть предварительно отлажено в составе автономной программы в соответствии с требованиями этапа 3 задачи 6.2. Ниже приведен только заголовок этой функции, и предполагается, что индивидуальные задания второй части Практикума 6 «Вычисление суммы степенного ряда» выполнены.

Function R(x : real; eps : real) : real;

Определение функции вычисления площади под произвольной кривой является модификацией функции Sq, которая должна быть отлажена в составе автономной программы в соответствии с требованиями п.1 предыдущего задания. Интерфейс функции изменился за счет добавления точности вычисления ряда epsF и обобщенной функции f процедурного типа. Смысл остальных параметров остался прежним, лишь для точности вычисления площади epsSq использовано более подходящее по смыслу имя.

Function Sq(a, b, epsSq, epsF : real;

f : TFunc; Var s1, s2 : real) : real;

В цикле суммирования (см. листинг 7.1а) необходимо внести изменения связанные с заменой глобальной функции c одной переменной y(x) на обобщенную функцию с двумя переменными f(x, epsF).

Листинг 7.2б. Фрагмент цикла суммирования для обобщенной функции.

dx:=(b-a)/n; s1:=0; s2:=0;

for i:=1 to n do

begin

x:=a+dx*(i-1);

y1:=f(x, epsF);

y2:=f(x+dx, epsF);

if y2>y1

then

begin s1:=s1+dx*y1;

s2:=s2+dx*y2; end

else

begin s2:=s2+dx*y1;

s1:=s1+dx*y2; end;

end;

Наконец, необходимо заменить в условии выхода по точности имя переменной с eps на epsSq. Раздел описаний локальных переменных функции Sq при необходимости следует дополнить, но если предыдущее задание выполнено в соответствии с требований п.1, то такой необходимости возникнуть не должно.

Глобальные параметры и основная программа состоят всего из нескольких строк. Значения левой и правой границ интервала приняты одинаковыми для аналитической функции и ряда, но, конечно, могут быть и разными. Эти значения и параметры точности заданы непосредственно числовыми константами. При таком определении параметров Sq особенно наглядно видны достоинства процедурных типов, поскольку все отличие заключается лишь в пятом параметре - имени передаваемой функции.

Листинг 7.2в. Глобальные параметры и основная программа.