Код второй формы frmRezalt
Private Sub cmdBack_Click() ' Объявление локальной процедуры
' cmdBack_Click(), которая выполняется при
' однократном нажатии на командную кнопку
' cmdBack
frmMain.Show ' Команда отображает форму frmMain на экран
Unload Me ' Команда выгружает текущую форму
End Sub ' Конец локальной процедуры
' cmdBack_Click()
Private Sub cmdEnd_Click() ' Объявление локальной процедуры
' cmdEnd_Click(), которая выполняется при
' однократном нажатии на командную кнопку
' cmdEnd
End ' Команда завершает выполнение программы
End Sub ' Конец локальной процедуры cmdEnd_Click()
Private Sub cmdRandomaze_Click() ' Объявление локальной процедуры
' cmdRandomaze_Click(), которая выполняется
' при однократном нажатии на
' командную кнопку cmdRandomaze
Call Vvod ' Вызов (запуск на выполнение)
' глобальной процедуры Vvod
Call Form_Load ' Вызов (запуск на выполнение)
' локальной процедуры Form_Load
End Sub ' Конец локальной процедуры
' cmdRandomaze_Click()
Private Sub Form_Load() ' Объявление локальной процедуры
' Form_Load(), которая выполняется
' при загрузке формы frmRezalt
grdMas.Cols = 3 'Задается общее количество столбцов
'в элементе MSFlexGrid
grdMas.Rows = N + 1 'Задается общее количество строк
'в элементе MSFlexGrid
grdMas.FixedCols = 0 'Задается общее количество фиксированных
'столбцов (окрашенных)
'в элементе MSFlexGrid
grdMas.FixedRows = 1 'Задается общее количество фиксированных
'строк (окрашенных)
'в элементе MSFlexGrid
grdMas.TextMatrix(0, 0) = "Массив" 'В ячейки с координатами (0;0)
'записываем слово Массив
grdMas.TextMatrix(0, 1) = "X" 'В ячейку с координатами (0;1)
'записываем слово Х
grdMas.TextMatrix(0, 2) = "Y" 'В ячейку с координатами (0;2)
'записываем слово Y
For k = 1 To N 'Объявление цикла для перебора
'всех элементов массива
grdMas.TextMatrix(k, 0) = k 'В ячейку з координатами (k;0)
'записываем номера элементов
grdMas.TextMatrix(k, 1) = X(k) 'В ячейку з координатами (k;1)
'записываем значения элементов
'массива Х
grdMas.TextMatrix(k, 2) = Y(k) 'В ячейку з координатами (k;2)
'записываем значения элементов
'массива Y
S = S + 2 / (X(k) + Y(k)) 'Расчет значения суммы по
'заданной формуле
Next 'Конец цикла
lblSum.Caption = "Сумма S=" + Str(S) ' Вывод значения суммы
' в элемент Label (lblSum)
End Sub ' Конец локальной процедуры Form_Load
СОДЕРЖАНИЕ ОТЧЕТА
1. Исходные данные и постановка задачи.
2. Текст кода на языке Visual Basic.
3. Подробное описание использованных свойств, методов и функций при написании программы.
4. Результаты расчета.
5. Блок-схема алгоритма программы.
Варианты заданий
1. Дан одномерный массив Y(10 + n). Найти:
где .
2. Вычислить значение функции:
,
где хi - заданные произвольно элементы одномерного массива размерностью (12 + n).
3. Вычислить сумму положительных элементов массива: х1, х2, ... , х30.
4. Вычислить среднее арифметическое элементов массива: х1, х2, ... , х25.
5. Вывести на печать диагональные элементы произвольно заданного двумерного массива размерностью (6 + n)X(6 + n).
6. По произвольно заданным 15-ти элементным массивам a, b, c вычислить:
.
7. Подсчитать количество положительных и отрицательных элементов массива: а1, а2, ... , а20.
8. Найти наибольший элемент массива х1, х2, ... , х30 и его порядковый номер.
9. Упорядочить элементы массива а1, а2, ... , а25, расположив их по убыванию в том же массиве.
10. Найти наименьший элемент массива х1, х2, ... , х30 и его порядковый номер.
11. Вывести на печать номера элементов произвольно заданного массива А(19 + n), удовлетворяющих условию 0< Ai < 9.
12. Найти наименьший из положительных элементов массива х1, х2, ... , х30 и его порядковый номер.
13. Определить количество четных элементов массива Х(30) и переписать их в массив Y.
14. Вывести среднее арифметическое положительных элементов произвольно заданного массива размерностью 3 X (5 + n).
15. В массиве Z(19) найти наибольший и наименьший элементы и поменять их местами.
16. Расположить элементы второй строки матрицы М(13,10) в порядке убывания.
17. Найти наибольший из отрицательных элементов массива х1, х2, ... , х30 и его порядковый номер.
18. Найти наименьший элемент массива V(12 + n, 9 + n) и его порядковый номер.
19. Найти сумму значений наибольшего и наименьшего элементов массива K(19 + n).
20. Переписать в массив Y в обратном порядке элементы произвольно заданного массива Z(20 + n).
21. Вывести на печать первый отрицательный элемент и его номер произвольно заданного массива размерностью 5 х (5 + n).
22. Вывести среднее арифметическое элементов произвольно заданного массива размерностью 4 х (5 + n).
23. Вычислить значение функции (х = 1,53), коэффициенты Ai задать произвольно:
.
24. Определить сумму квадратов максимального и минимального элементов двумерной матрицы размерностью 5X10. Численные значения элементов массива задать произвольно.
25. Дан строковый одномерный массив размерностью 25. Разработать программу для печати текста, образованного 11 - 15-м и 24-м элементами массива. Значения всех элементов массива задать произвольно.
26. Упорядочить элементы массива а1, а2, ... ,а25, расположив их по возрастанию в том же массиве.
27. По произвольно заданным 15-ти элементным массивам a, b, c вычислить:
.
28. Дан двумерный строковый массив размерностью 5 X 5. Составить предложение из диагональных элементов массива. Строковые значения элементов массива задать произвольно.
29. Найти наименьший из отрицательных элементов массива V(10 + n, 9 + n) и его порядковый номер.
30. Расположить элементы четвертой строки матрицы М(10, 10) в порядке возрастания.
ИНДИВИДУАЛЬНОЕ ЗАДАНИЕ № 6
Численное решение уравнений. Редактор меню Visual Basic
ЦЕЛЬ РАБОТЫ
1. Приобретение навыков алгоритмизации и программирования численного решения уравнений.
2. Приобретение навыков создания экранных форм Visual Basic и создания на них элементов управления.
3. Приобретение навыков создания модулей и объявления глобальных переменных.
4. Приобретение навыков загрузки одних экранных форм с других.
5. Приобретение навыков создания меню.
6. Приобретение навыков работы с переключателем (OptionButton).
7. Приобретение навыков работы с рамкой (Frame).
8. Реализация алгоритма вычислительного процесса на языке Visual Basic.
СОДЕРЖАНИЕ ОТЧЕТА
1. Исходные данные и постановка задачи.
2. Текст кода на языке Visual Basic.
3. Подробное описание использованных свойств, методов, объектов и функций при написании программы.
4. Результаты расчета.
5. Блок-схема алгоритма программы.
Методические указания
Метод половинного деления. Пусть задано уравнение f(x)=0. Функция f(x) непрерывна на интервале [a,b], причем f(a)·f(b)<0, т.е. в каком-то месте этого интервала график функции пересекает ось х (знаки f(a) и f(b) разные). Значит в точке пересечения f(x) превращается в ноль и величина x в точке пересечения - это точное значение корня. Для нахождения этого корня делим отрезок [a,b] пополам. Если f((a + b)/2) = 0, то x = (a + b)/2 является корнем уравнения. Если f((a + b)/2) < > 0, то выбираем ту из половин [a,(a+b)/2 или (a+b)/2,b], на концах которой функция имеет противоположные знаки, (значит, корень находится в этой половине). Эту выбранную половину [a,b] снова делим пополам, опять проверяем знаки на концах, выбираем четверть отрезка [a,b], где знаки f(x) противоположны и т.д. При каждом разбиении пополам длину сужающегося отрезка, где ищем корень, сравниваем с заданной точностью, и, если на очередном шаге вычислений неравенство: |a–b| < ε станет справедливым, то можно считать, что решение найдено, а за приближенное значение корня принять любой из концов отрезка [a,b] (точку последнего разбиения).
Метод Ньютона (касательных). Решение алгебраических и трансцендентных уравнений по методу Ньютона применяется при условии, что на интервале [a,b], который называется интервалом отделения корня (или интервалом изоляции корня) уравнения f(x) = 0 первая и вторая производные функции f(x), т.е., f '(x) и f "(x) непрерывны и сохраняют определенные знаки (функция не имеет перегибов и экстремумов).
Процесс нахождения корня заключается в следующем. Принимается любое начальное приближение искомого значения корня внутри интервала [a,b] и заносится в рабочую ячейку х.
В этой точке вычисляется значение функции f(x0) и первой производной f'(x0).
Организуется цикл, в котором каждое последующее приближение корня определяется по рекуррентной формуле:
Контроль точности вычисления корня ведется по абсолютному значению разности двух соседних приближений, т.е. расчет будет продолжаться до тех пор пока:
Метод итераций (метод последовательных приближений). При использовании метода последовательных приближений исходное уравнение должно быть записано в виде: x = (x), которое называется итерационной формулой. Каким бы громоздким и сложным ни было исходное уравнение, надо разрешить его относительно одного из неизвестных, перенося все другие в правую часть итерационной формулы, причем рекомендуется выбирать то неизвестное, которое потребует наименьших преобразований для своего выделения.
Например: уравнение x2-sinx+2x=0 проще всего разрешить относительно третьего члена, т.е. итерационная формула будет: x = 0,5sinx-0,5x2.
В любых других случаях итерационная формула будет сложнее. Затем необходимо проверить сходимость итерационного процесса на интервале изоляции корня [а,b]. Итерационный процесс сходится, если первая производная правой части итерационной формулы в выбранном интервале по модулю меньше 1, т.е. |j’(x)| < 1.
В приведенном примере j’(x) = 0,5cosx - x, поэтому в интервале [0,1] процесс будет сходящимся. Если процесс сходится, то из интервала изоляции корня выбирается любая точка (значение x), которая принимается за начальное (нулевое) приближение искомого корня x0. Для получения каждого следующего приближения x1, x2, ... в правую часть итерационной формулы вместо x подставляется сначала x0, затем полученное значение x1, потом x2 и т.д.:
x1 = j(x0)
x2 = j(x1)
................
xn = j(xn-1)
Каждое следующее приближенное значение корня в сходящемся процессе будет ближе к искомому истинному значению.
Повторяющиеся расчеты правой части выполняются в цикле. Контроль достижения требуемой точности производится по модулю разности между соседними приближениями и, если выполнится условие |xn+1 - xn| Ј ε, то итерационный процесс прекратится и на печать будет выдано последнее рассчитанное значение корня.
Преимуществом итерационных методов является то, что ошибки округлений и арифметических операций, выполняемых в цикле, не влияют на окончательный результат вычислений, т.к. вычислительная машина неуклонно повторяет расчеты, пока не будет достигнута заданная программой точность расчета.
Внешний вид экранных форм:
ТЕКСТ ПРОГРАММЫ
Private Sub cmdEnd_Click()
End
End Sub
Private Sub cmdStart_Click()
Call mnuPusk_Click
End Sub
Private Sub Form_Load()
If opt1(0).Value = True Then E = 0.001
If opt1(1).Value = True Then E = 0.0001
If opt1(2).Value = True Then E = 0.00001
If opt1(3).Value = True Then E = 0.000001
End Sub
Private Sub mnuDiscr_Click()
Load frmDisk
frmDisk.Show
End Sub
Private Sub mnuExit_Click()
End
End Sub
Private Sub mnuIter_Click()
mnuPolovin_delen.Checked = False
mnuNutona.Checked = False
mnuIter.Checked = True
End Sub
Private Sub mnuNutona_Click()
mnuPolovin_delen.Checked = False
mnuNutona.Checked = True
mnuIter.Checked = False
End Sub
Private Sub mnuPolovin_delen_Click()
mnuPolovin_delen.Checked = True
mnuNutona.Checked = False
mnuIter.Checked = False
End Sub
Private Sub mnuPusk_Click()
Call Form_Load
If mnuPolovin_delen.Checked = True Then
txtRez.Text = "Метод не поддерживается"
ElseIf mnuNutona.Checked = True Then
txtRez.Text = "Метод не поддерживается"
ElseIf mnuIter.Checked = True Then
X = 0.2
M1: Xn = F(X)
If Abs(X - Xn) >= E Then X = Xn: GoTo M1
txtRez.Text = "Корень уравнения х =" + Str(X)
End If
End Sub
Private Function F(X) As Single
F = 0.2 + Sin(X + 1)
End Function
Private Sub nmuAbout_Click()
Load frmAbout
frmAbout.Show
End Sub
СОДЕРЖАНИЕ ОТЧЕТА
1. Исходные данные и постановка задачи.
2. Текст кода на языке Visual Basic.
3. Подробное описание последовательности действий при написании программы.
4. Результаты расчета.
5. Блок-схема алгоритма программы.
Варианты заданий
Вариант | Вычислить с точностью до ε = 1×10-6 | Метод |
Корень уравнения: 2x - ln(x + 3) = 0 | Ньютона | |
Корень уравнения: , при а = 1000 | Простых итераций | |
Корень уравнения: в интервале [-1,1] | Половинного деления | |
Вариант | Вычислить с точностью до ε = 1×10-6 | Метод |
Корень алгебраического уравнения: в интервале [1,2] | Ньютона | |
Корень трансцендентного уравнения и определить количество итераций: | Простых итераций | |
Корень уравнения в интервале [0,1]: | Половинного деления | |
Решить уравнение при а = 999 и определить количество итераций: | Простых итераций | |
Решить уравнение: , принять х = n + 1 | Ньютона | |
Решить уравнение: | Простых итераций | |
Корень уравнения: в интервале [2;3], определить количество итераций | Простых итераций | |
Вычислить в интервале [0;2] корень уравнения: , определить число итераций | Ньютона | |
Найти в интервале [0;1] корень уравнения: | Простых итераций | |
Найти в интервале [0;1,5] корень уравнения: | Половинного деления | |
Решить уравнение: | Простых итераций | |
Найти в интервале [-1;0] корень уравнения: | Простых итераций | |
Найти на отрезке [0;p/4] корень уравнения: | Ньютона | |
Вычислить корень уравнения: | Простых итераций | |
Вычислить корень уравнения: | Последовательных приближений | |
Найти на отрезке [0;p/2] корень уравнения: | Ньютона | |
Вычислить корень уравнения: | Простых итераций | |
Корень уравнения в интервале [-1;1]: | Половинного деления | |
Вычислить корень уравнения: | Простых итераций | |
Корень уравнения: , при а = 13 | Простых итераций | |
Корень уравнения: , | Простых итераций | |
Вариант | Вычислить с точностью до ε = 1×10-6 | Метод |
Корень уравнения в интервале [0;1]: | Половинного деления | |
Корень алгебраического уравнения: в интервале [1;1,9] | Ньютона | |
Вычислить корень уравнения: | Простых итераций | |
Найти на отрезке [0;p/2] корень уравнения: | Ньютона | |
Найти в интервале [0;1] корень уравнения: | Половинного деления | |
Вычислить в интервале [0;1,5] корень уравнения: и определить число итераций | Ньютона |