Студопедия

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

КАТЕГОРИИ:

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






Файл 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) http://www.codenet.ru/progr/bcb/borland_builder/

4) http://cppbuilder.ru/

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

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

 

 


mylektsii.ru - Мои Лекции - 2015-2019 год. (0.016 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал