Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Файл Unit2.cpp






//---------------------------------------------------------------------------

 

#include < vcl.h>

#pragma hdrstop

 

#include " Unit2.h"

#include " Unit1.h"

#include " math.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource " *.dfm"

TGrafForm *GrafForm;

 

// массив для хранения размерностей массивов

short arSize[4] = {5, 7, 9, 25};

 

// массив для хранения значений цвета для каждого метода сортировки

TColor arColors[4] = {clRed, clBlue, clFuchsia, clLime}; //, clAqua};

 

//---------------------------------------------------------------------------

__fastcall TGrafForm:: TGrafForm(TComponent* Owner)

: TForm(Owner)

{

}

 

 

//---------------------------------------------------------------------------

// функция округления вещественного числа до ближайшего целого

float Round(float Argument, int Precision)

{

float div = 1.0;

if(Precision > = 0)

while(Precision--)

div *= 10.0;

else

while(Precision++)

div /= 10.0;

return floor(Argument * div + 0.5) / div;

}

 

 

//---------------------------------------------------------------------------

// функция вывода графика по результатам сортировки

// Параметр:

// Fill = 0 - для вывода графика для массивов с убывающим порядком

// Fill = 1 - для вывода графика для массивов со случаным порядком

void PutGraf(short Fill)

