
книги / Программирование на языке Си
..pdf534 |
Программирование на языке Си |
Примечание. Для освоения механизмов моделирования многомерных массивов с помощью препроцессорных средств целесообразно решить ту же задачу, но для пред ставления матриц использовать одномерные массивы и орга низовать доступ к их элементам с помощью макроопределений (см. §3.5).
10.5. Ф ункции и указатели
Первая часть задания. Оформить в виде функции с прото типом
double function (double х);
итерационный алгоритм, запрограммированный в соответствии с заданием §10.2 для функции f(x) из табл. 10.3. Используя соз данную функцию, вычислить грубое приближение интеграла:
t f ( x ) d x * j 'j [ j (y0 + 2yi+..2yi+...+2ym„l +ут),
где А = -----
т
Здесь [а,Ь] - отрезок, определенный для функции f(x) из за дания 2 (см. табл. 10.3);
т - количество интервалов равномерного разбиения отрезка [а,Ь] (см. задание из §10.2).
Вторая часть задания. Здесь предусматривается монотон ное увеличение количества интервалов разбиения исходного интервала [а,Ь]. Требуется написать функцию для вычисления с максимально возможной точностью определенного интеграла на заданном интервале [а, Ь] от функции, указатель на которую передается как значение параметра. Прототип функции для вы числения интеграла:
double integral (double(*pXdouble), double a, double b, unsigned int *N, double *H);
Глава 10. Задачи по программированию |
535 |
Использовать один из следующих численных методов интег рирования:
1. Метод (формула) Симпсона (парабола, проведенная через
3 ординаты на концах двух соседних интервалов). Справедлива для четного количества п равных отрезков, на которые разбива ется интервал [а,Ь\.
h|/(х)г/х * -h( у 0 + 4у, + 2у2 + 4у3 + 2у4 +...+2у„_2 + 4у„_, + у „),
а
П
2. Метод (формула) трапеций:
|/ ( х ) Л * ^ (у 0 + 2у, +...+2у„_, + у„ ),
где h = Ъ - а
3. Метод (формула) Ньютона (правило трех восьмых). Для п, кратного 3:
}/(*У * * ~(У о + + Зу2 + 2у3 + Зу4 + Зу5
а
+ 2у6+...+2у„_з +3у„_2 + 3у„ч + у„),
где Л = Ь -а
п
4. Метод Гаусса (вариант повышенной сложности). См., на пример, "квадратуру Гаусса" в "Справочнике по математике" И.Н. Бронштейна, К.А. Семендяева. - М.: Наука, 1981.
С помощью разработанных функций function(), integral) вычислить значение определенного интеграла для функции f(x) из задания §10.2 на интервале [а,Ь], определенного там же.
Глава 10. Задачи по программированию |
537 |
|||
double integral(double (*f)(double), double |
a , |
|||
double b) |
|
|
|
|
( |
|
|
|
|
int n=50; |
|
|
|
|
int |
i ; |
|
|
|
double h = (b-a)/n; |
|
|||
double s , x = a ; |
|
|||
s = |
f (a) |
+ |
f (b) ; |
|
for |
(i = |
1; |
i < n; i++) |
|
( |
x = x + h; |
|
||
|
|
|||
|
s '+= f(x)*2; |
|
)
return s*h/2;
)
void main()
{
double a=2.0, b=3.0; printf("\n интеграл = %le",
integral(fsinh,a,b));
>
Результат выполнения программы:
Интеграл: 6.305676е+00
10.6. Ф ункции и м ассивы
Обобщенная формулировка задания. Написать функцию для вычисления массива значений первой производной функции f(x) в заданных точках х/ оси аргумента на интервале [а,Ь]. Ука затель на дифференцируемую функцию передается как значе ние параметра. Оценить и выбрать внутри функции величину шагов Aj, необходимых для оценки значений производной в точке х/ (см. ниже приближенные формулы).
Прототип исследуемой функции (от которой берется произ водная):
double function(double х);
540 |
Программирование на языке Си |
"Аналитическое" значение производной f a'(xi) для табл. 10.4
вычислить, предварительно выполнив дифференцирование по аргументу х функции f(x). Полученное аналитическое выраже ние для производной fa (x) оформить в виде дополнительной функции с прототипом
double dir(double х);
Выбрать или разработать самостоятельно метод подбора ша га Aj вдоль оси аргумента при вычислении производной f n '(x). Например, используйте последовательное уменьшение величи ны Aj до достижения "машинной точности". Учтите, что это достижение (сходимость) не гарантируется, поэтому необходи мо, по крайней мере, ограничить количество итераций либо вве сти ограничение на величину Д(
10.7.Работа со структурам и
1.Выбрать предметную область для базы данных и предло жить структуру для описания отдельных записей базы данных. Выбранная структура должна иметь не менее пяти полей (эле ментов) двух или более типов.
Пр и м ер . Структура "Государство"
Элементы (поля, компоненты) структуры:
•название страны;
•столица;
•государственный язык;
•численность населения;
•площадь территории.
2. Написать функцию для формирования одномерного мас сива структур, значения которых вводятся из стандартного входного потока (с клавиатуры). При вводе структур можно реализовать один из следующих механизмов:
•ввод заранее заданного количества структур;
•ввод до появления структуры с заданным признаком;
•диалог с пользователем о необходимости продолжать ввод.
Глава 10. Задачи по программированию |
541 |
3.Написать функцию для записи в файл массива структур.
4.Написать функцию чтения в массив структур из файла.
5.Написать функцию дополнения уже существующего мас сива структур новыми структурами.
6.Написать функцию поиска структуры с заданным значени ем выбранного элемента.
7.Написать функцию постраничного вывода на экран дис плея содержимого массива структур.
8.Написать функцию поиска структур (записей) с заданными признаками (например, выбор структур по заданному диапазону значений элемента).
9.Написать функцию упорядочения массива структур по за данному полю (элементу). Например, упорядочить государства по численности населения или в алфавитном порядке названий стран.
10.Написать функцию полного обновления файла, например, массив структур переписывается в файл после упорядочения. Продемонстрировать:
•сохранение данных в файле после завершения программы;
•разные упорядочения совокупности структур;
•поиск подходящих структур (по значению элемента, по диапазону значений элемента).
10.7.1. Варианты структур для выполнения работы
1."Человек":
фамилия; имя; пол; национальность; вероисповедание; рост; вес; дата рождения (год, месяц, число); номер теле фона; домашний адрес (почтовый индекс, страна, область, район, город, улица, дом, квартира).
2."Школьник"'.
фамилия; имя; отчество; класс; пол; дата рождения (год, месяц, число); домашний адрес (см. п. 1).
542 |
Программирование на языке Си |
3."Покупатель
фамилия; имя; отчество; адрес: штат (губерния, область); город; улица; номер дома; номер квартиры; номер кредит ной карточки или номер счета.
4."Пациент":
фамилия; имя; год рождения; номер телефона; домашний адрес (см. п. 1); номер медицинской карты; группа крови.
5."Спортивная команда":
название; из какого города; сколько игр сыграла; сколько набрала очков (проиграла, выиграла, ничья); количество игроков.
6."Стадион ":
название; виды спорта; год постройки; адрес; вместимость (зрителей); количество арен, площадок.
7."Владелецавтомобиля":
имя; номер автомобиля; номер техпаспорта; дата рожде ния; телефон; отделение регистрации ГИБДД.
8."Автомобиль":
марка; цвет; серийный номер; регистрационный номер; количество дверей; год выпуска; цена.
9."Фильм":
название; режиссер (фамилия, имя); страна; год выпуска; стоимость (расходы на выпуск); доход.
10."Музыкальный товар":
носитель (грампластинка, аудиокассета, лазерный диск); порядковый номер в каталоге; название; исполнитель (фа милия, имя); время звучания; количество произведений; цена по каталогу. .1
11. "Альбом вокально-инструментальной группы":
название группы; название альбома; количество песен на диске/кассете; год выпуска альбома; фирма-произво дитель.
Глава 10. Задачи по программированию |
543 |
12. "Государство
название страны; столица; государственный язык; населе ние (число жителей); площадь территории; денежная еди ница; курс валюты относительно рубля (доллара); государственный строй.
Вкачестве основы для программы данного раздела можно взять набор функций базы данных по сотрудникам предприятия из главы 8.
10.8.С писки и деревья
Всоответствии с индивидуальным заданием необходимо создать программную систему для обслуживания конкретной сложной динамической структуры данных (списка, дерева или стека). Указанные в задании действия (создание пустой струк туры данных, ее инициализация и т.п.) должны быть оформлены
ввиде отдельных функций, каждая из которых должна быть за писана в свой файл. Память под очередной элемент динамиче ской структуры данных следует выделять динамически.
Выполнение действий по обслуживанию динамической структуры данных должно производиться в режиме диалога с пользователем, например, так, как это делается при работе с ба зой данных, рассмотренной в главе 8.
Восновной программе необходимо предусмотреть вызов функций, реализующих обслуживание структуры данных, и ин дикацию их работы (начало работы, конец работы, код возвра та). Способ передачи параметров в функции - на усмотрение разработчика программы. Для каждой функции разработать систему кодов возврата, отражающую результат выполнения действий внутри функции, например, успешное выполнение, неправильный номер элемента, неправильный параметр, исчер пана динамическая память и т.п. В основной программе после вызова каждой функции необходимо предусмотреть анализ ко дов возврата и соответствующие реакции.