Как подключить библиотеку DLL ? |
Управление ходом выполнения программ. Примеры типовых алгоритмов
Практическая работа 11. Создание функции
Создадим функцию вычисления факториала числа ( Factor ), используем тип вводимых данных - Integer, возвращаемых - Double, тогда максимальное возвращаемое значение ограничивается числом 1.80Е308. Примем факториал равным нулю, если значение аргумента превышает 170 (факториал 170 соответствует максимальному значению принятого типа данных). Последовательность действий:
- Создать текстовые поля: txtInp - для ввода числа, факториал которого нужно вычислить, txtOut - для вывода результата и командную кнопку, рис. 2.2.,
- для создания функции использовать: область окна кода ( General ) ( Declarations ) меню Инструменты Добавить процедуру в поле выведенного диалогового окна ввести имя функции Factor в поле Тип сделать щелчок на Function, в поле Район - щелчок на Public ОК выводятся инструкции Function и End Function.
В качестве аргумента функции используется вводимое в поле TextBox (после старта проекта) число, оно описывается "As Integer" (ввести это в скобки, относящиеся к инструкции Function ). Тип возвращаемого функцией значения нужно описать "As Double" (ввести это за скобками в строке Function ): Public Function Factor(x As Integer) As Double
- ввести код, данный ниже:
Private Sub Command1_Click() ' проводится преобразование вводимых данных в ' числовые значения, вычисляется факториал введeнного ' числа, результат преобразуется в тип String и выводится ' в поле txtOut txtOut.Text = Str(Factor(Val(txtInp.Text))) End Sub ' указание типа данных аргумента и типа данных ' возвращаемого фунцией значения Public Function Factor(x As Integer) As Double Dim i As Integer ' i - переменная-счeтчик If x > 0 And x < 171 Then Factor = 1 For i = 2 To x Factor = Factor * i Next i Else Factor = 1 End If End Function
- в поле txtInput ввести число, например 89, сделать щелчок на командной кнопке, результат выводится во второе текстовое поле, рис. 2.2.
Процедура Sub
Процедура Sub начинается инструкцией Sub и заканчивается инструкцией End Sub, между ними размещается код. Различают процедуры обработки событий и процедуры общего назначения. Процедуру обработки событий можно отличить по еe имени, содержащему имя события, например: Command1_Click (). Ниже приводится пример создания процедуры Sub.
Практическая работа 12. Создание процедуры Sub
Решается задача деления городов на группы в зависимости от соответствующей численности населения, которая задаeтся как набор случайных чисел. Рассматриваются 2 варианта:
- деление на группы с использованием блока Select Case,
- в блоках Case используется вызов процедуры ( Call mList(i, k) ).
Последовательность действий:
- создать на форме объекты, данные на рис. 2.3:
- 2 элемента управления ListBox (слева), содержащие списки названий городов и численности населения. Их идентификаторы: lstName, lstNum. Список из 20 названий, см. рис. 2.3, (Athen - Helsinki) вводится в поле свойства List объекта lstName (окно свойств). После ввода каждого названия использовать клавиши CTRL + Enter, в конце ввода - клавишу Enter. Oбразуется список, индексация проводится с 0,
- 2 массива (каждый из 4-х элементов) объектов: lstNameGr(0) - lstNameGr(3) и lstNumGr(0) - lstNumGr(3) (справа вверху), в которые будет выводиться результат деления численности населения городов на группы. В поле свойства List каждого объекта - элемента массива нужно ввести несколько нулей (поле списка представляет собой элемент массива и если при обращении к j+1 элементу j элемент не определен, то появится сообщение об ошибке),
- элемент управления List1 (внизу), в который заносится информация, позволяющая проверить, обработан ли весь исходный список и указывающая, сколько городов содержится в каждом групповом списке,
- 2 объекта CommandВutton ; свойствам Caption присвоить значение Select Case и Call mList(i,k),
- ввести код, данный ниже.
Переменная j используется для индексации элемeнтов списков названий городов и численностей населения, а переменные i1, i2, i3, i4, i5 - для индексации численностей населения и названий городов в списках групп. 5-я группа создана для списка названий городов и соответствующих численностей населения, не попавших в предыдущие 4 группы.
Во второй строке кода Form_Load () проводится проверка названий городов: "If lstName.List(j) >= "A" Then : ". Код буквы А - наименьший и для всех названий городов задаeтся численность населения; если список названий закончился, то численности присваивается значение -1.
(General) (Declarations) Dim j As Integer Private Sub Form_Load() ' задать численность населения For j = 0 To 29 If lstName.List(j) >= "A" Then lstNum.List(j) = Int(Rnd ^ 3 * 2000000 + 100000) Else lstNum.List(j) = -1 End If Next j End Sub Private Sub Command1_Click() Dim i1 As Integer, i2 As Integer, i3 As Integer Dim i4 As Integer, i5 As Integer j = 0: i1 = 0: i2 = 0: i3 = 0: i4 = 0: i5 = 0 Do Until Val (lstNum.List(j)) <= 0 Select Case Val(lstNum.List(j)) Case Is < 100000: i5 = i5 + 1 lst1.List(5) = "i5=" & i5 Case Is < 500000 lstNameGr(0).List(i1) = lstName.List(j) lstNumGr(0).List(i1) = lstNum.List(j): i1 = i1 + 1 lst1.List(1) = "i1=" & i1 Case Is < 1000000 lstNameGr(1).List(i2) = lstName.List(j) lstNumGr(1).List(i2) = lstNum.List(j): i2 = i2 + 1 lst1.List(2) = "i2=" & i2 Case Is < 1500000 lstNameGr(2).List(i3) = lstName.List(j) lstNumGr(2).List(i3) = lstNum.List(j): i3 = i3 + 1 lst1.List(3) = "i3=" & i3 Case Is < 2000000 lstNameGr(3).List(i4) = lstName.List(j) lstNumGr(3).List(i4) = lstNum.List(j): i4 = i4 + 1 lst1.List(4) = "i4=" & i4 Case Is >= 2000000: i5 = i5 + 1 lst1.List(5) = "i5=" & i5 End Select j = j + 1 Loop End Sub
- стартовать проект, сделать щелчок на командной кнопке Select Case, наблюдать результат.
Анализ блоков Case показывает, что код аналогичен; при организации работы блоков используются переменные j, i1, i2, i3, i4, i5 и индексы элементов массивов к(0, 1, 2, 3) элементов управления ListBox, например: lstName(0).List(i1) = lstName.List(j)
Создадим процедуру Sub mList(i As Integer, k As Integer), переменные i (i1, i2, i3, i4, i5) и k(0, 1, 2, 3) будем передавать как аргументы. Создание процедуры Добавить процедуру поле выведенного диалогового окна ввести имя процедуры mList в поле Тип сделать щелчок на Sub, в поле Район - щелчок на Public а ОК а выводятся инструкции Sub и End Sub, ввести аргументы процедуры: ( i As Integer, k As Integer ). Создаваемая процедура Sub представлена ниже, а обращение к ней, например для блока Case Is<500000 будет иметь вид: Call mList(i1, 0) - здесь i1 - индекс элемeнта в списке группы, а 0 - индекс элемента массива, (i - индекс элемента в списке группы, к - индекс элемента массива).
Public Sub mList(i As Integer, k As Integer) lstNameGr(k).List(i) = lstName.List(j) lstNumGr(k).List(i) = lstNum.List(j): i = i + 1 lst1.List(k + 1) = "i = " & i End Sub
- ввести код процедуры Command2_Click(),
- стартовать проект, сделать щелчок на кнопке Call mList(i,k), наблюдать результат, рис. 2.3.
Private Sub Command2_Click() Dim i1 As Integer, i2 As Integer, i3 As Integer, i4 As Integer Dim i5 As Integer j = 0: i1 = 0: i2 = 0: i3 = 0: i4 = 0: i5 = 0 Do Until lstNum.List(j) <= 0 Select Case Val(lstNum.List(j)) Case Is < 100000: i5 = i5 + 1: lst1.List(5) = "i5=" & i5 Case Is < 500000: Call mList(i1, 0) Case Is < 1000000: Call mList(i2, 1) Case Is < 1500000: Call mList(i3, 2) Case Is < 2000000: Call mList(i4, 3) Case Is >= 2000000: i5 = i5 + 1: lst1.List(5) = "i5=" & i5 End Select j = j + 1 Loop End Sub