{

// переменная для определения наибольшего времени выполнения сортировки

double MaxT;

 

short i, j, x0, y0, xres, yres;

 

// начальные x, y

x0 = 30;

y0 = 700;

// разрешение графика в пикселях

xres = 600;

yres = 680;

 

// рисуем оси системы координат x, y

GrafForm-> Repaint(); // стираем все, что нарисовали ранее

GrafForm-> Canvas-> Pen-> Color = clBlack; // устанавливаем черный цвет

GrafForm-> Canvas-> MoveTo(x0-10, y0);

GrafForm-> Canvas-> LineTo(x0+xres+10, y0);

GrafForm-> Canvas-> MoveTo(x0, y0+10);

GrafForm-> Canvas-> LineTo(x0, y0-yres-10);

GrafForm-> Canvas-> MoveTo(x0, y0);

 

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

MaxT = -0.1; // присваиваем отрицательное начальное значение

for (i = 0; i < 4; i++) // цикл перебора по методам сортировки

for (j = 0; j < 4; j++) // цикл перебора по размерностям массивов

if (Form1-> Methods[i].Tsort[Fill][j] > MaxT)

MaxT = Form1-> Methods[i].Tsort[Fill][j];

 

// присваиваем меткам на оси Y значения времени выполнения

GrafForm-> lbTime9-> Caption = FloatToStr(Round(MaxT, 2)) + " с";

GrafForm-> lbTime8-> Caption = FloatToStr(Round(MaxT/7*6, 2)) + " с";

GrafForm-> lbTime7-> Caption = FloatToStr(Round(MaxT/7*5, 2)) + " с";

GrafForm-> lbTime6-> Caption = FloatToStr(Round(MaxT/7*4, 2)) + " с";

GrafForm-> lbTime5-> Caption = FloatToStr(Round(MaxT/7*3, 2)) + " с";

GrafForm-> lbTime4-> Caption = FloatToStr(Round(MaxT/7*2, 2)) + " с";

GrafForm-> lbTime3-> Caption = FloatToStr(Round(MaxT/7, 2)) + " с";

GrafForm-> lbTime2-> Caption = FloatToStr(Round(MaxT/14, 2)) + " с";

GrafForm-> lbTime1-> Caption = FloatToStr(Round(MaxT/28, 2)) + " с";

 

//нарисуем график на осях системы координат

for (j = 0; j < 4; j++){ // цикл перебора методов сортировки

GrafForm-> Canvas-> Pen-> Color = arColors[j]; //меняем цвет карандаша в соответствии с текущим методом сортировки

for (i = 0; i < 4; i++) //цикл перебора размерностей массивов

//рисуем непрерывную линию

//на каждой итерации X увеличивается в зависимости от значения размерности массива

//значение Y берется из структуры результатов сортировки

GrafForm-> Canvas-> LineTo(Round(xres*arSize[i]/25, 0)+x0, y0-Round(yres/MaxT*Form1-> Methods[j].Tsort[Fill][i], 0));

GrafForm-> Canvas-> MoveTo(x0, y0); // возвращаем обратно карандаш в позицию x0, y0 для следующей итерации (нового метода сортировки)

}

 

 

//рисуем диаграмму результатов (справа) сортировки массива с 5 элементами

MaxT = -0.1; //переменная для определения максимального времени выполнения для массиво с 5 элементами

//определим максимальное время для 5 эл.

for (i = 0; i < 4; i++) // цикл перебора всех методов сортировки

if (Form1-> Methods[i].Tsort[Fill][0] > MaxT)

MaxT = Form1-> Methods[i].Tsort[Fill][0];

GrafForm-> lbMax5-> Caption = MaxT;

// выводим результаты в виде ширины закрашенной панели (макс.ширина = 250)

GrafForm-> pnSelect5-> Width = floor(250/MaxT*Form1-> Methods[0].Tsort[Fill][0]);

GrafForm-> pnInsert5-> Width = floor(250/MaxT*Form1-> Methods[1].Tsort[Fill][0]);

GrafForm-> pnPuzir5-> Width = floor(250/MaxT*Form1-> Methods[2].Tsort[Fill][0]);

GrafForm-> pnQuick5-> Width = floor(250/MaxT*Form1-> Methods[3].Tsort[Fill][0]);

 

 

//рисуем диаграмму результатов (справа) сортировки массива с 7 элементами

MaxT = -0.1;

for (i = 0; i < 4; i++)

if (Form1-> Methods[i].Tsort[Fill][1] > MaxT)

MaxT = Form1-> Methods[i].Tsort[Fill][1];

GrafForm-> lbMax7-> Caption = MaxT;

GrafForm-> pnSelect7-> Width = floor(250/MaxT*Form1-> Methods[0].Tsort[Fill][1]);

GrafForm-> pnInsert7-> Width = floor(250/MaxT*Form1-> Methods[1].Tsort[Fill][1]);

GrafForm-> pnPuzir7-> Width = floor(250/MaxT*Form1-> Methods[2].Tsort[Fill][1]);

GrafForm-> pnQuick7-> Width = floor(250/MaxT*Form1-> Methods[3].Tsort[Fill][1]);

 

 

//рисуем диаграмму результатов (справа) сортировки массива с 9 элементами

MaxT = -0.1;

for (i = 0; i < 4; i++)

if (Form1-> Methods[i].Tsort[Fill][2] > MaxT)

MaxT = Form1-> Methods[i].Tsort[Fill][2];

GrafForm-> lbMax9-> Caption = MaxT;

GrafForm-> pnSelect9-> Width = floor(250/MaxT*Form1-> Methods[0].Tsort[Fill][2]);

GrafForm-> pnInsert9-> Width = floor(250/MaxT*Form1-> Methods[1].Tsort[Fill][2]);

GrafForm-> pnPuzir9-> Width = floor(250/MaxT*Form1-> Methods[2].Tsort[Fill][2]);

GrafForm-> pnQuick9-> Width = floor(250/MaxT*Form1-> Methods[3].Tsort[Fill][2]);

 

 

//рисуем диаграмму результатов (справа) сортировки массива с 25 элементами

MaxT = -0.1;

for (i = 0; i < 4; i++)

if (Form1-> Methods[i].Tsort[Fill][3] > MaxT)

MaxT = Form1-> Methods[i].Tsort[Fill][3];

GrafForm-> lbMax25-> Caption = MaxT;

GrafForm-> pnSelect25-> Width = floor(250/MaxT*Form1-> Methods[0].Tsort[Fill][3]);

GrafForm-> pnInsert25-> Width = floor(250/MaxT*Form1-> Methods[1].Tsort[Fill][3]);

GrafForm-> pnPuzir25-> Width = floor(250/MaxT*Form1-> Methods[2].Tsort[Fill][3]);

GrafForm-> pnQuick25-> Width = floor(250/MaxT*Form1-> Methods[3].Tsort[Fill][3]);

}

 

 

//---------------------------------------------------------------------------

//обработка события нажатия переключателя " Убывающий порядок"

void __fastcall TGrafForm:: rbUClick(TObject *Sender)

{

PutGraf(0);

}

 

 

//---------------------------------------------------------------------------

//обработка события нажатия переключателя " Случайный порядок"

void __fastcall TGrafForm:: rbRClick(TObject *Sender)

{

PutGraf(1);

}

 

//---------------------------------------------------------------------------

//вывод графика при старте

void __fastcall TGrafForm:: FormActivate(TObject *Sender)

{

GrafForm-> rbU-> Checked = true;

PutGraf(0);

}

//---------------------------------------------------------------------------

 


 

Заключение

 

 

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

 

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

 


 

Список используемой литературы

 

1) Программирование и основы алгоритмизации: учебно-методический комплекс / сост. С.А.Матюхин. - СПб.: Изд-во СЗТУ, 2008.- 194с.

2) www.algolist.ru

3) https://www.codenet.ru/progr/bcb/borland_builder/

4) https://cppbuilder.ru/

5) https://articles.org.ru/docum/builder/

6) https://www.intbook.info/C/menu.html

 

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.