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

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

14d. Задача на выбор ветви из набора условий - блок Select Case

Задание: массив tanker(к) содержит названия танкеров, массив capacity(к) - соответствующую вместимость. Разделить массивы на 3 группы в зависимости от вместимости (до 30 000, 30 000 - 100 000, более 100 000). Вывести результаты в массив поля списка.

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

  1. Создать на форме, см. рис. 2.6:
    • элементы управления CommandButton, Label для вывода набора символов - условных названий танкеров, см. код ниже,
    • 2 элемента управления ListBox для вывода массивов названий и вместимости танкеров, см. код процедуры Form_Load (),
    • 2 массива элементов управления ListBox: каждый из 3-х элементов для вывода результатов деления объектов на 3 группы:
      • List3(0) - List3(2),
      • List4(0) - List4(2); следует заполнить массивы ListBox несколькими нулями, для этого использовать их свойство List,
      • ввести код, данный ниже, пояснения даны под комментариями:
    Схема формы

    Рис. 2.6. Схема формы
    (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
  2. стартовать проект, сделать щелчок на командной кнопке, наблюдать результат.

Сортировка. Сортировка выполняется попарным сравнением сортируемых элементов (например, элементов массива). В общем случае для сортировки массива из 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
антонина квасова
антонина квасова
Владимир Муратов
Владимир Муратов

По курсу Visual Basic где же взять материалы для практических работ? 

Фариза Омирзакова
Фариза Омирзакова
Казахстан