Реферат Иследование методов сортировки Метод пузырька и Метод простых вставок
Работа добавлена на сайт bukvasha.net: 2015-10-28Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
от 25%
договор
СОДЕРЖАНИЕ
1. Введение……………………………………………………...4
2. Постановка задачи……………………………………………6
3. Рабочее проектирование……………………………………..8
4. Методы сортировок…………………………………………..12
4.1. Общее
4.2. Метод "Пузырька"
4.3. Метод "Простых вставок.
Выводы……………………………………………………….16
Приложения
Приложение А………………………………………………...17
Приложение Б………………………………………………….19
Приложение В………………………………………………….20
Приложение Г………………………………………………….22
ВВЕДЕНИЕ
Объектно-ориентированное программирование предполагает быструю разработку приложений с использованием визуальных компонентов. По сравнению с традиционными способами программирования ООП обладает рядом преимуществ. Главное из них заключается в том, что эта концепция в наибольшей степени соответствует внутренней логике функционирования операционной системы (ОС) Windows. Программа, состоящая из отдельных объектов, отлично приспособлена к реагированию на события, происходящие в ОС. К другим преимуществам ООП можно отнести большую надежность кода и возможность повторного использования отработанных объектов.
Столпом объектно-ориентированного программирования считается наследование, оно даёт возможность порождать новые классы, не описывая лишний код.
К недостаткам объектно-ориентированного программирования можно отнести сравнительно большой объём приложений, написанных на языке высокого уровня.
Бурное развитие вычислительной техники, потребность в эффективных средствах разработки программного обеспечения привели к появлению систем программирования, ориентированных на так называемую "быструю разработку", среди которых можно выделить Borland Delphi и Microsoft Visual Basic. В основе систем быстрой разработки (RAD-систем, Rapid Application Development — среда быстрой разработки приложений) лежит технология визуального проектирования и событийного программирования, суть которой заключается в том, что среда разработки берет на себя большую часть рутинной работы, оставляя программисту работу по конструированию диалоговых окон и функций обработки событий. Производительность программиста при использовании RAD-систем - фантастическая!
Delphi — это среда быстрой разработки, в которой в качестве языка программирования используется язык Delphi. Язык Delphi — строго типизированный объектно-ориентированный язык, в основе которого лежит хорошо знакомый программистам Object Pascal. Delphi продолжила серию Паскаль - ориентированных средств программирования и, по моему глубокому убеждению, является наиболее удобным инструментом для Windows-программирования.
Цель программирования может быть сформулирована так: научить программировать в среде Delphi, т. е. создавать законченные программы различного назначения: от простых однооконных приложений до вполне профессиональных программ работы с базами данных.
Объектно-ориентированное проектирование претендует на роль последнего слова в методологии проектирования, однако оно представляет собой сплав многих лучших идей в области создания сложных систем. Такие системы уже созданы в различной предметной области, а сам переход успешно использован как для задач в несколько сот строк кода, так и в 1 – 10 миллионов строк. Пока нет экспериментальных (практических) доказательств, что данная методология позволит реализовать системы объемом в десятки миллионов строк кода. Можно полагать, что развитие объектно-ориентированного проектирования приведет к тому, что будут созданы системы невообразимой сложности.
Действительно, требования к уровню программных систем резко возрастают. Современные возможности аппаратных средств и общественная потребность в компьютеризации все более и более требуют расширения сферы автоматизации. Потенциальные возможности объектно-ориентированного проектирования, включая процедурные вопросы и документирование, дают свободу энергии человека и позволяют преодолеть препятствия на пути создания сложных систем.
Delphi — чрезвычайно мощная система разработки прикладных программ для Windows. Она все увереннее завоевывает ведущие позиции в нашей стране, как среди профессиональных программистов, так и среди людей, никогда профессионально программированием не занимавшихся.
Профессионалы используют Delphi для построения сложных приложений с распределенными базами данных и для многих других целей. Специалисты самых разных специальностей (не программисты) создают с помощью Delphi небольшие прикладные программы для решения своих профессиональных задач и радуются, что, не владея всерьез программированием, могут создавать интерфейс, неотличимый от привычного интерфейса Windows.
Студенты (не программисты) выполняют с помощью Delphi свои курсовые и дипломные проекты. Сейчас уже есть даже средние школы, в которых начинают знакомить с работой в среде Delphi.
Научиться программировать можно только программируя, решая конкретные задачи. При этом достигнутые в программировании успехи в значительной степени зависят от опыта. Поэтому, чтобы получить максимальную пользу от программирования, вы должны работать с ним активно. Не занимайтесь просто чтением примеров, реализуйте их с помощью вашего компьютера. Не бойтесь экспериментировать — вносите изменения в программы. Чем больше вы сделаете самостоятельно, тем большему вы научитесь!!!
1 ПОСТАНОВКА ЗАДАЧИ
Целью выполнения курсового проектирования было реализовать алгоритмы сортировки одномерных массивов (метод пузырька и метод простых вставок), и исследование каждого метода сортировки массива.
Приложение должно иметь возможность сортировки массива (методом пузырька, методом простых вставок), одномерный массив для сортировки должен вводится из файла *txt , а так же после сортировки сохранятся в файл *txt. Отсортированный массив должен сравниваться с исходным и отображаться в виде диаграммы.
А также программа после сортировки должна сравнивать методы сортировки (метод пузырька и метод простых вставок), и показывать пользователю, какой из двух методов сортирует массив быстрее. Результат исследование двух массивов должен сохранятся в файл *txt. Структура интерфейса должна быть максимально понятна для пользователя.
2 РАБОЧЕЕ ПРОЕКТИРОВАНИЕ
Данную задачу я буду реализовывать в Delphi7.Для этого я запустил программу Delphi и выполнил команду: File-New-Application. В верхней части нашего окна мы видим полосу главного меню. Ниже полосы главного меню расположены две инструментальные панели. Левая панель содержит два ряда быстрых кнопок, дублирующих некоторые наиболее часто используемые команды меню. Правая панель содержит палитру компонентов библиотеки визуальных компонентов. Правее полосы главного меню в Delphi7 размещена еще одна небольшая инструментальная панель, содержащая выпадающий список и две быстрые кнопки.
В основном поле окна мы можем увидеть слева два окна: вверху -Дерево Объектов(Object TreeView), под ним – Инспектор Объектов(Object Inspector). Окно Дерева Объектов отображает иерархическую связь компонентов и объектов нашего приложения. Инспектор Объектов это основной инструмент, с помощью которого можно задавать свойства компонентов и обработчики событий. Правее этих окон мы можем видеть окно пустой формы, готовой для переноса на нее компонентов, а под ним расположено окно Редактора Кодов.
Для этого приложения я создам три формы которые свяжу между собой. Для Form1(она будет нашей главной формой) установим такие значения:
Свойство | Значение | Коментарий |
Caption | SortMassiv 1.0 | Строка текста, идентифицирующая компонент для пользователя |
Height | 576 | Высота формы |
Width | 836 | Ширина формы |
Position | poMainFormCenter | Позиция формы при запуске программы |
Эта форма будет содержать поля ввода и вывода отсортированного массива, а так же на ней будет располагаться кнопки для сохранения отсортированного массива, а так же компонент для отображения графа.
Первой своей форме я уже присвоил выше показанные свойства. Теперь на форме SortMass 1.0 нужно сделать меню. В Delphi имеется два компонента, представляющие меню: MainMenu - главное меню, и PopupMenu -всплывающее меню или контекстное меню. Оба эти компонента расположены на вкладке Standard. Для своего приложения меню я буду использовать MainMenu.Для этого я его расположил на форме и двойным щелчком мыши по компоненту открыл конструктор меню и создал там три раздела меню и для каждого из них сделал свои подразделы:
· Меню→ Получить массив→ Сохранить массив→ Сравнение методов;
· О программе;
· Справка;
Далее я приступил к созданию «рабочего поля» программы, разместил на форму два компонента Panel, и разделил их между собой компонентом Splitter этот компонент позволяет перемещать границы, разделяющие различные панели, изменяя их относительные размеры. На одну из панелей разместил два компонента Label для отображения исходного, и отсортированного массива. Далее на одну панель расположил компонет Chart – этот компонент позволяет строить различные диаграммы, и графики. Для Chart
установим такие значения:
Свойство | Значение | Коментарий |
TChartSeriesList | Исходный, Отсортированный | Строка в которой указываются серии для отображения их на графике |
Title | Иллюстрация сортировки | Определяет заголовок формы |
Эта форма будет содержать поля ввода и вывода отсортированного массива, а так же на ней будет располагаться кнопки для сохранения отсортированного массива, а так же компонент для отображения графа.
Первой своей форме я уже присвоил выше показанные свойства. Теперь на форме SortMass 1.0 нужно сделать меню. В Delphi имеется два компонента, представляющие меню: MainMenu - главное меню, и PopupMenu -всплывающее меню или контекстное меню. Оба эти компонента расположены на вкладке Standard. Для своего приложения меню я буду использовать MainMenu.Для этого я его расположил на форме и двойным щелчком мыши по компоненту открыл конструктор меню и создал там три раздела меню и для каждого из них сделал свои подразделы:
· Меню→ Получить массив→ Сохранить массив→ Сравнение методов;
· О программе;
· Справка;
Далее я приступил к созданию «рабочего поля» программы, разместил на форму два компонента Panel, и разделил их между собой компонентом Splitter этот компонент позволяет перемещать границы, разделяющие различные панели, изменяя их относительные размеры. На одну из панелей разместил два компонента Label для отображения исходного, и отсортированного массива. Далее на одну панель расположил компонет Chart – этот компонент позволяет строить различные диаграммы, и графики. Для Chart
установим такие значения:
Свойство | Значение | Коментарий |
TChartSeriesList | Исходный, Отсортированный | Строка в которой указываются серии для отображения их на графике |
Title | Иллюстрация сортировки | Определяет заголовок формы |
При двойном щелчке по компоненту Chart
вызываем конструктор диаграмм, в котором можно выбрать из стандартных типов диаграмм нужный мне тип. Также в этом конструкторе на вкладкеSeries выберу нужный цвет для каждой из созданных серий.
Далее поставил на форму кнопки при нажатии на которых будут выполнятся такие действия как : сохранение отсортированного массива, сравнение методов сортировки массивов, открытия массива из файла *txt, отчистка полей для повторной сортировки. Также для создания интерфейса программы использовал такие компоненты как : StatusBar, Timer (для отображения времени и даты в строке состояния),ImeageList ( для отображения иконок в главном меню), SaveDialog (для сохранения отсортированного массива), OpenDialog (для открытия исходного массива), GroupBox, RadioGroup.
Создал вторую форму, сделав команду File-New-Form, и задал такие же свойства как и для главной формы.Фторая форма предназначена для отображения диаграммы сравнения двух способов сортировки (метод пузырька, метод простых вставок), а так же для сохранения результата сравнения двух методов сортировки в файл *txt. Для создания интерфейса второй формы использовал такие компоненты как: StatusBar, Timer (для отображения времени и даты в строке состояния),ImeageList ( для отображения иконок в главном меню), SaveDialog (для сохранения результата сравнения двух методов сортировки),Chart( для отображения диаграммы сравнения), ProgressBar( для отображения хода процесса сравнения).
Создание третей формы нужно для отображения одного из разделов меню: О программе. На этой форме будут указываться версия продукта, и дополнительная информация о программе.Создав третюю форму присвоил ей такие значения:
Свойство | Значение | Коментарий |
Caption | О программе | Строка текста, идентифицирующая компонент для пользователя |
Height | 211 | Высота формы |
Width | 308 | Ширина формы |
Position | poMainFormCenter | Позиция формы при запуске программы |
biMinimaze | false | Окно не сворачивается |
biMaximaze false | false | Окно не разворачивается |
BorderStyle | bsSizeable | Нельзя поменять размер окна |
3 МЕТОДЫ СОРТИРОВОК
5.1Общее.
Основными операциями, выполняемыми над массивами, являются упорядочение (сортировка) записей и поиск в массиве записи по заданному условию( по ключу ). Сортировка является операцией расстановки записей массива в определенном порядке в соответствии с некоторым критерием упорядочения. Сортировка осуществляется в соответствии со значением ключей всех записей (напр., упорядочение фамилий по алфавиту или чисел по возрастанию ). Существует достаточно много методов сортировки, принципиально отличающихся друг от друга. Если массив целиком помещается в оперативной памяти ЭВМ, то его упорядочение называют внутренним. Если для хранения упорядочиваемых данных используются внешнее запоминающее устройство, то такое упорядочение называют внешним. Критериями оценки методов сортировки являются:
С - количество операций сравнения пар ключей,
Р - число перестановок элементов ,
S - резерв памяти.
Среднее количество операций сравнения зависит от метода сортировки и при рациональном выборе метода достигает некоторого минимума, зависящего от n - размера массива (размер массива - количество содержащихся в нём записей). Методы внутренней сортировки можно разделить на две группы:
- методы, не требующие резерва памяти;
- методы, требующие резерва памяти.
К первой группе относятся такие методы, как метод выборки, "пузырька", вставки, Шелла. Ко второй группе относятся метод квадратичной выборки, метод слияния и другие. Простые методы сортировки (выбором, обменом, вставкой) требуют приблизительно n**2 сравнений.
Более сложные алгоритмы обычно обеспечивают получение результата за n*log2(n) сравнений в среднем: сортировка методом Шелла, слиянием, "быстрая сортировка". Однако оптимальной в любом случае сортировки не существует, так как их эффективность существенно зависит от типа ключей в массиве и их предварительной упорядоченности.
Рассмотрим алгоритмы наиболее распространенных методов внутренней сортировки ( упорядочение выполняется по возрастанию значений ключа ).
5.2.Метод "Пузырька".
При использовании этого способа требуется самое большее (n-1) проходов. В течение первого прохода массива сравниваются ключи К1 и К2 первой и второй записей, и, если порядок между ними нарушен, то записи R1 и R2 меняются местами. Затем этот процесс повторяется для записей R2 и R3, R3 и R4 и т.д. Данный метод заставляет двигаться, или "всплывать", записи с малыми ключами. После первого прохода запись с наибольшим ключом будет находиться на n - й позиции массива. При каждом последующем проходе записи со следующем наибольшим ключом будут располагаться в позициях n-1, n-2, ... , 2 соответственно, в результате чего будет сформирована отсортированная таблица. После каждого прохода через массив может быть сделана проверка, были ли совершены перестановки в течение данного прохода. Если перестановок не было, то это означает, что массив уже отсортирован и дальнейших проходов не требуется. Кроме того, можно запоминать индекс последней перестановки. Это позволит уменьшить на следующем шаге просматриваемый массив.
Характеристики сортировки методом "пузырька" в худшем случае составляют n(n-1)/2 сравнений и n(n-1)/2 перестановок (худшим считается случай,когда элементы наиболее удалены от своих конечных позиций). Среднее число сравнений и перестановок имеет порядок n**2 . Сортировка пузырьковым методом использует метод обменной сортировки.
Она основана на выполнении в цикле операций сравнения и при необходимости обмена соседних элементов. Ее название происходит из-за подобия процессу движения пузырьков в резервуаре с водой когда каждый пузырек находит свой собственный уровень.
Сортировку пузырьковым методом можно в некоторой степени улучшить и тем самым немного улучшить ее временные характеристики. Можно, например, заметить, что сортировка пузырьковым методом обладает одной особенностью: расположенный не на своем месте в конце массива элемент (например, элемент "а" в массиве "dcab") достигает своего места за один проход, а элемент, расположенный в начале массива (например, элемент "d"), очень медленно достигает своего места. Необязательно все просмотры делать в одном направлении. Вместо этого всякий последующий просмотр можно делать в противоположном направлении. В этом случае сильно удаленные от своего места элементы будут быстро перемещаться в соответствующее место. Хотя эта сортировка является улучшением пузырьковым методом, ее нельзя рекомендовать для использования, поскольку время выполнения по-прежнему зависит квадратично от числа элементов. Число сравнений не изменяется, а число обменов уменьшается лишь на незначительную величину.
5.3 Метод простых вставок
Сортировка вставками - простой алгоритм сортировки. Этот метод сортировки менее эффективен чем более сложные алгоритмы ( такие как быстрая сортировка), но у него есть ряд преймушеств:
· Прост в реализации
· Эффективен на небольших наборах данных
· Эффективен на наборе данных которые уже частично отсортированы
· Это устойчивый алгоритм (не меняет порядок элеменов которые уже осотрированны)
На каждом шаге алгоритма мы выбираем один из элементов входных данных и восстанавливаем его на нужную позицию в уже отсортированном списке, до тех пор пока набор входных данных не будет исчерпан. Метод выбора очередного элемента из исходного массива произволен; может использоваться практически любой алгоритм выбора.
Алгоритм метода простых вставок использует прием котрым пользуется игрок в карты при сортировки только что разданной колоды: очередная карта вставляется между уже упорядоченными ранее.
Описания метода простых вставок: файл подлежащий сортировке, в общем случае состоит из элементов- записей, включающих информационную часть и ключи, по которым производятся упорядочение по возростанию. Поскольку информационная часть почти не влияет на процесс сортировки, предпологаем что файлы используемые в примерах, состоят только из элементов-ключей, а информационная часть записей.
4 ВЫВОДЫ
В ходе выполнения данного курсового проекта были разработана программа на языке высокого уровня Delphi 7. А также изучены возможности данного языка.
Систематизированы и закреплены практические навыки использования ЭВМ, программного обеспечения, существующих средств обслуживания системных программистов, а также теоретические знания по основным разделам курса "Объектно-ориентированного программирования". Основное внимание уделено изучению современных методов защиты информации, способов проектирования приложений, объектно-ориентированному и системному программированию.
При выполнении курсового проекта произведено знакомство с реферативными журналами и другими информационными источниками по объектно-ориентированному и системному программированию с целью анализа состояния решаемой задачи.
Получены практические навыки работы в средеDelphi 7.
ПРИЛОЖЕНИЕ А
Формы программы
На рисунке 1.1 изображено главное меню программы:
Рис 1.1
На рисунке 1.2 показано окно сравнения методов сортировки:
Рис. 1.2
На рис. 1.3 показано окно “О программе”
ПРИЛОЖЕНИЕ Б
Программа имеет возможность сохранять обрабатываемые данные в файл * txt.Сохранение производится в текстовый файл, который можно открыть с помощью любого текстового редактора.
Также программа вводит исходный массив из файла * txt который создается пользователем самостоятельно в любом текстовом редакторе. При создании исходного массива нужно придерживаться следующих правил:
· Файл должен содержать только числовую информацию.
· Первая цифра должна соответствовать количеству элементов массива, и после этой цифры пользователь должен перейти на новую строку (Enter).
· После перехода на новую строку, пользователь вводит нужный ему одномерный массив и сохраняет его под любым именем в формате *txt.
· Если вышеуказанные пункты были выполнены, то программа откроет созданный вами файл для сортировки.
ПРИЛОЖЕНИЕ В
Документация пользователя:
Запуск программы осуществляется при открытии файла SortMass.exe, который находится на носители информации. При этом на экране появиться окно, в левой верхней части которого будет видна надпись “SortMass
Пункт “получить массив” позволяет пользователю ввести массив из файла *txt, для его сортировки.
Пункт “сохранить массив” позволяет сохранять отсортированный массив в файл *txt.
При нажатии по пункту “сравнение методов”, открывается новое окно в котором указывается начальное количество элементов массива, конечное количество элементов массива, и шаг изменения, и по этим параметрам строится график сравнения двух методов сортировки.
Следущй пункт “выход”, при выборе этого пункта программа закрывается.
Предпоследним пунктом меню является меню о программе, если выбрать этот пункт то откроется окно которое содержит информацию о разработчике и о самой программе.
Последним пунктом меню является меню “Спрвака” в этом меню содержится справочная информация по приложению.
Под меню располагается рабочая область, которая делится на две части: ввод массива и операции над ним, и отображение отсортированного
и исходного массива в виде диаграммы. В первой части кнопка “получить массив” полностью дублирует кнопку в меню с таким же названием,при нажатии по кнопке “Сортировать”, выбранный массив сортируется выбранным методом сортировки. При нажатии по кнопке “Отчистить” рабочее поле отчишяется для повторной сортировки. Кнопка “Сохранить” дублирует пункт меню “Сохранить массив”. Кнопка на рабочем поле “Сравнение методов сортировки” так же дублирует пункт меню “Сравнение методов”.
Системные требования: Pentium 133, 16 MB RAM, Windows 95/98/2000 NT/XP.
ПРИЛОЖЕНИЕ Г
Текст разработанного модуля SortMass 1.0:
public
{ Public declarations }
mass=array of integer;
procedure puzerek(n:integer; var a:mass);
procedure prostvst(n:integer; var a:mass);
var
Form1: TForm1;
n,i:integer;
a:mass;
implementation
uses Unit2;
{$R *.dfm}
// процедура открытия массива из файла *txt (ввод массива)
procedure TForm1.Button1Click(Sender: TObject);
var name:string;
f:textfile;
begin
if opendialog1.Execute then name:=opendialog1.FileName;
if name='' then showmessage('Пожалуйста, выберите файл') else
begin
assignfile(f,name);
reset(f);
readln(f,n);
label1.caption:=inttostr(n);
Label4.Caption:='';
Series1.Clear;
SetLength(a,n+1);
for i:=1 to n do
begin
read(f,a[i]);
Label4.Caption:=Label4.Caption+' '+IntToStr(a[i]);
Series1.AddXY(i,a[i]);//отображния исходного массива на диограмме
end;
closefile(f);
end;
end;
// сортировка методом пузыртка
procedure puzerek(n:integer; var a:mass);
var j,tmp:integer;
begin
for i:=1 to n-1 do
for j:=1 to n-i do
if (a[j+1]<a[j]) then
begin
tmp:=a[j+1];
a[j+1]:=a[j];
a[j]:=tmp;
end;
end;
// сортировка методом простых вставок
procedure prostvst(n:integer; var a:mass);
var j,tmp:integer;
begin
for j:=2 to n do
begin
tmp:=a[j];
i:=j-1;
while (i>0) and (a[i]>tmp) do
begin
a[i+1]:=a[i];
i:=i-1;
end;
a[i+1]:=tmp;
end;
end;
//вызов функций puzerek и prostvst
procedure TForm1.Button2Click(Sender: TObject);
begin
case Radiogroup1.ItemIndex of
0:puzerek(n,a);
1:prostvst(n,a);
end;
// Отчистка полей перед вводом массива
Label5.Caption:='';
Series2.Clear;
for i:=1 to n do
// Ввод массива в поля и отображение их на графе
begin
Label5.Caption:=Label5.Caption+' '+IntToStr(a[i]);
Series2.AddXY(i,a[i]);
end;
end;
// Процедура сохранения сортировки
procedure TForm1.Button3Click(Sender: TObject);
var name:string;
f:textfile;
begin
if savedialog1.Execute then name:=savedialog1.FileName;
if name='' then showmessage('Не выбран файл для сохранения') else
begin
assignfile(f,name);
rewrite(f);
writeln(f,label5.caption);
closefile(f);
end;
end;
// Возврашение на первую форму
procedure TForm1.N2Click(Sender: TObject);
begin
application.Createform(tform2, form2);
form2.visible:=true;
form1.Hide;
end;
procedure TForm1.N3Click(Sender: TObject);
begin
Form3.Visible:=True;
end;
procedure TForm1.N4Click(Sender: TObject);
begin
Form1.Button1Click(Button1);
end;
procedure TForm1.N5Click(Sender: TObject);
begin
Form1.Button3Click(Button3);
end;
// Вывод времени и даты в строку состояния
procedure TForm1.Timer1Timer(Sender: TObject);
begin
statusBar1.Panels[0].Text:=DateToStr(Now);
StatusBar1.Panels[1].Text:=TimeToStr(Now);
StatusBar1.Panels[0].Alignment:=taCenter;
end;
procedure TForm1.N8Click(Sender: TObject);
begin
Close;
end;
// Отчитска полей ввода
procedure TForm1.Button4Click(Sender: TObject);
begin
Label4.Caption:='';
Label5.Caption:='';
Series1.Clear;
Series2.Clear;
end;
// открытие окна Сравнение методов
procedure TForm1.Button5Click(Sender: TObject);
begin
application.Createform(tform2, form2);
form2.visible:=true;
form1.Hide;
end;
end.
Текст модуля “Сравнение методов”
Form2: TForm2;
s:array of string;
p,q:integer;
implementation
uses Unit1;
{$R *.dfm}
//
procedure TForm2.Button1Click(Sender: TObject);
var a,a1:mass;
n1,n2,d,i:integer;
st,fn,freq:int64;
T1,T2:real;
begin
n1:=strtoint(edit1.Text);
n2:=strtoint(edit2.Text);
d:=strtoint(edit3.Text);
Progressbar1.Max:=n2;
SetLength(a,n2+1);
SetLength(a1,n2+1);
q:=round((n2-n1)/d)+1;
SetLength(s,q+1);
p:=1;
randomize;
while n1<=n2 do
begin
queryperformancefrequency(freq);
for i:=1 to n1 do
begin
a[i]:=random(2001)-1000;
a1[i]:=a[i];
end;
queryperformancecounter(st);
Unit1.puzerek(n1,a);
queryperformancecounter(fn);
T1:=(fn-st)/freq*1000;
queryperformancecounter(st);
Unit1.prostvst(n1,a1);
queryperformancecounter(fn);
T2:=(fn-st)/freq*1000;
s[p]:='Количество элементов '+inttostr(n1)+' время методом пузырька '+inttostr(round(T1))+' мс время методом простых вставок '+inttostr(round(T2))+' мс';
Series1.AddXY(n1,T1);
Series2.AddXY(n1,T2);
Progressbar1.Position:=n1;
p:=p+1;
n1:=n1+d;
end;
end;
// Процедура сохранения иследования массива в текстовый файл
procedure TForm2.Button2Click(Sender: TObject);
var name:string;
f:textfile;
begin
if savedialog1.Execute then name:=savedialog1.FileName;
if name='' then showmessage('Не выбран файл для сохранения') else
begin
assignfile(f,name);
rewrite(f);
for p:=1 to q do writeln(f,s[p]);
closefile(f);
end;
end;
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
form1.Show;
end;
// Возрашение к началу сортировки
procedure TForm2.Button3Click(Sender: TObject);
begin
application.Createform(tform1, form1);
form1.visible:=true;
Form2.Hide;
end;
procedure TForm2.Timer1Timer(Sender: TObject);
begin
statusBar1.Panels[0].Text:=DateToStr(Now);
StatusBar1.Panels[1].Text:=TimeToStr(Now);
StatusBar1.Panels[0].Alignment:=taCenter
end;
procedure TForm2.N4Click(Sender: TObject);
begin
Button1.Click;
end;
procedure TForm2.N5Click(Sender: TObject);
begin
Button2.Click;
end;
procedure TForm2.N7Click(Sender: TObject);
begin
Button3.Click;
end;
procedure TForm2.N9Click(Sender: TObject);
begin
Close;
end;
procedure TForm2.N2Click(Sender: TObject);
begin
Form3.Visible:=True;
end;
end.
Текст модуля о “программе”:
implementation
{$R *.dfm}
procedure TForm3.BitBtn1Click(Sender: TObject);
begin
Close;
end;
end.
begin
assignfile(f,name);
rewrite(f);
writeln(f,label5.caption);
closefile(f);
end;
end;
// Возврашение на первую форму
procedure TForm1.N2Click(Sender: TObject);
begin
application.Createform(tform2, form2);
form2.visible:=true;
form1.Hide;
end;
procedure TForm1.N3Click(Sender: TObject);
begin
Form3.Visible:=True;
end;
procedure TForm1.N4Click(Sender: TObject);
begin
Form1.Button1Click(Button1);
end;
procedure TForm1.N5Click(Sender: TObject);
begin
Form1.Button3Click(Button3);
end;
// Вывод времени и даты в строку состояния
procedure TForm1.Timer1Timer(Sender: TObject);
begin
statusBar1.Panels[0].Text:=DateToStr(Now);
StatusBar1.Panels[1].Text:=TimeToStr(Now);
StatusBar1.Panels[0].Alignment:=taCenter;
end;
procedure TForm1.N8Click(Sender: TObject);
begin
Close;
end;
// Отчитска полей ввода
procedure TForm1.Button4Click(Sender: TObject);
begin
Label4.Caption:='';
Label5.Caption:='';
Series1.Clear;
Series2.Clear;
end;
// открытие окна Сравнение методов
procedure TForm1.Button5Click(Sender: TObject);
begin
application.Createform(tform2, form2);
form2.visible:=true;
form1.Hide;
end;
end.
Текст модуля “Сравнение методов”
Form2: TForm2;
s:array of string;
p,q:integer;
implementation
uses Unit1;
{$R *.dfm}
//
procedure TForm2.Button1Click(Sender: TObject);
var a,a1:mass;
n1,n2,d,i:integer;
st,fn,freq:int64;
T1,T2:real;
begin
n1:=strtoint(edit1.Text);
n2:=strtoint(edit2.Text);
d:=strtoint(edit3.Text);
Progressbar1.Max:=n2;
SetLength(a,n2+1);
SetLength(a1,n2+1);
q:=round((n2-n1)/d)+1;
SetLength(s,q+1);
p:=1;
randomize;
while n1<=n2 do
begin
queryperformancefrequency(freq);
for i:=1 to n1 do
begin
a[i]:=random(2001)-1000;
a1[i]:=a[i];
end;
queryperformancecounter(st);
Unit1.puzerek(n1,a);
queryperformancecounter(fn);
T1:=(fn-st)/freq*1000;
queryperformancecounter(st);
Unit1.prostvst(n1,a1);
queryperformancecounter(fn);
T2:=(fn-st)/freq*1000;
s[p]:='Количество элементов '+inttostr(n1)+' время методом пузырька '+inttostr(round(T1))+' мс время методом простых вставок '+inttostr(round(T2))+' мс';
Series1.AddXY(n1,T1);
Series2.AddXY(n1,T2);
Progressbar1.Position:=n1;
p:=p+1;
n1:=n1+d;
end;
end;
// Процедура сохранения иследования массива в текстовый файл
procedure TForm2.Button2Click(Sender: TObject);
var name:string;
f:textfile;
begin
if savedialog1.Execute then name:=savedialog1.FileName;
if name='' then showmessage('Не выбран файл для сохранения') else
begin
assignfile(f,name);
rewrite(f);
for p:=1 to q do writeln(f,s[p]);
closefile(f);
end;
end;
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
form1.Show;
end;
// Возрашение к началу сортировки
procedure TForm2.Button3Click(Sender: TObject);
begin
application.Createform(tform1, form1);
form1.visible:=true;
Form2.Hide;
end;
procedure TForm2.Timer1Timer(Sender: TObject);
begin
statusBar1.Panels[0].Text:=DateToStr(Now);
StatusBar1.Panels[1].Text:=TimeToStr(Now);
StatusBar1.Panels[0].Alignment:=taCenter
end;
procedure TForm2.N4Click(Sender: TObject);
begin
Button1.Click;
end;
procedure TForm2.N5Click(Sender: TObject);
begin
Button2.Click;
end;
procedure TForm2.N7Click(Sender: TObject);
begin
Button3.Click;
end;
procedure TForm2.N9Click(Sender: TObject);
begin
Close;
end;
procedure TForm2.N2Click(Sender: TObject);
begin
Form3.Visible:=True;
end;
end.
Текст модуля о “программе”:
implementation
{$R *.dfm}
procedure TForm3.BitBtn1Click(Sender: TObject);
begin
Close;
end;
end.