Опубликован: 04.07.2006 | Доступ: свободный | Студентов: 5478 / 629 | Оценка: 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 где же взять материалы для практических работ? 

Андерс Бьярне
Андерс Бьярне
Россия, г. Чебоксары
Асылбек Жангулов
Асылбек Жангулов
Казахстан