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

6.4.Файл 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);

}

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