Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Сортировка данных




Сортировка данных в данной информационной системе производится при помощи индексного массива Ind, описанного в модуле Declar. В этом случае результатом сортировки будет не отсортированный файл, а вспомогательный массив номеров (индексов) Ind, показывающий в каком порядке следует выбирать записи файла, чтобы они образовывали отсортированную последовательность.

Алгоритмы сортировки опишем в стандартном модуле, который необходимо добавить в проект под именем Sorting. Для сортировки данных будем использовать алгоритм сортировки обменом (метод «пузырьковой» сортировки).

Приведем код процедуры сортировки по числовым полям.

Public Sub Sort(Key() As Single, N As Integer, Ind() As Integer)

Dim i As Integer

Dim j As Integer

Dim k As Integer

 

For j = 1 To N - 1

For i = 1 To N - j

If Key(Ind(i)) > Key(Ind(i + 1)) Then

k = Ind(i)

Ind(i) = Ind(i + 1)

Ind(i + 1) = k

End If

Next i

Next j

End Sub

 

Перед обращением к этой процедуре необходимо инициализировать массив Ind и занести элементы ключевого поля сортируемого файла во вспомогательный массив Key. Благодаря описанию массива Key как вещественного в него можно записывать числовые данные любого типа: как Single, так и Integer и Byte.

Кроме того, эта процедура пригодна и для сортировки по убыванию ключа; для этого достаточно при инициализации массива Key умножить значения ключевых полей на минус единицу.

Для процедур сортировки по строковым полям и полям типа даты приведем только заголовки, так как код тела этих процедур полностью совпадает с кодом тела процедуры сортировки по числовым полям.

Заголовок процедуры сортировки по строковым полям имеет вид:

Public Sub SortStr(Key() As String, N As Integer, _

Ind() As Integer)

 

Заголовок процедуры сортировки по полям типа даты имеет вид:

Public Sub SortDate(Key() As Date, N As Integer, _

Ind() As Integer)

 

Опишем теперь работу с указанными процедурами сортировки. Т.е. опишем процедуры обработки событий выбора пунктов меню «Сортировка à По курсу», «Сортировка à По группе», «Сортировка à По ФИО» и «Сортировка à Исходный порядок». При этом необходимо предусмотреть корректное выполнение вложенных сортировок.

 

Выбор пункта меню «Сортировка à По курсу»

 

Private Sub mnuSortKursItem_Click(ByVal sender As _

System.Object, ByVal e As System.EventArgs) _

Handles mnuSortKursItem.Click

Dim i As Integer

Dim KeyK(Nmax) As Single

Dim R As TStud = New TStud()

 

' подготовка к сортировке

For i = 1 To N

R.ReadFromFile(f1, i)

KeyK(i) = R.Kurs

Next i

 

' вызов процедуры сортировки

Sort(KeyK, N, Ind)

End Sub

 

Выбор пункта меню «Сортировка à По группе»

 

Private Sub mnuSortGroupItem_Click(ByVal sender As _

System.Object, ByVal e As System.EventArgs) _

Handles mnuSortGroupItem.Click

Dim i As Integer

Dim KeyK(Nmax) As Single

Dim R As TStud = New TStud()

 

' подготовка к сортировке

For i = 1 To N

R.ReadFromFile(f1, i)

KeyK(i) = R.Group

Next i

 

' вызов процедуры сортировки

Sort(KeyK, N, Ind)

End Sub

 

Выбор пункта меню «Сортировка à По ФИО»

 

Private Sub mnuSortFIOItem_Click(ByVal sender As System.Object,_

ByVal e As System.EventArgs) Handles mnuSortFIOItem.Click

Dim i As Integer

Dim KeyK(Nmax) As String

Dim R As TStud = New TStud()

 

' подготовка к сортировке

For i = 1 To N

R.ReadFromFile(f1, i)

KeyK(i) = Trim(R.FIO)

Next i

 

' вызов процедуры сортировки

SortStr(KeyK, N, Ind)

End Sub

 

Выбор пункта меню «Сортировка à Исходный порядок»

 

Private Sub mnuSortUnsorted_Click(ByVal sender As _

System.Object, ByVal e As System.EventArgs) _

Handles mnuSortUnsorted.Click

Dim i As Integer

 

' возвращение исходных значений массивам Ind и Del

For i = 1 To Nmax

Ind(i) = i

Del(i) = 0

Next i

End Sub

 

Теперь, при выборе любого из этих пунктов меню, записи в исходном файле будут выводиться в порядке, определяемом значениями индексного массива Ind, как при просмотре в виде формы, так и при просмотре в виде таблицы.

В команды меню «Сортировка» вынесены сортировки по одному полю (ключу) данных. А если необходимо выполнить сортировку по набору ключей, т.е. представить данные о студентах так, что сначала идут записи по возрастанию номера курса, записи в пределах одного курса – по возрастанию номера группы, а записи в пределах одной группы – по фамилиям в алфавитном порядке. Здесь мы встречаемся с сортировкой по набору ключей.

Для выполнения вложенной сортировки (сортировки по набору ключей) можно воспользоваться описанными выше универсальными процедурами без каких-либо их модификаций. Это связано с тем, что используемый в процедурах алгоритм сортировки является устойчивым, т.е. в процессе сортировки относительное расположение элементов с одинаковыми ключами не изменяется.

Допустим, нужно выполнить сортировку по набору ключей: «Курс», «Группа», «Фамилия И.О.». Предположим, что исходный файл отсортирован по последнему ключу (в нашем случае по полю «Фамилия И.О.). Сортируя полученный файл по предшествующему ключу (по полю «Группа»), мы можем быть уверены, что в пределах одного значения данного ключа записи сохраняют упорядоченность по последнему ключу (это следует из свойства устойчивости алгоритма). Т.е. данные будут отсортированы по полю «Группа», а внутри каждой группы – по полю «Фамилия И.О.». Повторяя процесс сортировки по всем ключам от последнего к первому (т.е. в порядке, обратном требуемому), мы получим файл, отсортированный по набору ключей. Опять же напомним, что файл на самом деле не сортируется, а сортируется индексный массив. Подчеркнем, что в описанном процессе индексный массив, являющийся результатом сортировки по некоторому ключу, является исходным для сортировки по очередному ключу.

Таким образом, процедуры модуля Sorting позволяют осуществлять сортировку записей файла по нескольким подчиненным ключам.

Если необходимо выполнить вложенную сортировку по другой совокупности полей (например, в других задачах), то нужно вернуться к исходному порядку, а затем выполнить последовательные сортировки в порядке, обратном порядку рассматриваемой совокупности полей.

Заметим, однако, что при удалении записи в отсортированных данных (это возможно только в режиме просмотра в виде формы) порядок следования записей нарушается, возвращаясь к исходному виду.

 

На этом месте снова следует протестировать проект на работоспособность и корректность работы. Проверка правильности работы сортировок может быть осуществлена при помощи просмотра данных в виде таблицы. Особое внимание уделить корректности правки и удаления отсортированных записей.




Поделиться с друзьями:


Дата добавления: 2015-05-09; Просмотров: 464; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.