
- •Методические указания по выполнению домашних заданий для студентов 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. Процедурные типы.
Основной целью этого практикума является изучение процедурных типов, но задачи практикума относятся к теме приближенных вычислений и фактически продолжают материал предыдущего практикума.
Вычисление площади под кривой по методу Дарбу – Римана .
Математические основы и алгоритм решения этой задачи подробно приведены в учебно-методическом пособии [3], поэтому ниже рассмотрены лишь основные моменты. Метод получил свое название по имени известных математиков впервые предложивших его.
Пусть на интервале [a..b] определена непрерывная положительная и монотонная функция Y=f(x), как это показано на рис. 7.1. При разбиении интервала на n равных отрезков шириной dx площадь под кривой, заданной этой функцией, можно аппроксимировать суммой площадей n прямоугольников с основанием dx двояким образом. Если в качестве высоты прямоугольника выбрать меньшую ординату f(x), соответствующую правой границе отрезка, то очевидно, что такая аппроксимация даст значение искомой площади с недостатком S1, а сама площадь получила название нижней площади Дарбу. При выборе в качестве высоты большей ординаты f(x+dx), соответствующей левой границе отрезка, аппроксимация получила название верхней площади Дарбу и даст значение искомой площади с избытком S2.
Рис. 7.1. Площади Дарбу. Прямоугольники s1=dx*f(x) – «малые», s2=dx*f(x+dx) – «большие». Сумма площадей всех «малых» прямоугольников S1=s1 – дают нижнюю площадь Дарбу, а всех «больших» S2=s2 – верхнюю площадь Дарбу.
Риман показал, что точное значение искомой площади S находится между S1 и S2 и, что самое главное, существует предел | S1 - S2 | < eps(dx), где eps(dx) - сколь угодно малое число, зависящее от dx. Именно эта оценка точности и будет использоваться для приближенного вычисления площади под кривой. Наконец, поскольку в методе Дарбу-Римана рассматриваются только неотрицательные функции, площадь под кривой, по своему геометрическому смыслу, не следует полностью отождествлять с определенным интегралом.
При программировании данной задачи необходимо учитывать, что на участке, где функция монотонно убывает, формулы для расчета площади «больших» и «малых» прямоугольников должны быть инвертированы, т.е. s1=dx*f(x+dx), s2=dx*f(x).
Задача 7.1.
Составить программу вычисления площади под кривой, заданной функцией f(x)=sin(x) на интервале x =[0..] с точностью eps=0.0001.
Этап 1. Отладку алгоритма следует начать с основного цикла суммирования при заданном числе разбиений. После этого этапа, можно переходить к отладке внешнего цикла подбора числа разбиений для достижения требуемой точности.
Таким образом, функционально к циклу суммирования будем относить подготовительную часть и собственно цикл. Причем, поскольку число разбиений считается известным, то проще всего использовать оператор цикла «for».
Ниже приведен фрагмент программы вычисления площади под кривой y=sin(x) в диапазоне от 0 до , при числе разбиений n, равном 100.
Листинг 7.1а. Цикл суммирования при заданном числе разбиений. Функциональная часть цикла выделена курсивом.
// Заданная функция определена в разделе P&F
Function y(x : real) : real;
Begin result:=sin(x); End;
// Глобальные параметры и основная программа