Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Файл Unit2.cpp⇐ ПредыдущаяСтр 12 из 12
//---------------------------------------------------------------------------
#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
|