- •Антонюк в.А., Задорожный с.С.
- •Первая программа на с. История языка программирования с.
- •Среда программирования «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.
Разработайте процедуру поиска корня уравнения методом Ньютона:
Процедуру оформите в виде отдельной функции. Полагайте, что производная задана аналитически. Разработайте интерфейс, позволяющий вводить начальное приближение и требуемую точность вычислений . С помощью программы определите корни уравнения при и начальных условиях . Поясните результат при помощи графика функции .
Контрольные примеры:
;
;
;