Опубликован: 17.08.2010 | Доступ: свободный | Студентов: 999 / 59 | Оценка: 4.11 / 3.89 | Длительность: 29:38:00
Самостоятельная работа 12:

Методы сортировки

Аннотация: Реализация в IDE C++Builder 6. Файл точки входа приложения Sort.cpp. Файл объявления интерфейса пользователя - USort.h. Файл реализации интерфейса пользователя - USort.cpp. Файл объявления методов сортировки - Metods.h. Файл реализации методов сортировки - Metods.cpp. Заголовочный файл UAbout.h. Файл реализации UAbout.cpp. Главное окно. Окно About.

Реализация в IDE C++Builder 6

Файлы к данной лабораторной работе, Вы можете скачать здесь.

Целью лабораторной работы является изучение и практическая реализация наиболее популярных методов сортировки

В задание на выполнение входит самостоятельное построение демонстрационного приложения для моделирования работы методов сортировки в IDE C++Builder 6.0.

Файл точки входа приложения Sort.cpp

Файл точки входа Sort.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
USEFORM("USort.cpp", MainForm);
USEFORM("UAbout.cpp", AboutBox);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
        try
        {
                 Application->Initialize();
                 Application->CreateForm(__classid(TMainForm), &amp;MainForm);
                 Application->CreateForm(__classid(TAboutBox), &amp;AboutBox);
                 Application->Run();
        }
        catch (Exception &amp;exception)
        {
                 Application->ShowException(&amp;exception);
        }
        return 0;
}
//---------------------------------------------------------------------------

Файл объявления интерфейса пользователя - USort.h

Файл объявления главной формы USort.h
//---------------------------------------------------------------------------

#ifndef USortH
#define USortH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <Menus.hpp>
//---------------------------------------------------------------------------
const MAX_COUNT = 10;
//---------------------------------------------------------------------------
class TMainForm : public TForm
{
__published:	// IDE-managed Components
        TMemo *Memo1;
        TButton *SortBtn;
        TRadioGroup *RadioGroup;
        TMemo *Memo2;
        TButton *CleanLeftBtn;
        TButton *CleanRightBtn;
        TLabel *TitleNonSortLbl;
        TLabel *TitleSortLbl;
        TButton *ExitBtn;
        TPopupMenu *PopupMenu;
        TMenuItem *About;
        void __fastcall Memo1KeyPress(TObject *Sender, char &amp;Key);
        void __fastcall Memo1Change(TObject *Sender);
        void __fastcall ExitBtnClick(TObject *Sender);
        void __fastcall CleanLeftBtnClick(TObject *Sender);
        void __fastcall CleanRightBtnClick(TObject *Sender);
        void __fastcall SortBtnClick(TObject *Sender);
        void __fastcall AboutClick(TObject *Sender);
private:	// User declarations
public:		// User declarations
        __fastcall TMainForm(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TMainForm *MainForm;
//---------------------------------------------------------------------------
#endif

Файл реализации интерфейса пользователя - USort.cpp

Файл реализации интерфейса пользователя USort.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
	
#include "USort.h"
#include "Metods.h"
#include "UAbout.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TMainForm *MainForm;
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
        : TForm(Owner)
{
 for(int i=MAX_COUNT; i>=0; i--){
   AnsiString symbol = IntToStr(i);
   Memo1->Lines->Add("");
   Memo1->Lines->Strings[MAX_COUNT-i] = symbol;
//   Memo->Lines->Insert(i, symbol);
 }
}
//---------------------------------------------------------------------------
	
void __fastcall TMainForm::Memo1KeyPress(TObject *Sender, char &amp;Key)
{
 Set<char, '0', '9'> Digit;// Фильтр для цифр
 Digit << '0' << '1' << '2' << '3' << '4'
       << '5' << '6' << '7' << '8' << '9';
 if( !Digit.Contains( Key )
     &amp;&amp; Key != VK_BACK
     &amp;&amp; Key != VK_RETURN ) {
   Key = 0;
   Beep();
 }
}
//---------------------------------------------------------------------------
	
void __fastcall TMainForm::Memo1Change(TObject *Sender)
{
 if(Memo1->Lines->Strings[Memo1->Lines->Count-1].IsEmpty())
   Memo1->Lines->Delete(Memo1->Lines->Count-1);
}
//---------------------------------------------------------------------------
	
void __fastcall TMainForm::ExitBtnClick(TObject *Sender)
{
 Close();        
}
//---------------------------------------------------------------------------
	
void __fastcall TMainForm::CleanLeftBtnClick(TObject *Sender)
{
 Memo1->Clear();        
}
//---------------------------------------------------------------------------
	
void __fastcall TMainForm::CleanRightBtnClick(TObject *Sender)
{
 Memo2->Clear();        
}
//---------------------------------------------------------------------------
	
void __fastcall TMainForm::SortBtnClick(TObject *Sender)
{
 enum{SIMPLE, BIN, SHELL, SELECT,
      BUBBLE, MEMORY, SHAKER, QUICK};
 const n = Memo1->Lines->Count;
 if(n < 2){
   ShowMessage("Нечего сортировать");
   return;
 }
 int *a = new int[n];
 for(int i = 0; i<n; i++)
   a[i] = StrToInt(Memo1->Lines->Strings[i]);
 int choice = RadioGroup->ItemIndex;
 switch(choice){
   case SIMPLE: simplySort(n, a); break;
   case BIN: binSort(n, a); break;
   case SHELL: shellSort(n, a); break;
   case SELECT: selectSort(n, a); break;
   case BUBBLE: bubbleSort(n, a); break;
   case MEMORY: memorySort(n, a); break;
   case SHAKER: shakerSort(n, a); break;
   case QUICK: quickSort(n, a); break;
   default: ShowMessage("Неизвестный метод сортировки");
     return;
 }
 Memo2->Clear();
 for(int i = 0; i<n; i++)
   Memo2->Lines->Insert(i, IntToStr(a[i]));
	
 delete [] a;
}
//---------------------------------------------------------------------------
	
void __fastcall TMainForm::AboutClick(TObject *Sender)
{
 AboutBox->ShowModal();
}
//---------------------------------------------------------------------------

Файл объявления методов сортировки - Metods.h

Файл объявления методов сортировки Metods.h
//---------------------------------------------------------------------------
	
#ifndef MetodsH
#define MetodsH
//---------------------------------------------------------------------------
void simplySort(int, int []);
void binSort(int m, int b[]);
void shellSort(int n, int a[]);
void selectSort(int, int *);
void bubbleSort(int n, int a[]);
void memorySort(int n, int a[]);
void shakerSort(int n, int a[]);
void quickSort(int n, int a[]);
#endif
Александр Даниленко
Александр Даниленко
Стоит Windows 8 Pro, Visual Studio 2010 Express Edition .