Практикум прикладного программирования на MFC и C++ в среде VS.NET

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

Разбить на страницы
Показывать лекцию целиком

Реализация в 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

Файл реализации методов сортировки - Metods.cpp

Файл реализации методов сортировки Metods.cpp
//---------------------------------------------------------------------------
	
#include <vcl.h>
#pragma hdrstop
	
#include "Metods.h"
	
#pragma package(smart_init)
	
//---------------------------------------------------------------------------
// Сортировка простыми включениями
void simplySort(int n, int a[])
{
  int i, j, x;
  for(i=1; i<n; i++){
    x = a[i]; j = i-1;
    while(x<a[j] amp;amp; j>=0){
      a[j+1] = a[j];
      j--; 
    }
    a[j+1] = x;
  }
}
//---------------------------------------------------------------------------
	
	
	
// Сортровка бинарными включениями
void binSort(int n, int *a)
{
  int i, j, left, right, m; // индексы элементов
  int x; // опорный элемент
  for(i = 1; i < n; i++){
    x = a[i];
    left = 0;
    right = i - 1;
    while(left <= right){
      m = (left + right) / 2;
      if(x < a[m])
        right = m - 1;
      else
        left = m + 1;
    } // конец while(left <= right)
    for(j = i - 1; j >= left; j--)
      a[j + 1] = a[j];
    a[left] = x;
  } // конец for(i = 1; i < n; i++)
}
//---------------------------------------------------------------------------
	
	
	
// Сортировка Шелла
void shellSort(int n, int a[])
{
  int i, j, k, m, t;
  int x;
  static int h[4] = {15, 7, 3, 1};
  t = 4;
  for(m = 0; m < t; m++){
    if(h[m] >= n) continue;
    k = h[m];
    for(i = k; i < n; i++){
      x = a[i];
      j = i - k;
      while(x < a[j] amp;amp; j >= 0){
        a[j + k] = a[j];
        j -= k;
      }
      a[j + k] = x;
    }
  }
}
//---------------------------------------------------------------------------
	
	
	
// Сортировка простым выбором
void selectSort(int n, int a[])
{
  int i, j, k;
  int x; // опорный элемент
  for(i = 0; i < n - 1; i++){
     k = i;
     x = a[i];
     for(j = i + 1; j < n; j++)
       if(a[j] < x){
          k = j;
          x = a[j];
       }
     a[k] = a[i];
     a[i] = x;
  } // End of for i
}
//---------------------------------------------------------------------------
	
	
	
// Сортировка методом пузырька
void bubbleSort(int n, int a[])
{
 int i, j;
 int x;
 for(i = 1; i < n; i++){
   for(j = n - 1; j >= i; j--){
     if(a[j-1] > a[j]){
       x = a[j-1];
       a[j-1] = a[j];
       a[j] = x;
     }
   }
 }
}
//---------------------------------------------------------------------------
	
	
	
// Сортировка с памятью обмена
void memorySort(int n, int a[])
{
 int i, j, k, m;
 int x;
 k = 0;
 for(i=1; i<n; i++){
   m=k;
   for(j=n-1; j>m; j--)
     if(a[j-1]>a[j]){
       x=a[j-1];
       a[j-1]=a[j];
       a[j]=x;
       k=j;
     }
   if(m==k)
     break;
 }
}
//---------------------------------------------------------------------------
	
	
	
// Шейкер-сортировка (двухпроходная сортировка)
void shakerSort(int n, int a[])
{
 int j, k, left, right;
 int x;
 left=0;
 right=n-1;
 k=n-1;
 while(left<right){
   for(j=right; j>left; j--)
     if(a[j-1]>a[j]){
       x=a[j-1];
       a[j-1]=a[j];
       a[j]=x;
       k=j;
     }
   left=k;
   for(j=left; j<=right; j++)
     if(a[j-1]>a[j]){
        x=a[j-1];
        a[j-1]=a[j];
        a[j]=x;
        k=j;
     }
   right=k-1;
 }
}
//---------------------------------------------------------------------------
	
	
	
// Сортировка Хоора (сортировка с разделением;
// "быстрая" сортировка
void quickSort(int n, int a[])
{
 void sort(int leftIndex, int rightIndex, int sortArray[]);
 sort(0, n-1, a);
}
// Рекурсивная подпрограмма быстрой сортировки
void sort(int left, int right, int a[])
{
 register i, j, x;
 int w;
 i=left; j=right; x=a[(left+right)/2];
 while(i<=j){
   while(a[i]<x) i++;
   while(a[j]>x) j--;
   if(i<=j){
     w=a[i]; a[i]=a[j]; a[j]=w;
     i++; j--;
   }
 }
 if(left<j) sort(left, j, a);
 if(i<right) sort(i, right, a);
}
//---------------------------------------------------------------------------

Заголовочный файл UAbout.h

Заголовочный файл UAbout.h
//---------------------------------------------------------------------------

