- •Часть 2
- •Содержание
- •Задание № Доп-1. Обработка двухмерных динамических массивов. Функции пользователя
- •Особенности применения указателей
- •Связь указателей с массивами
- •Декларация многомерного массива:
- •Указатели на указатели
- •Динамическое размещение данных
- •Минимальный набор действий, необходимых для динамического размещения одномерного массива действительных чисел размером n:
- •Минимальный набор действий, необходимых для динамического размещения двухмерного массива действительных чисел размером nm:
- •Задание №1. Рекурсивные функции
- •1.1. Краткие теоретические сведения
- •1.2. Пример выполнения задания
- •1.2.1. Реализация задания в оконном приложении
- •1.2.2. Реализация задания в консольном приложении
- •1.3. Индивидуальные задания
- •Задание №2. Динамическая структура стек
- •2.1. Краткие теоретические сведения
- •2.2. Пример выполнения задания
- •2.2.1. Реализация задания в оконном приложении
- •2.2.2. Реализация задания в консольном приложении
- •2.3. Индивидуальные задания
- •Задание №3. Динамическая структура очередь
- •3.1. Краткие теоретические сведения
- •Создание первого элемента
- •Добавление элемента
- •Просмотр списка
- •Алгоритм удаления элемента в списке по ключу
- •3.2. Пример выполнения задания
- •3.2.1. Реализация задания в оконном приложении
- •3.2.2. Реализация задания в консольном приложении
- •3.3. Индивидуальные задания
- •Задание №4. Обратная польская запись
- •4.1. Краткие теоретические сведения
- •4.2. Пример выполнения задания
- •4.3. Индивидуальные задания
- •Задание №5. Нелинейные списки
- •5.1. Краткие теоретические сведения
- •Функция просмотра элементов дерева
- •Функция освобождения памяти, занятой деревом
- •5.2. Пример выполнения задания
- •5.3. Индивидуальные задания
- •Задание №6. Алгоритмы поиска корней уравнений
- •6.1. Краткие теоретические сведения
- •Метод простой итерации
- •Метод Ньютона (метод касательных)
- •Метод секущих
- •Метод Вегстейна
- •Метод деления отрезка пополам
- •6.2. Пример выполнения задания
- •6.3. Индивидуальные задания
- •Задание №7. Аппроксимация функций
- •7.1. Краткие теоретические сведения
- •Интерполяционный многочлен Ньютона
- •Линейная и квадратичная интерполяции
- •Интерполяционный многочлен Лагранжа
- •7.2. Пример выполнения задания
- •7.3. Индивидуальные задания
- •Задание №8. Алгоритмы вычисления интегралов
- •8.1. Краткие теоретические сведения
- •Формула средних
- •Формула трапеций
- •Формула Симпсона
- •8.2. Пример выполнения задания
- •8.3. Индивидуальные задания
- •Задание №9. Алгоритмы поиска и сортировки в массивах
- •9.1. Краткие теоретические сведения
- •9.1.1. Алгоритмы поиска
- •Функция поиска всех элементов целочисленного динамического массива а размера n, равных значению х, может иметь следующий вид:
- •Функция поиска одного значения х в целочисленном динамическом массиве а размера n может иметь следующий вид:
- •Else // Вывод сообщения, что элемент не найден
- •9.1.2. Алгоритмы сортировки
- •Функция сортировки элементов целочисленного динамического массива а размера n может иметь следующий вид:
- •Функция сортировки элементов целочисленного динамического массива а размера n может иметь следующий вид:
- •Рекурсивная функция сортировки элементов целочисленного динамического массива а размера n может иметь следующий вид (begin – первый элемент массива, end – последний элемент массива):
- •9.2. Индивидуальные задания
- •Литература
- •Учебное издание
- •Часть 2
- •220013, Минск, п. Бровки, 6
6.2. Пример выполнения задания
Написать программу поиска простых корней функции f(x) = 4x – 7sinx на отрезке [a, b] c шагом h и точностью методом деления отрезка пополам.
Вид формы и полученные результаты представлены на рис. 6.2.
Текст программы Unit1.cpp может иметь следующий вид:
typedef double (*type_f)(double);
double fun(double);
double Metod_Del_2(type_f,double,double,double);
//--------------------- Текст функции-обработчика кнопки Расчет ----------------------
double a, b, x, eps, h, y, r;
int nom=0, iter;
a = StrToFloat(Edit1->Text); b = StrToFloat(Edit2->Text);
eps = StrToFloat(Edit3->Text);
h = StrToFloat(Edit4->Text);
Memo1->Lines->Add(" Функция 4*x - 7*sin(x)");
Chart1->Series[0]->Clear();
for(x = a-h; x< b+h; x+=h)
Chart1->Series[0]->AddXY(x,fun(x));
Memo1->Lines->Add("------ Корни ------");
for(x = a; x<=b; x+=h){
if(fun(x)*fun(x+h)<0){
nom++;
y = Metod_Del_2(fun,x,x+h,eps);
Memo1->Lines->Add(IntToStr(nom)+"-й = "+FloatToStrF(y,ffFixed,8,6));
}
}
if(nom==0) Memo1->Lines->Add("На отрезке корней НЕТ!");
//------------------------- Метод деления отрезка пополам ---------------------------------
double Metod_Del_2(type_f f,double x0,double x1,double eps) {
double x2,y0,y2;
y0=f(x0);
do {
x2=(x0+x1)/2; y2=f(x2);
if(y0*y2 > 0) {
x0 = x2; y0 = y2;
}
else x1 = x2;
} while (fabs(x1-x0)>eps);
return (x0+x1)/2;
}
//------------------------------- Заданная функция f(x) ----------------------------------------
double fun(double x) {
return 4*x - 7*sin(x);
}
Рис. 6.1
Рис. 6.2
6.3. Индивидуальные задания
Написать и отладить программу поиска всех корней функции f(x) на отрезке [a, b] в соответствии с вариантом (табл. 6.1). Метод нахождения корня оформить в виде отдельной функции, алгоритм которой описать блок-схемой.
Таблица 6.1
Вид функции f(x) |
а |
b |
Заданный метод |
1. |
–2 |
2 |
Метод простой итерации |
2. |
–1 |
3 |
Метод Ньютона |
3. |
1 |
8 |
Метод секущих |
4. |
4 |
7 |
Метод Вегстейна |
5. |
4 |
8 |
Метод секущих |
6. |
2 |
6 |
Метод простой итерации |
7. |
3 |
9 |
Метод секущих |
8. |
–4 |
0 |
Метод секущих |
9. |
–12 |
5 |
Метод Вегстейна |
10. |
–2 |
5 |
Метод Ньютона |
11. |
–6 |
2 |
Метод Ньютона |
12. |
–4 |
2 |
Метод Ньютона |
13. |
–7 |
3 |
Метод секущих |
14. |
–4 |
3 |
Метод Вегстейна |
15. |
–1 |
3 |
Метод секущих |
16. |
–4 |
4 |
Метод Ньютона |
Примечание. Все функции на указанном интервале имеют три корня.