- •Д.С.Ситкин
- •Информатика.
- •Программированиевdelphi
- •Лабораторныйпрактикум
- •Содержание
- •Введение
- •Основныепонятияпрограммирования
- •Этапыпрограммирования
- •Средаdelphi.Созданиепростейшегопроекта
- •Формаиеёсвойства
- •Компонентыформыиихсвойства
- •КомпонентLabeledEdit
- •Событиеипроцедураобработкисобытия
- •Пример1.1
- •Компиляцияизапускпроектанаисполнение
- •Структураисохранениепроекта
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Линейныйалгоритм
- •Типыданных
- •Константыипеременные
- •Арифметическиеоперации
- •Правилазаписитиповыхдействий
- •Структурапроцедурыобработкисобытия
- •Пример2.1
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Подпрограммы
- •Классификацияиструктураподпрограмм
- •Механизмработыподпрограммыиобменапараметрами
- •Пример3.1
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Структурамодуля
- •Созданиеиподключениемодуля
- •Пример4.1
- •Условныйоператор.Неполнаяформа
- •Условныйоператор.Полнаяформа
- •IfусловиеthenоператорS1elseоператорS2
- •Пример5.1
- •Пример5.2
- •Операторвыбора
- •Пример5.3
- •Содержаниеотчёта
- •Контрольныевопросы
- •Контрольсинтаксисавводимыхданных
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Алгоритмыповторений
- •Операторцикласпредварительнымусловием
- •Пример7.1
- •Операторцикласпараметром(сосчётчиком)
- •Пример7.2
- •Пример7.3
- •Операторцикласпоследующимусловием
- •Пример7.4
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Массивы
- •Объявлениемассива
- •Обработкамассивов
- •Пример8.1
- •Динамическиемассивы
- •Подпрограммасоткрытымпараметром-массивом
- •Пример8.2
- •Целесообразностьвыделенияпамятиподмассивы
- •Контрольсинтаксисаэлементовмассива
- •Задание
- •Обработкамногомерныхмассивов
- •Пример9.1
- •КомпонентStringGrid
- •Пример9.2
- •Сортировкамассивов
- •Пример9.3
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Внешниефайлы
- •Физическиеилогическиефайлы
- •Классификациялогическихфайлов
- •Процедурыифункцииобработкифайлов
- •Пример 10.1
- •КомпонентыOpenDialog иSaveDialog
- •Пример 10.2
- •Пример 10.3
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Олабораторнойработе
- •Информатика. Программированиев delphi
Сортировкамассивов
Сортировка массивапроцесс упорядочивания набора одно-типных данных по возрастанию или убыванию значения какого-либопризнака. При сортировке числового массива его элементы меняютсяместами таким образом, что их значения оказываются упорядочен-ными по возрастанию или убыванию. Сортировка является важнымдействием над массивами в системах поиска данных, т.к. в отсорти-рованныхмассивахпроцесспоисказначительноускоряется.
Существует много алгоритмов сортировки, которые отличают-ся друг от друга по скорости работы, что заметно на больших масси-вах,длянебольшихмассивовможно использоватьпростыеизних.
Сортировкаметодомобмена(метод«пузырька»)
Суть данного метода сортировки по возрастанию состоит в сле-дующем. Каждый элемент массива, начиная с первого и заканчиваяпредпоследним, сравнивается со следующим элементом. Если теку-щий элемент больше следующего, то элементы меняются местами.Циклический процесс просмотра всех элементов массива повторяетсястолько раз, сколько элементов в массиве минус единица.Таким об-разом более «лёгкие» элементы массива постепенно продвигаются кначалу («всплывают»), а более «тяжёлые»к концу («тонут»).Этоталгоритм простой, но очень медленный. Его можно несколько уско-рить, если массив изначально частично отсортирован. Для этого вво-дитсяпеременная-признак,контролирующаяпроцессобмена.Еслипри очередном просмотре массива не было ни одной перестановки, тоэто значит, что массив отсортирован и, в соответствии со значениемпеременной-признаком,процессзавершается.
На рис. 9.8 представлена блок-схема описанного алгоритма сор-тировки. Чтобы не отвлекаться на второстепенные действия ввода ивывода массива, процесс сортировки представлен в виде пользова-тельской процедуры, причём с формальным открытым параметром-массивом, что позволит сортировать передаваемые в процедуру фак-тические массивыпроизвольной длины. Напомним,чтонумерацияэлементов у такого массива начинается с нуля. Для возможности воз-вратаввызывающийблок,массивсделанпараметром-переменной.
procedureSort_obmen(vart:arrayofreal);
varbuf:real;//длявременногохранения элемента
k:byte;
f:boolean;//переменная-признак
begin
repeat//внешнийциклконтроляобменов
f:=false;//пустьобменовнебыло
fork:=0tohigh(t)-1do//отначальногодо
//предпоследнегоэлементамассива(напомним,
//ф-я
high сама отнимает единицу от числа
эл-ов)ift[k]>t[k+1]then//если
текущий элементbegin//большеследующего,топоменятьих
buf:=t[k]; //местами с использованиемt[k]:=t[k+1]; //буферной переменнойt[k+1]:=buf;
f:=true;//обмен состоялся
end;
untilnotf;//дотехпор,покаобменнесостоялся
end;
Рис.9.8
Сортировкаметодомвыбора
Суть данного метода сортировки по возрастанию состоит в сле-дующем. Начиная с первого элемента, просматривается массив, нахо-дитсяминимальныйэлемент,которыйставитсянаместопервого,а
первыйзанимаетместоминимального.Затем,начиная
со второго элемента,
просматриваетсяоставшаясячастьмассива,находитсямини-мальныйэлемент,которыйменяетсяместамисовторым,ит.д.допредпоследнегоэлемента.Блок-схемаописанногоалгоритмапредстав-ленанарис.9.9.Какивпредыдущемметоде,процесссортировкиоформим
ввидепользо-вательской
процедуры с открытым
массивом.procedureSort_vubor(vart:arrayofreal);
varbuf:real;min, m, n:byte;begin
form:=0tohigh(t)-1do//от начального доbegin//предпоследнего элемента массиваmin:=m;//пустьномер миним.эл-таравенm
forn:=m+1tohigh(t)do//циклпоискаминим.ift[n]<t[min]thenmin:=n;
//элементаbuf:=t[m];
//перестановка
первого элементаt[m]:=t[min];
//в оставшейся
последовательностиt[min]:=buf;//сминимальнымчерезбуф.пер-ную
end;
end;
Рис.9.9
