Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая - Воробьев.doc
Скачиваний:
14
Добавлен:
04.09.2019
Размер:
1.7 Mб
Скачать

5.Структура прграммы

5.1.Интерфейс программы

Интерфейс программы состоит из двух форм – Form1 (рис.5.1.) – основной формы и формы вывода графика (диаграммы) – GrafForm (рис.5.2.). На рисунках дополнительно указаны программные имена всех элементов управления, динамически задействованных в ходе выполнения программы.

Рис. 5.9. Главная форма Form1

Рис. 5.10. Форма вывода графиков и диаграмм GrafForm

5.2.Описание структуры программы

5.2.1.Глобальная структура для хранения статистики

Так как в программе реализован вывод статистики по всем методам сортировки для всех размерностей, эту статистику надо где-то хранить для обращения к ней из любого участка программы, в том числе и из Формы вывода графика GrafForm. Форма GrafForm, для вывода графиков (диаграмм) использует информацию результатов сортировки (статистику). Для хранения этой статистики в программе была создана глобальная структура с необходимыми полями для хранения эффективности метода сортировки (время выполнения, кол-во сравнений, присваиваний и рассчитанная эффективность), а также массив из четырех элементов этой структуры для каждого из четырех методов сортировки. Эта структура описывается в заголовочном файле Unit1.h в разделе public, к которой можно обращаться из любой Формы программы. Для этого необходимо включить этот заголовочный файл в другой Форме, используя инструкцию #include. Вид глобальной структуры и массив из четырех элементов этой структуры для хранения статистики представлен ниже (описывается в Unit1.h в разделе public):

// структура для хранения результатов сортировки

struct MethodsStat

{

// название метода сортировки

AnsiString Name;

// кол-во сравнений

// первая размерность - для убывающей и случайной порядков заполнения

// вторая размерность - для каждой размерности массива (5,7,9,25 элементов)

unsigned int Compares[2][4];

// кол-во присваиваний

// первая размерность - для убывающей и случайной порядков заполнения

// вторая размерность - для каждой размерности массива (5,7,9,25 элементов)

unsigned int Changes[2][4];

// эффективность

// первая размерность - для убывающей и случайной порядков заполнения

// вторая размерность - для каждой размерности массива (5,7,9,25 элементов)

int Eff[2][4];

// время сортировки

// первая размерность - для убывающей и случайной порядков заполнения

// вторая размерность - для каждой размерности массива (5,7,9,25 элементов)

double Tsort[2][4];

};

// создаем массив из 4-х элементов для каждого метода сортировки

MethodsStat Methods[4];

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

5.2.2.Основной модуль Unit1.Cpp (для Формы Form1)

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

В основном модуле предусмотрены глобальные переменные:

  • short arSizes[4] = {5,7,9,25} - массив для определения размерностей массивов. Этот массив нужен для того, чтобы в различных функциях в цикле проходить по всем размерностям.

  • const MaxSize = 25 – константа, хранящая максимальную размерность исходных массивов

  • short CurSize – переменная для хранения индекса текущей размерности. Сама размерность берется из arSizes. Так как согласно интерфейсу, в один момент времени может быть выбрана только одна размерность (Радио-кнопки – переключатели), то эта переменная нужна для хранения текущей размерности и использования ее в функциях сортировки (по ее значению определяется размерность текущего исх.массива путем обращения к массиву arSizes).

  • short arSource[2][4][MaxSize] – исходный массив. Сделан глобальным для обращения к нему из любой части основного модуля. Первая размерность [2] – служит для определения убывающей или случайного порядков заполнения. Вторая размерность [4] – указывает на размер массива (индекс для arSizes). Третья размерность [MaxSize] – сам исходный массив.

  • short arRes[2][MaxSize] – массив с результатом сортировки. Сделан глобальным для обращения к нему из любой части основного модуля, исключая его повторное создание. Первая размерность [2] – служит для определения убывающей или случайного порядков заполнения. Вторая размерность [MaxSize] хранит сам отсортированный массив.

  • unsigned int SortCount – переменная для хранения кол-ва повторений сортировок (для определения времени выполнения), введенных пользователем. Сделана глобальной для обращения к ней из любой части программы.

  • double t_copy – переменная для хранения времени, необходимое для копирования из массива в массив SortCount раз. Используется для более точного замера времени выполнения алгоритмов сортировки (это время вычитается из времени выполнения сортировки, т.к. нам не нужно учитывать время на копирование из массива в массив).

Помимо самих функций сортировки и поиска, в соответствии с интерфейсом в программе присутствует множество вспомогательных функций:

  • Функции-обработчики событий элементов управления

  • Функции подготовки, вывода и очистки результатов сортировки

  • Функция проверки прохождения по всем методам сортировки

  • Функции очистки и вывода информации о текущей операции

  • Функции инициализации прогресс-бара, изменения различных глобальных переменных в зависимости от события, заполнения массивов значениями, инициализации начальных значений массивов и переменных при старте программы и т.д.

  • Функция прохождения всех сортировок по всем размерностям в автоматическом режиме, нажатием одной кнопки.

Сортировка быстрым методом отличается по своей реализации от других методов за счет рекурсивных вызовов, поэтому она состоит из трех функций – Функция сортировки с подсчетом эффективности, Функция сортировки без подсчета эффективности и Функция, в которой вызываются подряд эти функции. Первая вызывается для определяется эффективности, а вторая вызывается SortCount раз для замера времени выполнения алгоритма.

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

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