#ifndef UAboutH
#define UAboutH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <Graphics.hpp>
//---------------------------------------------------------------------------
class TAboutBox : public TForm
{
__published:	// IDE-managed Components
        TImage *Image;
        TLabel *Label1;
        TLabel *Label2;
        TLabel *Label3;
        TLabel *Label4;
        TLabel *Label5;
private:	// User declarations
public:		// User declarations
        __fastcall TAboutBox(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TAboutBox *AboutBox;
//---------------------------------------------------------------------------
#endif

Файл реализации UAbout.cpp

Файл реализации UAbout.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "UAbout.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TAboutBox *AboutBox;
//---------------------------------------------------------------------------
__fastcall TAboutBox::TAboutBox(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

Главное окно

Окно 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

Файл реализации методов сортировки - Metods.cpp

Файл реализации методов сортировки Metods.cpp
//---------------------------------------------------------------------------
	
#include <vcl.h>
#pragma hdrstop
	
#include "Metods.h"
	
#pragma package(smart_init)
	
//---------------------------------------------------------------------------
// Сортировка простыми включениями
void simplySort(int n, int a[])
{
  int i, j, x;
  for(i=1; i<n; i++){
    x = a[i]; j = i-1;
    while(x<a[j] amp;amp; j>=0){
      a[j+1] = a[j];
      j--; 
    }
    a[j+1] = x;
  }
}
//---------------------------------------------------------------------------
	
	
	
// Сортровка бинарными включениями
void binSort(int n, int *a)
{
  int i, j, left, right, m; // индексы элементов
  int x; // опорный элемент
  for(i = 1; i < n; i++){
    x = a[i];
    left = 0;
    right = i - 1;
    while(left <= right){
      m = (left + right) / 2;
      if(x < a[m])
        right = m - 1;
      else
        left = m + 1;
    } // конец while(left <= right)
    for(j = i - 1; j >= left; j--)
      a[j + 1] = a[j];
    a[left] = x;
  } // конец for(i = 1; i < n; i++)
}
//---------------------------------------------------------------------------
	
	
	
// Сортировка Шелла
void shellSort(int n, int a[])
{
  int i, j, k, m, t;
  int x;
  static int h[4] = {15, 7, 3, 1};
  t = 4;
  for(m = 0; m < t; m++){
    if(h[m] >= n) continue;
    k = h[m];
    for(i = k; i < n; i++){
      x = a[i];
      j = i - k;
      while(x < a[j] amp;amp; j >= 0){
        a[j + k] = a[j];
        j -= k;
      }
      a[j + k] = x;
    }
  }
}
//---------------------------------------------------------------------------
	
	
	
// Сортировка простым выбором
void selectSort(int n, int a[])
{
  int i, j, k;
  int x; // опорный элемент
  for(i = 0; i < n - 1; i++){
     k = i;
     x = a[i];
     for(j = i + 1; j < n; j++)
       if(a[j] < x){
          k = j;
          x = a[j];
       }
     a[k] = a[i];
     a[i] = x;
  } // End of for i
}
//---------------------------------------------------------------------------
	
	
	
// Сортировка методом пузырька
void bubbleSort(int n, int a[])
{
 int i, j;
 int x;
 for(i = 1; i < n; i++){
   for(j = n - 1; j >= i; j--){
     if(a[j-1] > a[j]){
       x = a[j-1];
       a[j-1] = a[j];
       a[j] = x;
     }
   }
 }
}
//---------------------------------------------------------------------------
	
	
	
// Сортировка с памятью обмена
void memorySort(int n, int a[])
{
 int i, j, k, m;
 int x;
 k = 0;
 for(i=1; i<n; i++){
   m=k;
   for(j=n-1; j>m; j--)
     if(a[j-1]>a[j]){
       x=a[j-1];
       a[j-1]=a[j];
       a[j]=x;
       k=j;
     }
   if(m==k)
     break;
 }
}
//---------------------------------------------------------------------------
	
	
	
// Шейкер-сортировка (двухпроходная сортировка)
void shakerSort(int n, int a[])
{
 int j, k, left, right;
 int x;
 left=0;
 right=n-1;
 k=n-1;
 while(left<right){
   for(j=right; j>left; j--)
     if(a[j-1]>a[j]){
       x=a[j-1];
       a[j-1]=a[j];
       a[j]=x;
       k=j;
     }
   left=k;
   for(j=left; j<=right; j++)
     if(a[j-1]>a[j]){
        x=a[j-1];
        a[j-1]=a[j];
        a[j]=x;
        k=j;
     }
   right=k-1;
 }
}
//---------------------------------------------------------------------------
	
	
	
// Сортировка Хоора (сортировка с разделением;
// "быстрая" сортировка
void quickSort(int n, int a[])
{
 void sort(int leftIndex, int rightIndex, int sortArray[]);
 sort(0, n-1, a);
}
// Рекурсивная подпрограмма быстрой сортировки
void sort(int left, int right, int a[])
{
 register i, j, x;
 int w;
 i=left; j=right; x=a[(left+right)/2];
 while(i<=j){
   while(a[i]<x) i++;
   while(a[j]>x) j--;
   if(i<=j){
     w=a[i]; a[i]=a[j]; a[j]=w;
     i++; j--;
   }
 }
 if(left<j) sort(left, j, a);
 if(i<right) sort(i, right, a);
}
//---------------------------------------------------------------------------

Заголовочный файл UAbout.h

Заголовочный файл UAbout.h
//---------------------------------------------------------------------------

#ifndef UAboutH
#define UAboutH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <Graphics.hpp>
//---------------------------------------------------------------------------
class TAboutBox : public TForm
{
__published:	// IDE-managed Components
        TImage *Image;
        TLabel *Label1;
        TLabel *Label2;
        TLabel *Label3;
        TLabel *Label4;
        TLabel *Label5;
private:	// User declarations
public:		// User declarations
        __fastcall TAboutBox(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TAboutBox *AboutBox;
//---------------------------------------------------------------------------
#endif

Файл реализации UAbout.cpp

Файл реализации UAbout.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "UAbout.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TAboutBox *AboutBox;
//---------------------------------------------------------------------------
__fastcall TAboutBox::TAboutBox(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

Главное окно

Окно About

Вернуться к учебному плану