Лекция 3: 2 Для создания возможности использования объектов файловой системы нужно подключить библиотеку DLL, содержащую эти объекты: меню Разработать > Ccылки > Microsoft Scriptlet Component (сделать щелчок на соответствующем элементе управления CheckBox). Не могу найти меню Разработать (Develop)>Links и т.д. |
Управление ходом выполнения программ. Примеры типовых алгоритмов
14d. Задача на выбор ветви из набора условий - блок Select Case
Задание: массив tanker(к) содержит названия танкеров, массив capacity(к) - соответствующую вместимость. Разделить массивы на 3 группы в зависимости от вместимости (до 30 000, 30 000 - 100 000, более 100 000). Вывести результаты в массив поля списка.
Последовательность действий:
- Создать на форме, см. рис. 2.6:
- элементы управления CommandButton, Label для вывода набора символов - условных названий танкеров, см. код ниже,
- 2 элемента управления ListBox для вывода массивов названий и вместимости танкеров, см. код процедуры Form_Load (),
- 2 массива элементов управления ListBox: каждый из 3-х элементов для вывода результатов деления объектов на 3 группы:
- List3(0) - List3(2),
- List4(0) - List4(2); следует заполнить массивы ListBox несколькими нулями, для этого использовать их свойство List,
- ввести код, данный ниже, пояснения даны под комментариями:
(General) (Declarations) Dim tanker(24) As String ' описание массива названий танкеров ' описание массива вместимостей танкеров Dim capacity(24) As Long Private Sub Form_Load() Dim j As Integer, i As Integer, ch As String ' ch - символ - условное название танкера ch = "A" ' формирование названий и вместимости танкеров, вывод ' данных For j = 0 To 21 Label1.Caption = ch tanker(j) = ch ' массив условных названий танкеров, ' формирование случайных чисел, характеризующих ' вместимость capacity(j) = Int(Rnd ^ 3 * 1000000 + 1) List1.List(j) = tanker(j) ' вывод в поле List1 названий List2.List(j) = capacity(j) ' вывод в поле List2 ' вместимостей ' изменить символ - название танкера. Функция Asc() ' возвращает значение типа Integer, представляющее ' код символа для первого символа строки, функция ' Chr() возвращает значение типа String, содержащее ' символ, соответствующий указанному коду (набор ' символов ANSI) ch = Chr(Asc(ch) + 1) ' вывод в поле Label1 символов - условных названий ' танкеров Label1.Caption = Label1.Caption & ch Next j capacity(j) = -1 ' создание признака конца массива End Sub Private Sub Command1_Click() Dim j As Integer ' переменные i1, i2, i3 определяют позиции элементов в ' массивах объектов Dim i1 As Integer, i2 As Integer, i3 As Integer j = 0: i1 = 0: i2 = 0: i3 = 0 ' деление элементов массивов на 3 группы Do Until capacity(j) = -1 Select Case capacity(j) Case Is < 30000: List3(0).List(i1) = capacity(j) List4(0).List(i1) = tanker(j): i1 = i1 + 1 Case Is < 100000: List3(1).List(i2) = capacity(j) List4(1).List(i2) = tanker(j): i2 = i2 + 1 Case Is >= 100000: List3(2).List(i3) = capacity(j) List4(2).List(i3) = tanker(j): i3 = i3 + 1 End Select j = j + 1 Loop End Sub
- стартовать проект, сделать щелчок на командной кнопке, наблюдать результат.
Сортировка. Сортировка выполняется попарным сравнением сортируемых элементов (например, элементов массива). В общем случае для сортировки массива из N элементов требуется N*(N-1)/2 сравнений. В случае сортировки по убыванию, например, сравнивается к-элемент массива с предыдущим. Если он больше предыдущего, то их меняют местами, затем сравнивается следующая пара и .т.д. Ниже приведены элементарные примеры.
14е. Сортировка
Сортировка 1 (по убыванию)
Создать на форме требуемые элементы управления, см. код, данный ниже, ввести код; пояснения даны под комментариями. Затем стартовать проект.
(General) (Declarations) Dim i As Integer, j As Integer, bu As Long ' bu - переменная для временного хранения сортируемых ' данных Dim m(25) As Long, mas(25) As Long ' создание массива случайных чисел и вывод их в поле List1 Private Sub Form_Load() For j = 1 To 25 m(j) = Int(Rnd * 100000) List1.List(j - 1) = m(j) Next j End Sub Private Sub Command1_Click() ' выполнить сортировку For i = 1 To 24 For j = i + 1 To 25 ' если следующий элемент больше предыдущего, то ' поменять их местами If m(i) < m(j) Then bu = m(i): m(i) = m(j): m(j) = bu Next j, i For j = 1 To 25 ' результат вывести в поле List2 List2.List(j - 1) = m(j) Next j End Sub
Сортировка 2
Private Sub Command2_Click() For j = 25 To 1 Step -1 mas(j) = Int(Rnd * 100000): List1.List(25 - j) = mas(j) Next j For j = 2 To 25 ' выполнить сортировку For i = 2 To 25 - j + 2 If mas(i - 1) > mas(i) Then bu = mas(i - 1): mas(i - 1) = mas(i): mas(i) = bu End If Next i Next j ' результат вывести в поле списка в обратном порядке For j = 25 To 1 Step -1 List2.List(25 - j) = mas(j) Next j End Sub