Создал новый проект. Разместил на форме текстовое поле txtDim и кнопкe cmdDim. Присвоил свойству Caption значение Заполнить.
Установил для свойства MultiLine текстового поля значение True и подобрал размер шрифта так, чтобы массив распечатывался в одной строке текстового поля.
Ввёл для кнопки событийную процедуру заполнения массива и его вывода в текстовое поле:
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))
NextbytI
End Sub
Запустил проект и несколько раз щелкнул по кнопке Заполнить.
В текстовом поле появяились последовательности случайных чисел, различающиеся между собой.
Разместил на форме кнопку 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
Запустил проект. Последовательно щелкал на кнопках Заполнить и Мин. элемен т.
В текстовом окне будет появляться заполненный массив, а на форме будет печататься минимальный элемент и его индекс.
Ввёл программный код общей процедуры поиска минимального элемента и поместил ее в начало программного кода проекта. Объявил переменные, используемые во всех процедурах:
Dim bytA(1 To 10), bytMin, bytI, bytJ, bytK, bytR, bytN As Byte
'общая процедура поиска минимального элемента
Sub МинЭлемент(bytI, bytN As Byte)
bytMin = bytA(bytI)
bytN = bytI
ForbytJ = bytI + 1 To 10
If bytA(bytJ)< bytMin Then bytMin = bytA(bytJ): bytN = bytJ
Next bytJ
End Sub
Поместил на форму текстовое поле txtSort и кнопку cmdSort. Присвоил свойству кнопки Caption значение Сортировать.
Ввёл программный код событийной процедуры сортировки массива:
'событийная процедура сортировки
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
Для большей наглядности разместил на форме две метки с номерами элементов массива (горизонтальная) и значениями счетчика цикла сортировки (вертикальная).
Запустил проект на выполнение. Щелкнул по кнопкам Заполнить массив, Мин. элемент и Сортировка.
Процедуру производил многократно и наблюдал процесс сортировки для различных вариантов заполнения массива.
Сохранил проект. Готовый проект prj3.vbp хранится в каталоге \practicum\VB\Projects\project3\.
Практическая работа
Тема: Сортировка строкового массива
Цель: Разработать проект, который позволяет сортировать строковый массив по алфавиту.
Теория:
Заполнение строкового массива. Как строковые, так и числовые массивы можно заполнять разными методами. Рассмотренный ранее числовой массив был заполнен непосредственно в самой программе, можно заполнять массивы, вводя данные с клавиатуры с использованием функции 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.Объявил переменные, используемые во всех процедурах:
DimbytI, 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 UntilEOF(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) ThenstrC(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
Запустил проект на выполнение. Последовательно щелкнул по кнопкам Считать алфавит, Считать термины, Сортировать, Показать:
Сохранил проект.
Задания для самостоятельного выполнения
Создал проект, реализующий поиск максимального элемента числового массива.
Создал проект, реализующий сортировку числового массива по убыванию методом перестановок.
Создал проект, реализующий сортировку массива по возрастанию «пузырьковым» методом.
Усовершенствовал проект 5.4. «Сортировка строкового массива». Предусмотрел возможность сохранения отсортированного массива в файле.
Создал проект «Словарь компьютерных терминов», который выводит определение термина, заданного пользователем. Термины и их определения сохранил в файлах данных.
Создал проект «Русско-английский и англо-русский словарь», который обеспечивает перевод слов, хранящихся в файлах данных.
Создал проект «Проверка знаний», так чтобы вопросы и правильные ответы хранились в файлах данных, вопросы задавал и ответы вводилил с использованием цикла, а ответы учащегося сохранял в файле.
Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет
studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав!Последнее добавление