- •7. Одномерные массивы 114
- •8. Обработка двумерных массивов (матриц) 162
- •9. Обработка строк 183
- •10. Тип данных, определенный пользователем. Структуры 214
- •11. Использование подпрограмм 228
- •Приложение 52 310 Список литературы 313 Введение
- •1. Этапы создания Windows-приложения
- •2. Среда Visual Basic 2005
- •2.1. Структура среды Visual Basic 2005
- •2.2. Создание нового проекта
- •2.3. Сохранение проекта
- •2.4. Выполнение приложения
- •2.5. Основные команды среды Visual Basic 2005
- •2.6. Методы тестирования
- •2.7. Отладка приложений в среде vb
- •3. Разработка интерфейса в среде vb. Основные элементы управления
- •3.1. Метка
- •3.2. Текстовое поле
- •3.3. Кнопка
- •3.4. Окно списка
- •3.5. Выравнивание положения элементов управления
- •4. Программа линейной структуры
- •4.1. Понятие переменной
- •4.2. Типы данных
- •4.3. Объявление переменных
- •4.4. Оператор присваивания
- •Оператор присваивания работает справа налево.
- •4.5. Константы
- •4.6. Арифметические операции
- •4.7. Математические функции
- •4.8. Арифметическое выражение
- •4.9. Окно ввода (InputBox)
- •4.10. Окно вывода сообщения (MsgBox)
- •4.11. Пример. Вычисление площади треугольника
- •4.12. Пример. Нахождение цифр числа
- •5. Организация ветвлений
- •5.1. Логические константы и переменные
- •5.2. Операции сравнения
- •5.3. Логические операции
- •5.4. Логическое выражение
- •5.5. Условный оператор
- •5.6. Функция iIf
- •5.7. Оператор множественного ветвления ElseIf
- •5.8. Оператор выбора Select Case
- •5.9. Оператор безусловного перехода GoTo
- •5.10. Пример. Решение линейного уравнения
- •5.11. Пример. Программа-калькулятор
- •6. Программирование повторений
- •6.1. Цикл со счетчиком
- •6.1.1. Табуляция функции
- •6.1.2. Вычисление факториала
- •6.1.3. Обработка совокупности чисел с известным числом элементов
- •6.2. Цикл с условием
- •6.2.1. Ввод с проверкой
- •6.2.2. Обработка совокупности чисел с неизвестным числом элементов
- •6.2.3. Вычисление суммы ряда по общей формуле
- •Вычисление суммы ряда с использованием рекуррентного соотношения
- •6.2.5. Вычисление произведения ряда
- •Решение нелинейных уравнений методом простой итерации
- •7. Одномерные массивы
- •Массивы всегда обрабатываются в цикле.
- •7.1. Ввод массива
- •Вывод массива в окно списка и в текстовое поле
- •7.3. Вычисление суммы и произведения элементов массива
- •7.4. Определение количества элементов массива, удовлетворяющих некоторому условию
- •7.5. Вычисление среднего арифметического и среднего геометрического элементов массива, удовлетворяющих некоторому условию
- •7.6. Нахождение максимального элемента массива
- •7.7. Нахождение минимального элемента массива, удовлетворяющего некоторому условию
- •7.8. Поиск первого элемента массива, удовлетворяющего некоторому условию
- •7.9. Поиск последнего элемента массива, удовлетворяющего некоторому условию
- •7.10. Замена одного элемента массива
- •7.11. Замена всех элементов массива, удовлетворяющих некоторому условию
- •7.12. Перестановка местами двух элементов массива
- •7.13. Формирование нового массива из некоторых элементов исходного массива
- •7.14. Проверка совпадения всех элементов массива
- •7.15. Проверка упорядоченности всех элементов массива
- •7.16. Сортировка массива методом пузырька
- •7.17. Линейная сортировка массива (методом поиска минимума)
- •Никогда нельзя использовать одновременно оба способа перестановки элементов массива.
- •8. Обработка двумерных массивов (матриц)
- •8.1. Ввод прямоугольной матрицы
- •8.2. Вывод прямоугольной матрицы в окно списка и в текстовое поле
- •8.3. Поиск максимального элемента матрицы
- •8.4. Обработка матрицы по строкам
- •8.5. Обработка матрицы по столбцам
- •8.6. Обработка квадратных матриц
- •Для обработки элементов, стоящих на любой диагонали, достаточно одного цикла. Для обработки элементов, принадлежащих к одному из треугольников, необходимо использовать вложенные циклы.
- •9. Обработка строк
- •9.1. Основные функции обработки строк
- •9.2. Посимвольная обработка строки
- •9.3. Формирование массива слов строки
- •9.4. Формирование строки из массива слов
- •9.5. Слова-палиндромы
- •9.6. Выделение чисел из строки
- •9.7. Сравнение строк
- •9.8. Обработка многострочного текста
- •10. Тип данных, определенный пользователем. Структуры
- •10.1. Описание структуры. Область видимости. Понятие метода
- •10.2. Оператор With
- •10.3. Ввод массива структур
- •10.4. Вывод массива структур
- •10.5. Поиск в массиве структур
- •10.6. Формирование нового массива из некоторых элементов исходного массива
- •10.7. Сортировка массива структур
- •11. Использование подпрограмм
- •11.1. Определение процедуры и функции. Описание процедуры и функции
- •11.2. Передача параметров по ссылке и по значению
- •11.3. Формальные параметры и фактические переменные
- •11.4. Локальные и глобальные переменные
- •11.5. Static-переменные
- •Приложение 1
- •Приложение 2
- •Приложение 3
- •Приложение 4
- •Приложение 5
- •Приложение 6
- •Приложение 7
- •Приложение 8
- •Приложение 9
- •Приложение 10
- •Приложение 11
- •Приложение 12
- •Приложение 13
- •Приложение 14
- •Приложение 15
- •Приложение 16
- •Приложение 17
- •Приложение 18
- •Приложение 19
- •Приложение 20
- •Приложение 21
- •Приложение 22
- •Приложение 23
- •Приложение 24
- •Приложение 25
- •Приложение 26
- •Приложение 27
- •Приложение 28
- •Приложение 29
- •Приложение 30
- •Приложение 31
- •Приложение 32
- •Приложение 33
- •Приложение 34
- •Приложение 35
- •Приложение 36
- •Приложение 37
- •Приложение 38
- •Приложение 39
- •Приложение 40
- •Приложение 41
- •Приложение 42
- •Приложение 43
- •Приложение 44
- •Приложение 45
- •Приложение 46
- •Приложение 47
- •Приложение 48
- •Приложение 49
- •Приложение 50
- •Приложение 51
- •Приложение 52
- •Список литературы
Решение нелинейных уравнений методом простой итерации
Рассмотрим еще один пример использования цикла с условием. Это один из наиболее распространенных способов решения нелинейных уравнений вида
.
Он называется метод простой итерации. Исходя из особенностей решаемой задачи, выбирается некоторое начальное приближение к решению уравнения. Как правило, оно обозначается x0. Все последующие приближения к корню уравнения вычисляются по формуле
,
где xk– очередное приближение к корню уравнения,xk-1– предыдущее приближение к корню уравнения. Процесс продолжается до тех пор, пока расстояние между точкамиxkиxk-1 не станет меньше некоторого заранее заданного числа, которое является требуемой точностью вычислений ε. Схема работы метода простой итерации приведена на рис. 34.
Рис. 34.Метод простой итерации
Рассмотрим особенности программой реализации данного алгоритма. Требуется решить уравнение
методом простой итерации с заданной точностью. Начальное значение x0= 0,5. Единственным исходным данным для этой задачи является требуемая точность вычислений ε. Для ее ввода будем использовать функциюInputBox. Результатами программы будут значение корня уравнения, значение его правой части и количество потребовавшихся шагов цикла. Для проверки правильности работы программы на каждой итерации будем выводить номер шага и текущее значение корня уравнения. Весь вывод информации будем осуществлять с помощью окна списка с именемlstA.
Для решения задачи нам потребуются следующие переменные: xTek– очередное приближение к корню уравнения,xPred– предыдущее приближение к корню уравнения, eps– требуемая точность вычислений. Все эти переменные имеют рациональный тип данных. Для повышения точности наших вычислений будем использовать типDouble.
Dim xTek, xPred, eps As Double
Так как на каждой итерации требуется выводить ее номер, то для его хранения потребуется целочисленная переменная. Назовем ее n.
Dim n As Integer
Очищаем окно списка.
lstA.Items.Clear()
Вводим требуемую точность вычислений.
eps = Val(InputBox("Введите точность"))
Задаем начальное приближение к корню уравнения.
xTek = 0.5
Начальное приближение также называют нулевым. Поэтому номер итерации равен нулю.
n = 0
Организуем основной цикл.
Do
В окно списка выводим номер итерации и значение текущего приближения к корню уравнения. Использование константы vbTab позволяет организовать вывод информации в две колонки.
lstA.Items.Add(Str(n) + vbTab + Str(xTek))
Вычисляем очередное приближение к корню уравнения. Запоминаем значение текущего приближения как предыдущее приближение к корню уравнения.
xPred = xTek
При переходе на следующую итерацию ее номер увеличивается на единицу.
n += 1
По методу простой итерации вычисляем новое приближение к корню уравнения. Для этого подставляем значение предыдущего приближения в выражение, стоящее в правой части уравнения.
xTek = Math.Cos(xPred)
Проверяем, насколько мало расстояние между текущим и предыдущим приближениями. Если это расстояние меньше требуемой точности вычислений, значит, мы нашли корень уравнения с нужной точностью, и процесс вычислений можно остановить.
Loop Until Math.Abs(xTek - xPred) < eps
Выводим горизонтальную черту, чтобы зрительно отделить результаты работы программы от промежуточных значений.
lstA.Items.Add("-----------------------------------")
В окно списка выводим полученные результаты: значение последнего приближения к корню уравнения, значение правой части уравнения и количество выполненных итераций (оно совпадает с количеством повторов цикла). Если программа написана правильно, то разница между первыми двумя числами будет незначительной.
lstA.Items.Add("x =" + Str(xTek))
lstA.Items.Add("cos(x) =" + Str(Math.Cos(xTek)))
lstA.Items.Add("Количество шагов =" + Str(n))
Полный текст программы представлен в приложении 20. Пример работы программы приведен на рис. 35. Исходные данные для этого случая: eps = 10-3.
Рис. 35.Пример работы программы решения нелинейного уравнения