Мегаобучалка Главная | О нас | Обратная связь

Руководство пользователя




Внешний вид программы представлен на Рис. Ошибка! Текст указанного стиля в документе отсутствует..1

Рис. Ошибка! Текст указанного стиля в документе отсутствует..1 - Внешний вид программы

 

Пользователь вводит в поле «Количество элементов» размер массива и нажимает кнопку «Сортировать». По-умолчанию в этом поле стоит число 10000, т.к. это условие задания. Если мы вводим число меньше 10000, то получаем сообщение о неправильности ввода Рис. Ошибка! Текст указанного стиля в документе отсутствует..2

Рис. Ошибка! Текст указанного стиля в документе отсутствует..2 - Ввод числа меньшего чем 10000

Если мы вводим в поле «Количество элементов» символы не являюшиеся числами или вещественное число, то у нас выйдет следующее сообщение:

Рис. Ошибка! Текст указанного стиля в документе отсутствует..3 - Ввод неверного числа

Если же мы ввели корректное число то программа выдаст сообщение что сортировка завершена (Рис. Ошибка! Текст указанного стиля в документе отсутствует..4)

Рис. Ошибка! Текст указанного стиля в документе отсутствует..4 - Сообщение о завершении сортировки

После нажатия кнопки «OK» отобразится гистограмма (Рис. Ошибка! Текст указанного стиля в документе отсутствует..5)

Рис. Ошибка! Текст указанного стиля в документе отсутствует..5 – Гистограмма

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

Кроме того программа записывает 3 тестовых файла. Алгоритм простого выбора создает файл «SimpleChoose.txt». Внешний вид файла приведен на Рис. Ошибка! Текст указанного стиля в документе отсутствует..6

Рис. Ошибка! Текст указанного стиля в документе отсутствует..6 - Алгоритм простого выбора

Алгоритм сортировки вставками создает файл «InsertionSort» (Рис. Ошибка! Текст указанного стиля в документе отсутствует..7)

Рис. Ошибка! Текст указанного стиля в документе отсутствует..7 - Алгоритм сортировки вставками

Алгоритм подсчета сравнений создает файл «CountCompares» (Рис. Ошибка! Текст указанного стиля в документе отсутствует..8)



Рис. Ошибка! Текст указанного стиля в документе отсутствует..8 - Метод подсчета сравнений

Приложение 4

Листнинг

Модуль MainUnit.h

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

 

#ifndef MainUnitH

#define MainUnitH

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

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <ExtCtrls.hpp>

#include <Time.h>

#include <stdio.h>

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

class TForm1 : public TForm

{

__published: // IDE-managed Components

TImage *Img_Gis;

TLabel *L_KolEl;

TEdit *Ed_KolEl;

TButton *Btn_Sort;

TLabel *Label1;

void __fastcall Btn_SortClick(TObject *Sender);

private: // User declarations

// Очищает поле и рисует оси

void DrawField(void);

// Метод простого выбора

int SimpleChoose(int *Mass,int Kol);

// Метод простых вставок

int InsertionSort(int *Mass,int Kol);

// Метод подсчета сравнений

int CountCompares(int *Mass,int Kol);

// Изображение гистограммы

void DrawGis(int first,int second,int third);

public: // User declarations

__fastcall TForm1(TComponent* Owner);

};

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

extern PACKAGE TForm1 *Form1;

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

#endif

 

 

Модуль MainUnit.cpp

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

 

#include <vcl.h>

#pragma hdrstop

 

#include "MainUnit.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

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

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

this->DrawField();

}

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

void TForm1::DrawField(void)

{

int xo,yo; // Начало координат

// Устанавливаем начало координат

xo = 20;

yo = Img_Gis->Height - 20;

 

// Очищаем поле

this->Img_Gis->Canvas->Brush->Color = clWhite;

this->Img_Gis->Canvas->FloodFill(10,10,clYellow,fsBorder);

// Рисуем оси

this->Img_Gis->Canvas->MoveTo(xo,yo);

this->Img_Gis->Canvas->LineTo(xo,20);

this->Img_Gis->Canvas->MoveTo(xo,yo);

this->Img_Gis->Canvas->LineTo(Img_Gis->Width - 20,yo);

}

 

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

void __fastcall TForm1::Btn_SortClick(TObject *Sender)

{

long i,Kol; // Индекс и количество элементов массива

int *Mass1, *Mass2, *Mass3, // Указатели на массивы

// Время работы алгоритмов

simplechoose, // Простого выбора

insertionsort, // Простых вставок

countcompares; // Подсчет сравнений

 

 

// Включаем генератор случайных чисел

randomize();

 

 

try

{

// Считываем количество элементов с формы

Kol = StrToInt(Ed_KolEl->Text);

if(Kol>=10000)

{

 

// Создаем динамические массивы

Mass1 = new int[Kol];

Mass2 = new int[Kol];

Mass3 = new int[Kol];

 

// Заполняем массивы случайными числами

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

{

Mass1[i] = random(Kol*2);

Mass2[i] = Mass1[i];

Mass3[i] = Mass1[i];

}

 

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

simplechoose = SimpleChoose(Mass1,Kol);

insertionsort = InsertionSort(Mass2,Kol);

countcompares = CountCompares(Mass3,Kol);

 

 

// Выводим сообщение о конце операции

Application->MessageBox("Сортировка завершена","Сообщение", MB_OK);

 

// Рисуем гистограмму

DrawGis(simplechoose,insertionsort,countcompares);

}

else

Application->MessageBox("Количество элементов не должно быть меньше 10000",

"Повторите ввод", MB_OK);

}

catch(EConvertError&)

{

Application->MessageBox("Вы ввели ошибочное число",

"Повторите ввод", MB_OK);

}

 

}

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

