
- •Методические указания по выполнению домашних заданий для студентов 1 курса специальности иу-10.
- •Введение.
- •Домашнее задание 1. Практикум 6. Приближенные вычисления.
- •Задача 6.1.
- •Var a, b, c : real;
- •Iter : longword;
- •Inc(iter);
- •Задания.
- •Задача 6.2.
- •Inc(n); inc(iter);
- •Задания.
- •Практикум 7. Процедурные типы.
- •Задача 7.1.
- •Var a, b, X, dx, y1, y2, s1, s2 : real;
- •Var a, b, X, dx, y1, y2, s1, s2 : real;
- •Inc(iter);
- •Задания.
- •Задача 7.2.
- •Var s1, s2 : real;
- •Задания.
- •Домашнее задание 2. Практикум 13. Типизированные файлы.
- •Задача 13.1.
- •Var I : word;
- •Var I, j : word; buf : tSportMan;
- •If fSort(a[I], a[j]) then
- •Var I : word;
- •Var I : word;
- •Var aHi : Ta; Var nHi : word);
- •Var I : word;
- •Задания.
- •Домашнее задание 3. Практикум 18. Использование объектной технологии для построения движущихся фигур.
- •X, y : real;
- •2*T0.X-border, 2*t0.Y-border);
- •X3, y3 : real;
- •X1, y1, x2, y2, x3, y3 : real;
- •Inherited Init(fx0, fy0, fmx, fcnv);
- •Var t : array[1..3] of tPoint; I : byte;
- •Var t0 : tPoint; tc : trPoint; tri:cTri;
- •0,0, 1,0, 0,1, Tc, clRed);
- •Var I : byte; r, a : real;
- •Var t0 : tPoint; tc : trPoint;
- •0,0, 1,0, 0,1, Tc, clRed);
- •Var I : word;
- •Var dx : real; tr : trPoint; tp: tPoint; I : word;
- •Inherited Init(fx0, fy0, fmx, fcnv);
- •Var dx : real;
- •Var t : array[1..3] of tPoint; tr : trPoint;
- •I : byte;
- •Var dx : real;
- •Var list : cList;
- •Var I : word;
Задача 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в. Глобальные параметры и основная программа.