
- •Антонюк в.А., Задорожный с.С.
- •Первая программа на с. История языка программирования с.
- •Среда программирования «Microsoft Visual Studio.Net».
- •Структура программы.
- •Пример простейшей программы:
- •Представление данных.
- •Операции.
- •Ввод и вывод алфавитно-цифровой информации.
- •Математические функции.
- •Практическое задание №1.
- •Условия в вычислениях. Ветвящиеся и итерационные алгоритмы Условная операция присваивания. Операторы if ... Else и switch.
- •Ветвящиеся алгоритмы.
- •Циклические и рекурсивные алгоритмы. Операторы циклов for, do, while.
- •Практическое задание №2.
- •Функции.
- •Определение функции.
- •Прототипы функций.
- •Вызов по значению и вызов по ссылке.
- •Вычисление функций путем разложения в ряд.
- •Поиск корней функции методом деления отрезка пополам.
- •Поиск корней функции методом касательных.
- •Практическое задание №3.
- •Массивы и указатели. Работа с файлами. Объявления массивов и указателей.
- •Доступ к элементам массива.
- •Передача массивов функциям.
- •Указатели.
- •Динамическое выделение и освобождение памяти.
- •Практическое задание.
- •Потоковые функции.
- •Низкоуровневый ввод и вывод.
- •Ввод и вывод символов, строк, слов.
- •Форматированный ввод и вывод.
- •Потоки cin, cout, cerr.
- •Практическое задание №4.
- •Структуры и объединения. Синтаксис структур.
- •Доступ к элементам структуры.
- •Передача структур в функции.
- •Структуры и битовые поля.
- •Объединения.
- •Дополнительные средства (typedef и enum).
- •Введение в объектно-ориентированное программирование. Принципы объектно-ориентированного программирования.
- •Терминология объектно-ориентированного программирования.
- •Структура как простейший класс.
- •Inline методы.
- •Указатель this.
- •Конструкторы и деструкторы.
- •Перегрузка методов класса.
- •Перегрузка операций.
- •Практическое задание.
- •Производные классы. Полиморфизм
- •Виртуальные функции
- •Использование дружественных функций.
- •Практическое задание.
- •Работа в объектно-ориентированной среде.
- •Объектно-ориентированные стековые операции.
- •Объектно-ориентированные связанные списки.
- •Практическое задание.
- •Классы iostream.
- •Потоковый ввод-вывод.
- •Буферизованные потоки.
- •Строковые потоки.
- •Двоичные файлы.
- •Вычисления в интерактивном режиме.
- •Графика в системе matlab.
- •3. Программирование m-функций.
- •4. Создание законченных приложений на основе графического интерфейса пользователя.
- •4. Создание законченных приложений на основе графического интерфейса пользователя.
- •Глава 7. Дополнительные возможности системы matlab Объекты и классы. Переопределение операций.
- •Написание расширений matlab на языке c
- •Программные интерфейсы
- •Настройка среды для сборки проекта
- •Пример программы
- •Вызов команд среды matlab из mex-файла
Поиск корней функции методом деления отрезка пополам.
Если для требуемой математической функции можно выделить участок, на котором она имеет всего один корень, то этот корень можно найти следующим образом:
-
Задаем значение xleft равное значению левой границы участка.
-
Задаем значение xright равное значению правой границы участка.
-
Вычисляем значение yleft=f(xleft) и yright=f(xright).
-
Делим участок пополам и вычисляем x0=(xright+xleft)/2 и y0=f(x0).
-
Если знак y0 и yleft одинаковый, то выполняем xleft=x0, иначе xrigth=x0.
-
Повторяем пункты 4 и 5 до тех пор, пока разница xright-xleft станет достаточно малой.
Соответствующую функцию на языке С можно записать следующим образом:
// описание функции y=f(x)
double f(double x)
{
// здесь вычисляется функция y=f(x);
}
// функция sign проверяет равенство знаков
int sign(double a,double b)
{
if(a>0 && b>0)
return 1;
if (a<=0 && b<=0)
return 1;
return 0;
}
// вычисление корня делением отрезка пополам.
double root(double xleft,double xright)
{
double x0,y0,yleft,yright;
yleft=f(xleft);
yright=f(xright);
if( xleft > xright )// Левая граница > правой
{
x0=xleft;
xleft=xright;
xright=xleft;
}
if ( sign(yleft,yright) )// Одинаковый знак.
{
printf(“Eroor! Equal signs!”);
return 0;
}
while (xright-xleft>eps)
{
x0=(xright+xleft)/2;
y0=f(x0);
if (sign(yleft,y0))
{
yleft=y0;
xleft=x0;
}
else
{
yright=y0;
xright=x0;
}
}
return x0;
}
Поиск корней функции методом касательных.
Этот алгоритм начинает работать с некоторой точки x0, находящейся в окрестности корня. Функция y=f(x) должна быть монотонной. В точке ( x0,y0=f(x0) ) проводится касательная до пересечения с осью x. Полученная точка берется в качестве следующего значения для x0. Процесс повторяется до тех пор, пока разница значений x0 между двумя итерациями не станет достаточно малой.
Практическое задание №3.
При выполнении третьего задания студенты должны закрепить приемы работы с операторами цикла. Основное внимание уделяется стилю написания программы и разделению программы на отдельные функции, каждая из которых выполняет законченное действие.
Вариант 1.
Суммируя числовой ряд, вычислите функцию, зависящую от параметра:
,
где
Суммирование завершайте по достижению
условия
.
Для вычисления
воспользуйтесь рекуррентными
соотношениями. Процедуру вычислений
оформите в виде отдельной функции.
Разработайте интерфейс, позволяющий
пользователю вводить параметры
и
и вычислять таблицу значений
при x=0..10 с шагом 0.5. Исследуйте
поведение
при
и
.
Сумму сравните с точным значением
.
Вариант 2.
Суммируя числовой ряд, вычислите функцию, зависящую от параметра:
,
где
Суммирование завершайте по достижению
условия
.
Для вычисления
воспользуйтесь рекуррентными
соотношениями. Процедуру вычислений
оформите в виде отдельной функции.
Разработайте интерфейс, позволяющий
пользователю вводить параметры
и
и вычислять таблицу значений
при x=0..10 с шагом 0.5. Исследуйте
поведение
при
и
.
Сумму сравните с точным значением
.
Вариант 3.
Суммируя числовой ряд, вычислите функцию, зависящую от параметра:
,
где
Суммирование
завершайте по достижению условия
.
Для вычисления
воспользуйтесь рекуррентными
соотношениями. Процедуру вычислений
оформите в виде отдельной функции.
Разработайте интерфейс, позволяющий
пользователю вводить параметры
и
и вычислять таблицу значений
при x=0..10 с шагом 0.5. Исследуйте
поведение
при
и
.
Сумму сравните с точным значением
.
Вариант 4.
Суммируя числовой ряд, вычислите функцию:
,
где
Суммирование завершайте по достижению
условия
.
Для вычисления
воспользуйтесь рекуррентными
соотношениями. Процедуру вычислений
оформите в виде отдельной функции.
Вычислите таблицу значений
при
с шагом 0.1, а также в некоторой точке
— области сходимости суммы
.
Разработайте интерфейс, позволяющий
пользователю вводить параметры
и
.
Полученные значения сравните с точным
значением
.
Повторите вычисления с
.
Вариант 5.
Суммируя числовой ряд, вычислите функцию:
,
где
Суммирование завершайте по достижению
условия
.
Для вычисления
воспользуйтесь рекуррентными
соотношениями. Процедуру вычислений
оформите в виде отдельной функции.
Вычислите таблицу значений
при
с шагом 0.1, а также в некоторой точке
— области сходимости суммы
.
Разработайте интерфейс, позволяющий
пользователю вводить параметры
и
.
Исследуйте поведение
при
и
.
Полученные значения сравните с точным
значением
.
Повторите вычисления с
.
Вариант 6.
Продифференцируйте численно функцию
,
используя для дифференцирования
разностную формулу второго порядка
Процедуру дифференцирования вынесите
в отдельную функцию. Разработайте
интерфейс, позволяющий вводить шаг
дифференцирования h и вычислять
таблицу
для
с шагом
при
.
Сравните полученные результаты с точным
значением производной
.
Вариант 7.
Разработайте процедуру поиска методом
половинного деления корня уравнения
на интервале
.
Процедуру оформите в виде отдельной
функции. Разработайте интерфейс,
позволяющий вводить значение границ
интервала a, b и требуемую точность
решения
.
С помощью программы определите корни
уравнения
на интервалах
и
.
Контрольный
пример:
x = -1, 2 (кратность 2), 5, -3.
Вариант 8.
Разработайте процедуру поиска корня
уравнения
методом Ньютона:
Процедуру оформите в виде отдельной
функции. Полагайте, что производная
задана аналитически. Разработайте
интерфейс, позволяющий вводить начальное
приближение
и требуемую точность вычислений
.
С помощью программы определите корни
уравнения
при
и начальных условиях
.
Поясните результат при помощи графика
функции
.
Контрольные примеры:
;
;
;