// Метод простого выбора

int TForm1::SimpleChoose(int *Mass,int Kol)

{

FILE *f;

int start, end, vremya, // Начало и конец отсчета

i,j, // Индексы

Max,n; // Максимальный элемент и его номер

// Начинаем отсчет времени

start = clock();

// Выполняем сортировку

for(i=Kol-1;i>0;i--)

{

//Устанавливаем начальное значение и номер

//для максимального элемента

Max = Mass[i];

n =i;

// Ищем максимальный элемент

for(j=0;j<=i-1;j++)

{

if (Mass[j]> Max)

{

Max= Mass[j];

Mass[j]= Mass[n];

Mass[n]=Max;

}

 

}

}

 

// Заканциваем отсчет времени

end = clock();

vremya = end - start;

// Записываем осортированный массив в файл

f = fopen("SimpleChoose.txt","w");

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

fprintf(f," %d",Mass[i]);

 

// Закрываем файл

fclose(f);

return vremya;

}

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

// Метод простых вставок

int TForm1::InsertionSort(int *Mass,int Kol)

{

FILE *f;

int start, end, vremya, // Начало и конец отсчета

i,j,k, // Индексы

Tmp; // Буфер

// Начинаем отсчет времени

start = clock();

 

// Выполняем сортировку

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

{

Tmp=Mass[i];

for(j=i-1;j>=0 && Mass[j]>Tmp;j--)

Mass[j+1] = Mass[j];

Mass[j+1] = Tmp;

}

 

// Заканциваем отсчет времени

end = clock();

vremya = end - start;

// Записываем осортированный массив в файл

f = fopen("InsertionSort.txt","w");

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

fprintf(f," %d",Mass[i]);

 

// Закрываем файл

fclose(f);

return vremya;

}

 

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

// Метод подсчета сравнений

int TForm1::CountCompares(int *Mass,int Kol)

{

FILE *f;

int start, end, vremya, // Начало и конец отсчета

i,j,k, // Индексы

*b, *c; // Вспомогательные массивы

 

// Создаем вспомогательные массивы

b = new int[Kol];

c= new int[Kol];

// Начинаем отсчет времени

start = clock();

 

// Производим сортировку

for (i =1; i <= Kol ; i ++)

c[i]=0;

for (i=Kol; i>=2;i--)

for(j=i-1; j>=1; j--)

if (Mass[i]<Mass[j])

c[j]++;

else

c[ i ]++;

 

for (i =1; i <= Kol ; i ++)

b[c[i]] = Mass[i];

 

// Заканциваем отсчет времени

end = clock();

vremya = end - start;

 

// Записываем осортированный массив в файл

f = fopen("CountCompares.txt","w");

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

fprintf(f," %d",b[i]);

 

 

// Закрываем файл

fclose(f);

return vremya;

}

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

// Изображение гистограммы

void TForm1::DrawGis(int first,int second,int third)

{

int Max; // Максимальное время

float del, // Точек на деление

xo,yo, // Начало координат

w,h; // Ширина и высота столбца

char str[10]; // Время в милисекундах

Max = first;

if (second > Max)

Max = second;

if(third > Max)

Max = third;

 

del = (float)(Img_Gis->Height-40)/Max;

 

// Очищаем поле

DrawField();

 

// Устанавливаем начало координат

xo = 20;

yo = Img_Gis->Height - 20;

w = (Img_Gis->Width - 40)/3;

 

// Рисуем гистограммы

// Метод простого выбора

if (first!=0)

h = (int)first*del;

else

h=0;

Img_Gis->Canvas->Rectangle(xo,yo,xo+w,yo-h);

this->Img_Gis->Canvas->Brush->Color = clRed;

this->Img_Gis->Canvas->FloodFill(xo+w/2,yo-h/2,clBlack,fsBorder);

itoa(first,str,10);

this->Img_Gis->Canvas->Brush->Color = clWhite;

this->Img_Gis->Canvas->TextOut(xo+10,yo-h-15,str);

 

// Метод простых вставок

if (second!=0)

h = (int)second*del;

else

h=0;

Img_Gis->Canvas->Rectangle(xo+w,yo,xo+2*w,yo-h);

this->Img_Gis->Canvas->Brush->Color = clGreen;

this->Img_Gis->Canvas->FloodFill(xo+w+w/2,yo-h/2,clBlack,fsBorder);

itoa(second,str,10);

this->Img_Gis->Canvas->Brush->Color = clWhite;

this->Img_Gis->Canvas->TextOut(xo+w+10,yo-h-15,str);

 

// Метод подсчета сравнений

if (third!=0)

h = third*del;

else

h=0;

Img_Gis->Canvas->Rectangle(xo+2*w,yo,xo+3*w,yo-h);

this->Img_Gis->Canvas->Brush->Color = clBlue;

this->Img_Gis->Canvas->FloodFill(xo+2*w+w/2,yo-h/2,clBlack,fsBorder);

itoa(third,str,10);

this->Img_Gis->Canvas->Brush->Color = clWhite;

this->Img_Gis->Canvas->TextOut(xo+2*w+10,yo-h-15,str);

}





Читайте также:





Читайте также:
Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней...
Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация...
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...

©2015 megaobuchalka.ru Все права защищены авторами материалов.

Почему 3458 студентов выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.021 сек.)