- •Лекция 1 Создание консольного приложения
- •2. Консоль. Построение консольного проекта
- •3. Запуск приложения
- •4. Сохранение и редактирование проекта
- •Лекция 2
- •4. Функции форматированного ввода и вывода
- •4.1. Функция форматированного ввода с клавиатуры
- •4.2. Функция форматированного вывода на экран
- •5. Математические функции
- •Лекция 3 Линейные вычислительные процессы
- •1. Алгоритм. Управляющие структуры
- •2. Линейные вычислительные алгоритмы
- •2.1. Условный оператор if()
- •2.2. Условное выражение
- •2.3. Оператор выбора switch()
- •Лекция 5 Программирование разветвляющихся вычислительных процессов
- •Лекция 6 Циклические вычислительные процессы.
- •1. Типы циклов
- •3. Операторы безусловного перехода
- •Лекция 7 Вычисление последовательностей
- •4. Примеры вычисления последовательностей
- •5. Структура алгоритмов вычисления рекуррентных последовательностей
- •Лекция 8 Одномерные массивы
- •1. Массивы
- •1.1. Примеры программ обработки одномерных массивов
- •1.2. Сортировка выбором
- •1.3. Сортировка простыми вставками
- •Лекция 10 Двухмерные массивы
- •1. Двухмерные массивы
- •Лекция 11 Алгоритмы матричной алгебры
- •1. Алгоритмы матричной алгебры
- •Лекция 12 Динамические массивы
- •1. Память компьютера. Адресное пространство
- •2. Динамическая память
- •3. Адреса и указатели
- •4. Указатели и массивы. Динамические массивы
- •5. Проблемы, связанные с указателями
- •6. Поразрядные операции
- •1.2. Способы объявления и обращения к элементам двухмерных массивов
- •Лекция 14 Символы и строки
- •1. Символьный тип данных
- •2. Строки
- •Лекция 15 Структуры
- •1. Понятие структуры
- •2. Определение нового имени типа
- •3. Массивы структур. Указатели на структуры
- •3.1. Определение статического массива структур
- •3.1. Определение динамического массива из n структур
- •Лекция 16 Файлы
- •1. Потоковый ввод-вывод данных
- •3. Понятие файла. Функции работы с файлами
- •Лекция 17 Файлы
- •Лекция 18 Функции пользователя
- •I. Приёмы построения алгоритмов
- •2. Понятие функции
- •2.1. Определение функции
- •2.2. Область видимости переменных
- •2.3. Параметры функции
- •2.4. Описание функции
- •2.5. Организация вызова функции
- •2.5. Передача параметров в функцию
- •3. Рекурсия
- •Лекция 20 Нахождение приближенного значения корня нелинейного уравнения
- •На отрезке [a;b] с заданной точностью eps
- •1.1. Метод дихотомии (половинного деления)
- •1.2. Метод хорд
- •1.3. Метод касательных (Ньютона)
- •Лекция 22 Объектно-ориентированное программирование
- •Полиморфизм – это свойство класса, позволяющее определить одно и то же по имени, но разное по смыслу действие. Основные этапы ооп:
- •Уточнённое имя принадлежит классу (т.Е. Компонентной) функции
- •Лекция 23 Объектно-ориентированное программирование
- •1. Конструкторы и деструкторы
- •1.2. Определение компонентных функций
- •Лекция 25 Объектно-ориентированное программирование
- •1. Свойства классов
- •1.1. Наследование классов
- •1.2. Полиморфизм
- •Библиографический список
1.2. Метод хорд
Метод основывается на утверждении, что если на отрезке [a;b] содержится корень уравнения, то значения f(a) и f(b) имеют разные знаки, т.е. f(a)·f(b)<0.
Схема метода аналогична предыдущему. Разница заключается в поиске значения точки c. Для этого в методе хорд используется уравнение хорды – прямой, проходящей через две точки некоторой кривой. Возьмём т.А(a;f(a)) и т.B(b;f(b)) на кривой y=f(x). Уравнение прямой проходящей через эти точки . Пусть первая координата т.С(с;0) – корень уравнения f(x)=0. Подставим координаты точки C в полученное уравнение. В итоге получаем уравнение для получения значений точек сi при вычислении корня исходного уравнения:
.
Вычисляется точка c. Если |a-b|>=eps, то вычисления продолжаются. Эта проверка означает, что если |a-b|<eps, то длина отрезка, на котором находится корень уравнения, достаточна мала и вычисления можно прекратить, а за значение корня взять один из концов этого отрезка, т.е. корень уравнения вычислен с заданной точность eps. Происходит проверка f(a)·f(c)<0 или нет. Если да, то значение c присваивается переменной b, иначе значение c присваивается переменной a, т.е. исходный отрезок суживается. Если |a-b|>=eps, то опять происход-ит проверка f(a)·f(c)<0 или нет. Если да, то значение c присваивается переменной b, иначе значение c присваивается переменной a и т.д. Графически этот метод изображен на рис.15.
Опишем алгоритм и соответствующую программу для нахождения корней уравнения ln(x-3)=0 на отрезке [3.5;5] с помощью этого метода:
Алгоритм |
Программа |
объявление вещ: fa, fb, fc, a, b, c, eps ввод а ввод b fa=ln(a-3) fb=ln(b-3) если fa*fb<0 ввод eps c=а-(b-a)*fa/ (fb-fa) fc=log(c-3) пока (|a-b|>=eps ) если (fa*fc<0) b=c иначе a=c; всё если c=а-(b-a)*fa/ (fb-fa) fa=ln(a-3) fb=ln(b-3) fc=ln(c-3) всё пока печать c печать fc иначе печать “на отрезке нет корня” все_если
|
#include "stdio.h" #include "math.h" #include "iostream.h" #include "iomanip.h" int main() { float fa, fb, fc, a, b, c, eps; cout<<"a="; cin>>a; cout<<"b="; cin>>b; fa=log(a-3); fb=log(b-3); if(fa*fb<0) { cout<<"eps="; cin>>eps; c= а-(b-a)*fa/ (fb-fa); fc=log(c-3); while(fabs(a-b)>=eps) { if(fa*fc<0) b=c; else a=c; //вычисляется новое значение с c=а-(b-a)*fa/ (fb-fa); //вычисляются значения //функций в новых точках fa=log(a-3); fb=log(b-3); fc=log(c-3); } cout<<"корень уравнения х*="<<c<<endl; cout<<"значение f(x*)="<<fc<<endl; } else cout<<"неверно введены концы" <<"отрезка"<<endl; return 1; } |