Руководство пользователя
Внешний вид программы представлен на Рис. Ошибка! Текст указанного стиля в документе отсутствует..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-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (1074)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |