Практическая работа
Тема: Сортировка строкового массива
Цель: Разработать проект, который позволяет сортировать строковый массив по алфавиту.
Теория:
Заполнение строкового массива. Как строковые, так и числовые массивы можно заполнять разными методами. Рассмотренный ранее числовой массив был заполнен непосредственно в самой программе, можно заполнять массивы, вводя данные с клавиатуры с использованием функции InputBox, однако строковые массивы чаще всего заполняются путем считывания данных из текстовых файлов.
Такие текстовые файлы должны содержать только коды самих символов и, следовательно, должны создаваться в простейших текстовых редакторах (типа Блокнот).
В таких файлах элементы данных (последовательности символов) отделяются друг от друга с помощью разделителей (чаще всего запятой).
Прежде чем приступить к считыванию данных из текстового файла в строковый массив необходимо открыть файл с помощью оператора Open:
Open Имя_файла For Режим_работы As # Номер_файла
Имя_файла должно содержать путь к файлу и собственно имя файла,
Режим_работы определяет, что файл открыт для считывания данных (Input) или, наоборот, для записи данных в файл (Output), а Номер_файла содержит целое число в интервале от 1 до 511.
Например, чтобы открыть для считывания данных файл alphabet.txt находящийся на CD-ROM (логическое имя которого E:),необходимо ввести следующий код:
Open "E:\practicum\VB\projects\project4\alphabet.txt" For Input As #1
Для чтения данных из файла используется функция Input:
Input # Номер_файла, Список_переменных
После завершения считывания данных файл необходимо закрыть с помощью оператора Close:
Close # Номер_файла
Для визуализации заполнения строкового массива терминами удобно использовать управляющий элемент Окно списка (ListBox), который представляет собой упорядоченный список значений.
Для размещения в окне списка нового элемента используется метод AddItem, который имеет в качестве аргумента строковую переменную, значение которой и добавляется в список.
Сортировка массива. В исходном строковом массиве strB термины хранятся в неупорядоченном виде. Сравним последовательно во внутреннем цикле со счетчиком bytI букву «а» алфавита с первыми символами терминов, в случае их совпадения присвоим первому элементу результирующего символьного массива strC это значение. Повторим эту процедуру последовательно для всех букв алфавита с использованием внешнего цикла со счетчиком bytK. Получим упорядоченный строковый массив strC.
Визуализация отсортированного массива. Для визуализации отсортированного массива используем второе окно списка.
Ход работы
|
Запустил Блокнот,
ввёл буквы русского алфавита и сохранил
файл под именем alphabet.txt.
|
|
Создать файл, ввести компьютерные
термины и сохранить под именем term.txt.
|
|
Создал проект, на форму поместить кнопку cmdAlph (задать свойству Caption значение Считать алфавит) и текстовое полеtxtAlph, в котором можно наблюдать результат заполнения массива. |
|
Создал событийную процедуру считывания данных из файла alphabet.txt в строковый массив strA.Объявил переменные, используемые во всех процедурах: Dim bytI, bytK As Byte, strA(1 To 33), strB(1 To 10), strC(1 To 10) As String Private Sub cmdAlph_Click() Open"E:\practicum\VB\projects\project4\alphabet.txt" For Input As #1 For bytI = 1 To 33 Input #1, strA(bytI) txtAlph.Text = txtAlph.Text + strA(bytI) Next bytI Close #1 End Sub |
|
Поместил на форму кнопку cmdTerm (задать свойству Caption значение Считать термины) и окно списка lstTerm, в котором можно наблюдать результат заполнения массива. |
|
Создал событийную процедуру считывания данных из файла term.txt в строковый массив strB и его отображения в окне спискаlstTerm:
Private Sub cmdTerm_Click() Open "E:\practicum\VB\projects\project4\term.txt" For Input As #2 bytI = 1 Do Until EOF(2) Input #2, strB(bytI) lstTerm.AddItem strB(bytI) bytI = bytI + 1 Loop Close #2 End Sub |
|
Поместил на форму кнопку cmdSort (задал свойству Caption значение Сортировать) и создал событийную процедуру сортировки массива:
Private Sub cmdSort_Click() bytJ = 1 For bytK = 1 To 33 For bytI = 1 To 10 If strA(bytK) = Left$(strB(bytI), 1) Then strC(bytJ) = strB(bytI): bytJ = bytJ + 1 Next bytI Next bytK End Sub |
|
Поместил на форму кнопку cmdRez (задад свойству Caption значение Показать), окно списка lstSort и создал событийную процедуру визуализации отсортированного массива:
Private Sub cmdRez_Click() For bytJ = 1 To 10 lstSort.AddItem strC(bytJ) Next bytJ End Sub |
|
Запустил проект на выполнение. Последовательно щелкнул по кнопкам Считать алфавит, Считать термины, Сортировать,Показать:
|
|
Сохранил проект. |
