
Практическая работа
Тема: Сортировка числового массива.
Цель: Разработать проект, который позволит заполнять числовой массив целыми случайными числами, а затем предоставит возможность сортировать массив различными способами.
Теория:
Заполнение массива случайными числами. Для генерации последовательности случайных чисел используем функцию Rnd. При запуске программы функция Rnd дает равномерно распределенную псевдослучайную последовательность чисел в интервале 0<Х<1. Для того чтобы генерировались различающиеся между собой последовательности, можно использовать оператор Randomize. Для получения последовательности случайных чисел в заданном интервале А<Х < В необходимо использовать следующую формулу: А+(В-А)*Rnd. Тогда, получение целочисленной последовательности случайных чисел на интервале 0 < Х < 10 достигается использованием функции выделения целой части числа: Int(Rnd * 10)
Заполнение массива bytA, состоящего из 10 элементов, реализуем с помощью цикла со счетчиком. В целях визуального контроля предусмотрим его вывод в текстовое поле txtDim c использованием функции Str (преобразования числа в строковую форму).
Поиск минимального элемента. Будем считать сначала, что минимальный элемент равен первому элементу массива bytA(1) и присвоим переменной bytMin его значение. Затем в цикле сравним последовательно элементы массива со значением переменной bytMin, если какой-либо элемент окажется меньше, присвоим его значение переменной bytMin, а его индекс присвоим переменной bytN. Распечатаем результаты.
Сортировка массива по возрастанию методом перестановок. Идея алгоритма сортировки по возрастанию массива, состоящего из N элементов, методом перестановок элементов состоит в последовательном поиске минимальных элементов и их перемещении к началу массива с помощью перестановок с элементами, имеющими меньший индекс.
На первом шаге находим минимальный элемент массива и меняем его местами с первым элементом массива. Остаются неупорядоченными N-1 элемент. Проводим поиск минимального элемента среди элементов с индексами от 2 до N и делаем перестановку.
Повторяем процедуру поиска минимального элемента среди оставшихся неупорядоченных элементов многократно. Повторение реализуем с помощью цикла со счетчиком, максимальное значение которого составляет N-1. В результате массив сортируется по возрастанию.
Так как, поиск минимального элемента массива проводится многократно, реализуем рассмотренную ранее событийную процедуру cmdMin_Click() как общую процедуру МинЭлемент (bytI, bytN As Byte), где bytI – является входным параметром, а bytN– выходным параметром.
Ход работы
1 |
Создал новый проект. Разместил на форме текстовое поле txtDim и кнопкe cmdDim. Присвоил свойству Caption значение Заполнить. |
2 |
Установил для свойства MultiLine текстового поля значение True и подобрал размер шрифта так, чтобы массив распечатывался в одной строке текстового поля. |
3 |
Ввёл для кнопки событийную процедуру заполнения массива и его вывода в текстовое поле: Dim bytI, bytA(1 To 10) As Byte Private Sub cmdDim_Click() Randomize For bytI = 1 To 10 bytA(bytI) = Int(Rnd * 10) txtDim.Text = txtDim.Text + Str(bytA(bytI)) Next bytI End Sub |
4 |
В текстовом поле появяились последовательности случайных чисел, различающиеся между собой. |
5 |
Разместил на форме кнопку cmdMin и присвоил свойству Caption значение Мин.элемент. Cоздал для нее событийную процедуру поиска минимального элемента:
Private Sub cmdMin_Click() bytMin = bytA(1) bytN = 1 For bytI = 2 To 10 If bytA(bytI) < bytMin Then bytMin = bytA(bytI): bytN = bytI Next bytI Print "Минимальный элемент "; bytMin; "его индекс"; bytN End Sub |
6 |
Запустил проект. Последовательно щелкал на кнопках Заполнить иМин. элемент. В
текстовом окне будет появляться
заполненный массив, а на форме будет
печататься минимальный элемент и его
индекс. |
7 |
Ввёл программный код общей процедуры поиска минимального элемента и поместил ее в начало программного кода проекта. Объявил переменные, используемые во всех процедурах: Dim bytA(1 To 10), bytMin, bytI, bytJ, bytK, bytR, bytN As Byte 'общая процедура поиска минимального элемента Sub МинЭлемент(bytI, bytN As Byte) bytMin = bytA(bytI) bytN = bytI For bytJ = bytI + 1 To 10 If bytA(bytJ)< bytMin Then bytMin = bytA(bytJ): bytN = bytJ Next bytJ End Sub |
8 |
Поместил на форму текстовое поле txtSort и кнопку cmdSort. Присвоил свойству кнопки Caption значение Сортировать. |
9 |
Ввёл программный код событийной процедуры сортировки массива: 'событийная процедура сортировки Private Sub cmdSort_Click() txtSort.Text = "" For bytI = 1 To 9 'вызов общей процедуры поиска минимального элемента Call МинЭлемент(bytI, bytN) 'перестановка bytR = bytA(bytI) bytA(bytI) = bytA(bytN) bytA(bytN) = bytR 'печать массива для каждого цикла сортировки For bytK = 1 To 10 txtSort.Text = txtSort.Text + Str(bytA(bytK)) Next bytK Next bytI End Sub |
10 |
Для большей наглядности разместил на форме две метки с номерами элементов массива (горизонтальная) и значениями счетчика цикла сортировки (вертикальная). |
11 |
Запустил проект на выполнение. Щелкнул по кнопкам Заполнить массив, Мин. элемент и Сортировка. |
12 |
Процедуру
производил многократно и наблюдал
процесс сортировки для различных
вариантов заполнения массива. |
13 |
Сохранил проект. Готовый проект prj3.vbp хранится в каталоге \practicum\VB\Projects\project3\. |