Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Подбельский Фомин_Программирование на языке СИ_...doc
Скачиваний:
259
Добавлен:
10.08.2019
Размер:
53.81 Mб
Скачать

10.4.3. Пример выполнения задания по многомерным динамическим массивам

Условие задачи. Введя целое значение переменной п, сформировать единичную диагональную матрицу с размерами п на п и вывести ее на экран дисплея.

В отличие от основных задач этого параграфа в данном случае для простоты не требуется обрабатывать сформированную матрицу. В приводимой ниже программе реализовано в соответствии с условиями задачи только формирование матрицы. Этого достаточно для демонстрации механизмов построения многомерных динамических массивов и работы с их элементами.

Результат выполнения программы:

Примечание. Для освоения механизмов моделирования многомерных массивов с помощью препроцессорных средств целесообразно решить ту же задачу, но для представления матриц использовать одномерные массивы и организовать, доступ к их элементам с помощью макроопределений (см. §3.5).

10.5. Функции и указатели

Первая часть задания. Оформить в виде функции с прототипом

double function (double x);

итерационный алгоритм, запрограммированный в соответствии с заданием §10.2 для функции f(x) из табл. 10.3. Используя созданную функцию, вычислить грубое приближение интеграла:

где  =

Здесь [а, b] - отрезок, определенный для функции f(x) из задания 2 (см. табл. 10.3);

т - количество интервалов равномерного разбиения отрезка [a,b] (см. задание из §10.2).

Вторая часть задания. Здесь предусматривается монотонное увеличение; количества интервалов разбиения исходного интервала [а, b]. Требуется написать функцию для вычисления с максимально возможной точностью определенного интеграла на заданном интервале [а, b] от функции, указатель на которую передается как значение параметра. Прототип функции для вычисления интеграла:

double integnal (double(*p)(double), double a, double b, unsigned int *N, double *H);

Использовать один из следующих численных методов интегрирования:

1. Метод (формула) Симпсона (парабола, проведенная через 3 ординаты на концах двух соседних интервалов). Справедлива для четного количества п равных отрезков, на которые разбивается интервал [а, b]:

где h =

2. Метод (формула) трапеций:

где h =

3. Метод (формула) Ньютона (правило трех восьмых). Для n, кратного 3:

где h =

4. Метод Гаусса (вариант повышенной сложности). См., например, "квадратуру Гаусса" в "Справочнике по математике" И.Н. Бронштейна, К.А. Семендяева. - М.: Наука, 1981.

С помощью разработанных функций function( ), integral( ) вычислить значение определенного интеграла для функции f(x) из задания §10.2 на интервале [а,b], определенного там же.

С помощью параметров unsigned int *N и double *H вернуть в основную программу количество отрезков, на которые разбивается интервал интегрирования [а,b], и величину каждого отрезка.

Пояснения.

При вычислении сравнивать два последующих результата, удваивая количество шагов следующего счета. Увеличивая количество интервалов, сохранять предыдущие значения {уi} в массиве. Это уменьшит время счета, но потребует модификации алгоритма и динамического выделения памяти для массивов. Возможна нехватка памяти, следует предусмотреть защиту.

В качестве основы для выполнения задания можно использовать следующую программу. В ней определенный интеграл вычисляется для функции у = sh(x) на интервале [2,3] методом трапеций при фиксированном числе шагов. Точность не оценивается.

Результат выполнения программы: