Определенного интеграла
В задании используется элемент управления ScriptControl, который позволяет писать исполняемый код – подынтегральное выражение, в момент выполнения приложения.
Постановка задачи
Разработать программу приближённого вычисления определенного интеграла по формулам трапеций. Программа должна вычислять любой определенный интеграл, а не только те, которые предусмотрены в программе заранее, позволять изменять пределы интегрирования.
Анализ задачи
Для интеграла, который в общем виде изображен на рис. 9.1, формулы трапеций для приближенного вычисления интеграла I можно записать в виде:
(9.1)
где
Δx – шаг интегрирования;
n – количество точек интегрирования.
Основная проблема – как использовать программу для приближенного вычисления любого интеграла. Чтобы это стало возможным, необходимо найти способ, при котором текстовое выражение по вычислению подынтегральной функции, записанное по правилам программирования, воспринималось как программный код Visual Basic и выполнялось системой программирования VB.
Если этого нельзя будет реализовать, тогда для вычисления нового интеграла придется вносить изменения в программу, и откомпилированную программу можно будет использовать для вычисления только одного определенного интеграла.
Алгоритм задачи
Вид формы при запуске приложения представлен на рис. 9.1.
Из рис. 9.1 понятно, как выглядит блок ввода начальных данных.
Блок приближенного вычисления интеграла по формулам трапеций (9.1) оформлен в виде процедуры.
И еще один блок – это вычисление подынтегральной функции. Этот блок также представлен как процедура, но записывается вся процедура как скрипт, в виде текстовой переменной. Выполняется этот скрипт только при построении на форме объекта управления ScriptControl.
Разработка пользовательского интерфейса
После загрузки нового проекта Standart.exe разместите на форме следующие элементы управления, установив для них свойства, указанные в табл. 9.1.
Таблица 9.1
Объект | Свойство | Установленное значение |
Form1 | Имя | frmИнтег |
Caption | Приближенное вычисление определенного интеграла | |
Label1 | Caption | Запрограммируйте подынтегральное выражение: |
Label2 | Caption | и задайте пределы интегрирования |
Label3 | Caption | I = |
Label4 | Caption | Интеграл I = |
Label5 | Caption | Результат вычислений |
Label6 | Caption | - точность расчета |
Text1 | Имя | txFormula |
Text2 | Имя | txtA |
Text3 | Имя | txtB |
Text4 | Имя | txtТочность |
ScriptControl1 | все свойства | принять по умолчанию |
Image1 | Picture | (Bitmap) – внедрить формулу, введенную в Word с помощью редактора формул |
Line1 | BorderWith | |
Command1 | Имя | cmdИнтеграл |
Caption | Вычислить | |
Command2 | Имя | cmdEnd |
Caption | Выход |
Для размещения на форме элемента управления ScriptControl необходимо сначала установить его на панель управления. Для этого следует щелкнуть правой кнопкой на панели управления и в контекстном меню выполнить команду Компоненты… В диалоговом окне такого же названия на вкладке Управление отметить флажком Microsoft Script Control 1.0 и нажать кнопку ОК.
После размещения на форме всех элементов управления перейдите к написанию программного кода.
Написание программного кода
Перед написанием процедур объявите глобальные переменные в модуле формы в разделе (General) (Declarations):
Dim formula As String, x As Variant, y As Variant
Dim acode As String
Для события Click кнопки cmdИнтеграл (<Вычислить>) напишите следующий код:
Private Sub cmdИнтеграл_Click()
Dim a1 As Single, b1 As Single, n As Long
Dim OpInt As Single, Y1 As Single
Dim Точно As Single, i As Integer
On Error GoTo err1 ‘перехватываем ошибку, вызванную
‘ неправильным вводом подынтегрального выражения или
‘ или пределов интегрирования
frmИнтег.Cls
Cls
Точно = Val(txtТочность)
If Точно = 0 Then Точно = 0.0001
formula = txtFormula
a1 = Val(txtA): b1 = Val(txtB)
n = 200
'формирование скрипта, который выполняется в процедуре Fun():
acode = "Sub F(x, y):" & "y = " & formula & ":" & "End Sub"
ScriptControl1.Reset
ScriptControl1.AddCode acode
‘ обращаемся к процедуре Интеграл:
Интеграл a1, b1, n, OpInt, Точно
lblResult = OpInt ‘ выдаем вычисленное значение интеграла
err1:
If Err Then
MsgBox "Проверьте синтксис введенного выражения _ f(x)" & vbCrLf & "и пределы интегрирования", _
vbCritical + vbOKOnly, "Внимание!"
Exit Sub ‘ досрочно выходим из процедуры
End If
End Sub
В модуле формы программируем процедуру вычисления определенного интеграла методом трапеций с именем Интеграл и пятью формальными параметрами.
Sub Интеграл(a As Single, b As Single, n As Long, _
IntO As Single, Точность As Single)
Dim H As Single, i As Long, IntO_1 As Single, x1 As Single
frmИнтег.Cls
'a, b - пределы интегрирования, n - кол-во отрезков
'Fun() -подынтегральная функция
'IntO - результат - определенный интеграл
IntO = 200
IntO_1 = 300
kol = 1
Do
kol = kol + 1
IntO_1 = IntO
H = (b - a) / n: x = a: IntO = 0 's = 0:
For i = 1 To n - 1
x = x + H: Fun: IntO = IntO + y
Next i
x = a: Fun: ya = y
x = b: Fun: yb = y
IntO = H * (ya + yb + 2 * IntO) / 2
n = n * 1.2
Loop While Abs(IntO - IntO_1) > Точность
End Sub
Функция Fun() создана для обращения к функции F, которая вводится пользователем и выполняется с помощью объекта управления ScriptControl1.
Sub Fun()
ScriptControl1.Run "F", x, y
End Sub
Private Sub cmdEnd_Click()
End
End Sub
Остальные практические задания по программированию на Visual Basic содержатся в части 2 Методических указаний.
Дата добавления: 2015-02-05; просмотров: 1179;