При запуске программы появляется следующее окно:
Рисунок 6. Окно программы.
В окне программы расположены исходные данные в элементе управления Label, результат (элемент управления Label), таблицы значений на элементе управления ListBox и кнопка «Вычислить».
Реализация программного модуля
Код программы
Dim n As Integer 'количество делений отрезка
Dim i As Integer 'счетчик итераций
Dim i1 As Double 'переменная для нахождения интеграла
Dim i2 As Double 'переменная для нахождения интеграла
Dim x As Double 'значение аргумента
Dim h As Double 'шаг
Private Sub UserForm_Initialize()
Application.Visible = False 'делаем Excel невидимым
End Sub
Private Sub CommandButton1_Click()
Label3.Caption = Trap(0, 1) 'вычисление интеграла методом трапеции
Label5.Caption = Simp(0, 1) 'вычисление интеграла методом Симпсона
End Sub
Public Function Trap(a As Double, b As Double) As Double ' нахождение интеграла методом трапеции
n = 2
i2 = 0
h = 0.1
With ListBox1
.ColumnCount = 2
ListBox1.AddItem "x"
ListBox1.ColumnWidths = "30;30"
ListBox1.List(0, 1) = "Результат"
Do
n = n * 2
h = (b - a) / n
|
|
i1 = i2
i2 = 0
For i = 1 To n
x = a + h * i
ListBox1.AddItem x
i2 = i2 + h * (f(x) + f(a + h * (i - 1))) / 2
ListBox1.List(i, 1) = i2
Next i
Loop While (Abs(i1 - i2) < 0.005)
End With
Trap = i2
End Function
Public Function Simp(a As Double, b As Double) As Double ' нахождение интеграла методом Симпсона
n = 2
i2 = 0
h = 0.1
With ListBox2
.ColumnCount = 2
.ColumnWidths = "30;30"
.AddItem "x"
.List(0, 1) = "Результат"
Do
n = n * 2
h = (b - a) / n
i1 = i2
i2 = 0
For i = 0 To n
x = a + h * i
.AddItem x
If (i = 0 Or i = n) Then
i2 = i2 + f(x) * (b - a) / (3 * n)
.List(i + 1, 1) = i2
Else
If (i Mod 2 = 0) Then
i2 = i2 + f(x) * 2 * (b - a) / (3 * n)
.List(i + 1, 1) = i2
Else
If (i Mod 2 <> 0) Then
i2 = i2 + f(x) * 4 * (b - a) / (3 * n)
.List(i + 1, 1) = i2
End If
End If
End If
Next i
Loop While (Abs(i1 - i2) < 0.005)
End With
Simp = i2
End Function
Public Function f(x As Double) As Double ' нахождение значения функции
f = 1 / Sqr(1 + x ^ 2)
End Function
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 'Закрытие формы
Select Case MsgBox("Закрыть окно?", vbYesNo + vbQuestion, "Завершение работы")
Case vbYes
Cancel = 0
Application.Quit
Case vbNo
Cancel = -1
End Select
End Sub
Описание используемых операторов и функций
При разработке программы были использованы следующие операторы и функции:
Оператор присваивания – задает переменной значение другой переменной, выражения или объекта.
Условный оператор (If…Then…Else…End If) – позволяет выбирать и выполнять действия в зависимости от истинности некоторого условия.
Оператор цикла For – позволяет повторять группу операторов заданное число раз.
Цикл с постусловием (Do…Loop While) – используются, когда заранее неизвестно, сколько раз будет выполняться тело цикла, но хотя бы раз тело цикла выполнится.
Функция f(x As Double) – функция, которая вычисляет значение функции в зависимости от аргумента.
Функция Abs(x) – функция, которая возвращает значение аргумента по модулю.