Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
информатика.doc
Скачиваний:
51
Добавлен:
22.03.2016
Размер:
12.91 Mб
Скачать

4. Табулирование функций в объектах ListBox

При решении задач табулирования функций в объектах ListBox создаваемые объекты ListBox можно размещать, как на специально созданных объектах UserForm, так и на листах Excel, используя при этом для вызова и табуляции кнопки (объекты CommandButton).

Создание пользовательской формы c объектом ListBox организуется следующим образом:

  1. Войти в VBAAlt-F11;

  1. Выбрать Insert (вставка);

  1. Выбрать UserForm.

Затем на появившуюся “платформу” объекта UserForm с панели Toolbox, последовательно переместить:

один объект ListBox;

три объекта Label;

три объекта TextBox;

три объекта OptionButton;

два объекта CommandButton,

расположив их, как показано на рис. 1.10.

Рис. 1.10.

Далее войти в VBA (Alt-F11), выбрать объект UserForm.

Затем, выбрав, объект CommandButton1, написать соответствующую программу, обеспечивающую табуляцию функций в объекте ListBox1.

2.2 Программа Табулирование функций в объекте ListBox

Private Sub CommandButton1_Click()

Dim i As Integer

Dim x As Double

Dim XN As Double

Dim XK As Double

Dim DX As Double

Dim S() As String

If Not IsNumeric(TextBox1) Or Not IsNumeric(TextBox2) Or Not IsNumeric(TextBox3) Then

MsgBox "неверные данные"

Exit Sub

End If

XN = CDbl(TextBox1)

XK = CDbl(TextBox2)

DX = CDbl(TextBox3)

If OptionButton1 = True Then

ReDim S(Round(Abs(XK - XN) / DX) + 1, 1 To 3) As String

i = 0

S(i, 1) = "N": S(i, 2) = "x": S(i, 3) = "y"

i = i + 1

x = XN

Do While x <= XK

y = (2 + (Sin(x)) ^ 2) / (1 + x ^ 2) ' функция 1 семестра

S(i, 1) = i: S(i, 2) = Format(x, "0.0"): S(i, 3) = Format(y, "0.0")

x = x + DX: i = i + 1

Loop

End If

If OptionButton2 = True Then

ReDim S(Round(Abs(XK - XN) / DX) + 1, 1 To 4) As String

i = 0

S(i, 1) = "N": S(i, 2) = "x": S(i, 3) = "g1": S(i, 4) = "g2"

i = i + 1

x = XN

Do While x <= XK

y = g(x) ' функция 1 семестра

S(i, 1) = i: S(i, 2) = Format(x, "0.0")

If x <= 0 Then S(i, 3) = Format(y, "0.0000") Else S(i, 4) = Format(y, "0.0000")

x = x + DX: i = i + 1

Loop

End If

If OptionButton3 = True Then

ReDim S(Round(Abs(XK - XN) / DX) + 1, 1 To 5) As String

i = 0

S(i, 1) = "N": S(i, 2) = "x": S(i, 3) = "z1": S(i, 4) = "z2": S(i, 5) = "z3"

i = i + 1

x = XN

Do While x <= XK

y = z(x) ' функция 1 семестра

S(i, 1) = i: S(i, 2) = Format(x, "0.0")

If x < 0 Then S(i, 3) = Format(y, "0.0000")

If (x >= 0) And (x <= 1) Then S(i, 4) = Format(y, "0.0000")

If x > 1 Then S(i, 5) = Format(y, "0.0000")

x = x + DX: i = i + 1

Loop

End If

With ListBox1

.ColumnCount = 5

.List = S

End With

End Sub

Private Sub CommandButton2_Click()

Unload Me

End Sub

Function g(x)

If x <= 0 Then g = (3 * x ^ 2) / (1 + x ^ 2) Else g = Sqr(1 + 2 * x / (1 + x ^ 2))

End Function

Function z(x)

If x < 0 Then z = 3 * x + Sqr(1 + x ^ 2)

If (x >= 0) And (x <= 1) Then z = 2 * Cos(x) * Exp(-2 * x)

If x > 1 Then z = 2 * Sin(3 * x)

End Function

Некоторые комментарии к программе:

В модуле Private Sub CommandButton1_Click(), программно поддерживающем объект CommandButton1, используется функция IsNumeric(TextBox1), проверяющая являются ли данные, помещенные в объекте TextBox1 или TextBox2 цифровыми;

– В программе также используется функция CDbl(TextBox), обеспечивающая преобразование данных объектов TextBox1 и TextBox2 в цифровые;

– В модуле используется динамическое объявление массива

Dim S() As String,

с последующим уточнением мерности массива;

– Если включен объект OptionButton1, то табулируется функция y=f(x), вычисленные значения которой и отображаются в объекте ListBox1, рис. 10.10, предварительно уточняется мерность массива S, оператором

ReDim S(Round(Abs(XK - XN) / DX) + 1, 1 To 3) As String,

который можно размещать в любом месте программы. Диапазон изменения индексов по первому измерению от 0 до величины вычисленного результата арифметического выражения

Round(Abs(XK - XN) / DX) + 1 (+ 1, для того, чтобы увеличить количество элементов массива с учетом “шапки таблицы”), по второму измерению – от 1 до 3;

– Если включен объект OptionButton2, то табулируется функция g=f(x), вычисленные значения которой и отображаются в объекте ListBox1, рис. 10.11, предварительно уточняется мерность массива S, оператором

ReDim S(Round(Abs(XK - XN) / DX) + 1, 1 To 3) As String,

который можно размещать в любом месте программы. Диапазон изменения индексов по первому измерению от 0 до величины вычисленного результата арифметического выражения

Round(Abs(XK - XN) / DX) + 1 (+ 1, для того, чтобы увеличить количество элементов массива с учетом “шапки таблицы”), по второму измерению – от 1 до 4;

Рис. 1.11

– Если включен объект OptionButton3, то табулируется функция z=f(x), вычисленные значения которой и отображаются в объекте ListBox1, рис. 1.12, предварительно уточняется мерность массива S, оператором

ReDim S(Round(Abs(XK - XN) / DX) + 1, 1 To 3) As String,

который можно размещать в любом месте программы. Диапазон изменения индексов по первому измерению от 0 до величины вычисленного результата арифметического выражения

Round(Abs(XK - XN) / DX) + 1 (+ 1, для того, чтобы увеличить количество элементов массива с учетом “шапки таблицы”), по второму измерению – от 1 до 5;

Рис. 1.12.

– Формулы функций g=f(x) и z=f(x) оформлены в виде модулей пользовательских функций Function g(x) и Function z(x);

– Объекту ListBox1 сообщается свойство .ColumnCount, в соответствии с которым в объекте ListBox1 устанавливается значение числа колонок = 5, максимальное из возможных вариантов количества столбцов при табулировании функций y=f(x), g=f(x) и z=f(x);