Опубликован: 04.07.2006 | Доступ: свободный | Студентов: 5582 / 686 | Оценка: 4.11 / 3.96 | Длительность: 11:08:00
Лекция 2:

Управление ходом выполнения программ. Примеры типовых алгоритмов

Практическая работа 11. Создание функции

Создадим функцию вычисления факториала числа ( Factor ), используем тип вводимых данных - Integer, возвращаемых - Double, тогда максимальное возвращаемое значение ограничивается числом 1.80Е308. Примем факториал равным нулю, если значение аргумента превышает 170 (факториал 170 соответствует максимальному значению принятого типа данных). Последовательность действий:

  1. Создать текстовые поля: txtInp - для ввода числа, факториал которого нужно вычислить, txtOut - для вывода результата и командную кнопку, рис. 2.2.,
  2. для создания функции использовать: область окна кода ( General ) ( Declarations ) \to меню Инструменты \to Добавить процедуру \to в поле выведенного диалогового окна ввести имя функции Factor \to в поле Тип сделать щелчок на Function, в поле Район - щелчок на Public \to ОК \to выводятся инструкции Function и End Function.

    В качестве аргумента функции используется вводимое в поле TextBox (после старта проекта) число, оно описывается "As Integer" (ввести это в скобки, относящиеся к инструкции Function ). Тип возвращаемого функцией значения нужно описать "As Double" (ввести это за скобками в строке Function ): Public Function Factor(x As Integer) As Double

  3. ввести код, данный ниже:
    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
  4. в поле txtInput ввести число, например 89, сделать щелчок на командной кнопке, результат выводится во второе текстовое поле, рис. 2.2.
    Создание функции

    Рис. 2.2. Создание функции

Процедура Sub

Процедура Sub начинается инструкцией Sub и заканчивается инструкцией End Sub, между ними размещается код. Различают процедуры обработки событий и процедуры общего назначения. Процедуру обработки событий можно отличить по еe имени, содержащему имя события, например: Command1_Click (). Ниже приводится пример создания процедуры Sub.

Практическая работа 12. Создание процедуры Sub

Решается задача деления городов на группы в зависимости от соответствующей численности населения, которая задаeтся как набор случайных чисел. Рассматриваются 2 варианта:

  • деление на группы с использованием блока Select Case,
  • в блоках Case используется вызов процедуры ( Call mList(i, k) ).

Последовательность действий:

  1. создать на форме объекты, данные на рис. 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),
  2. ввести код, данный ниже.

    Переменная 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
  3. стартовать проект, сделать щелчок на командной кнопке 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) будем передавать как аргументы. Создание процедуры \to Добавить процедуру \to поле выведенного диалогового окна ввести имя процедуры mList \to в поле Тип сделать щелчок на 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
  4. ввести код процедуры Command2_Click(),
  5. стартовать проект, сделать щелчок на кнопке 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
    Деление городов на группы в зависимости от соответствующей численности населения

    Рис. 2.3. Деление городов на группы в зависимости от соответствующей численности населения
Константин Новков
Константин Новков

Лекция 3: 2

Для создания возможности использования объектов файловой системы нужно подключить библиотеку DLL, содержащую эти объекты: меню Разработать > Ccылки > Microsoft Scriptlet Component (сделать щелчок на соответствующем элементе управления CheckBox).

Не могу найти меню Разработать (Develop)>Links и т.д.

антонина квасова
антонина квасова