Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Выбор, размещение и задание свойств компонентов.




 Коды классов, функций и обработчиков событий

1.Сохраните модуль формы под именем LR_3, а проект – под именем PR_LR_3.По окончании проектирования все визуальные и невизуальные компоненты, имеющиеся в приложении, будут отображены в Дереве Объектов, представленном на рис.3.1,2,3,4. Дерево Объектов показывает самые различные связи между компонентами, например: соотношение родительских и дочерних компонентов, связь компонентов через их свойства и т.п.

2.Расположение компонентов на форме, а также значения некоторых свойств, устанавливаемых в компонентах по умолчанию, показаны на рис.3.5,6,7. Использование новых компонентов сопровождается необходимыми пояснениями.

3.Следовательно, на форму нужно перенести:

· со страницы Стандарт - компонент MainMenu1 -главное меню, пять компонентов PopupMenu1,.,5контекстных всплывающих меню, три панели общего назначения GroupBox1,2,3(в свойство Captionвпишите соответственно параметры массивов, размеры, диапазон чисел), причем на панели GroupBox1нужно разместить панели  GroupBox2и GroupBox3, на панели  GroupBox2 –три метки Label1,2,3(мин, макс, шаг(d)), на панели  GroupBox3 –две метки Label4,5(мин, макс) и на форму - две метки Label6,7(размер выводимого массива,шаг(t) вывода в таблицы), ниже -  панель Panel1;

 Рис.3.1 – 1-я часть дерева объектов Рис.3.2 – 2-я часть дерева объектов

· со страницы Примеры – семь компонентов ввода целых чисел – CSpinEdit1,.,7, из них три компонента (CSpinEdit1,2,3) помещаются на панельGroupBox2, два (CSpinEdit4,5) – на панель GroupBox3, и еще два(CSpinEdit4,5) – непосредственно на форму;

· со страницы Дополнительно - управляющую кнопку с пиктограммой BitBtn1;

· со страницы Win32 - многостраничную панель – компонент PageControl1 и задать на ней семь страниц с надписями массивы,

 

Рис.3.3 – 3-я часть дерева объектов Рис.3.4 – 4-я часть дерева объектов

таблицы, графики(обменами), графики(выбором), графики(вставками), графики(пузырьком), графики(быстрая);

· на страницу массивы панели PageControl1со страницы Стандарт перенесите компонент Memo1;

· на страницу таблицы панели PageControl1со страницы Дополнительно перенесите два компонента StringGrid1,2а над ними расположите две метки Label8,9(со страницы Стандарт) с надписями сравнения, обмены, а на каждую из остальных пяти страниц панели PageControl1со страниц Additional и Дополнительно перенесите по компоненту Chart и Image; со страницы Win32 - компонент ProgressBar1.

4.Первым из новых компонентов является главное меню MainMenu– необходимый компонент интерфейса. Компонент MainMenuявляется невизуальным компонентом, т.е. место его размещения на форме в процессе проектирования не имеет значения для пользователя – во время выполнения он увидит не сам компонент, а только меню, сгенерированное компонентом. Главное меню для разрабатываемого приложения во время проектирования видно на форме (рис.3.5,6,7), а во время выполнения - представлено на рис.3.8. Основное свойство компонентаMainMenuItems. Его заполнение производится с помощью Конструктора Меню, вызываемого двойным щелчком на компоненте или нажатием кнопки с многоточием рядом со свойством Itemsв окне Инспектора Объектов. При работе в окне Конструктора Меню вводят новые разделы (подразделы) и помещают их в нужное место. При выборе нужного раздела (щелчком на нем) в Инспекторе Объектов появится множество свойств данного раздела. Свойство Caption обозначает надпись раздела (файл, сортировки и т. д.) или подраздела (открыть все графики,…, циклами). Свойство Name задает имя объекта, соответствующее разделу меню. Среда задает имена по умолчанию – N1, N2, N3 и т.д. Рекомендуется давать этим объектам осмысленные имена – здесь: file, sort, rec, rep, help, exit. Для каждого раздела (в нашем случае – для раздела сортировки) может быть установлено во время проектирования или программно во время выполнения свойство Enabled (доступен). Установите Enabled=false(недоступен), тогда раздел будет изображаться серой надписью и не будет реагировать на щелчок пользователя. Основное событие раздела – OnClick, возникающее при щелчке пользователя на разделе. В проектируемом приложении в обработчиках щелчков размещены алгоритмы, соответствующие названиям разделов (подразделов). Что же касается подраздела циклами, то здесь студент должен самостоятельно разработать алгоритмы сортировок с помощью циклов (кроме быстрой сортировки) и написать код с последующей отладкой и получением графически представляемых зависимостей.

5.Вторым новым компонентом является панель общего назначения GroupBox, которая имеет встроенную рамку с надписью (параметры массивов, размеры, диапазон чисел) и используется для выделения на форме группы функционально объединенных компонентов.

6.Третьим новым компонентом является управляющая кнопка BitBtn1 с пиктограммой. Изображение на этой кнопке задается свойством Glyph. Выделите кнопку BitBtn1. При нажатии кнопки с многоточием в строке свойства Glyph в Инспекторе Объектов вызывается окно Редактор картинки. Нажав в нем кнопку Загрузить, переходят в окно открытия файла рисунка Загрузить картинку и выбирают файл битовой матрицы .bmp, содержащей желаемое изображение. Большое количество изображений для кнопок расположено в папке …Program Files\Common Files\Borland Shared\Images\Buttons. Выбрав файл vcrplay, нажмите кнопку Открыть, а в окне Редактор картинки нажмите кнопку OK. Выбранное изображение появится на кнопке BitBtn1 левее надписи НАЧАТЬ (значение свойства Caption). В обработчике щелчка на кнопке НАЧАТЬ (BitBtn1Click - см. код файла реализации) выполняется ряд подготовительных операций для выполнения сортировок и представления результатов. Перечислим эти операции.

· Очистка окна редактирования Memo1, в которое выводятся исходные и отсортированные массивы задаваемого размера.

· Очистка расположенной выше кнопки панелиPanel1, в которую выводятся сообщения о некоторых исключительных ситуациях.

· Очистка таблицStringGrid1,2 и вывод в таблицу названий столбцов.

· Очистка графиковChart1,..,5.

· Установка начального значения позиции компонента ProgressBar1 – индикатора хода процесса сортировок.

 

Рис.3.5 – форма по окончании проектирования (вид 1)

 

Рис.3.6 – форма по окончании проектирования (вид 2)

 

· Считывание во вспомогательные переменные параметров сортируемых массивов, задаваемых как значения свойств компонентов CSpinEdit1,..,7.

· Объявление доступным раздела меню сортировки (sort).

6.Теперь остановимся на компоненте PageControl1 – многостраничной панели. Здесь она имеет 7 страниц: на первую – выводятся массивы, на вторую – таблицы, на остальные пять – графики, по способу сортировки. На каждой из пяти последних страниц размещены по одному компоненту Chart и Image, причем в первый компонент (Chart) график выводится в процессе сортировки, а во второй (Image)– из файла. Размеры компонентов – равные.

7.Для удобства работы с приложением предусмотрены два способа сохранения графиков в файле и вывода графиков из файла: всех сразу, через разделы главного меню открыть все графики, сохранить все графики, и отдельно, по способам сортировки, с помощью пяти компонентов PopupMenu – контекстных всплывающих меню. Они имеют по два раздела, например, сохранить графики (обменами), открыть графики (обменами). В свойство PopupMenuкомпонента Chart, которое по умолчанию пусто, заносится имя того компонента PopupMenu1,..,5,с которым он будет связан.

 

Рис.3.7 – форма по окончании проектирования (вид 3)

 

   

Рис.3.8 – главное меню

 

Тестирование и использование приложения

1.Запустите приложение на выполнение, нажав быстрые кнопки Сохранить все и Запуск.

2.Для  тестирования  приложения с параметрами массива, заданными по умолчанию (рис.3.5), щелкните на кнопке НАЧАТЬ, а затем – в главном меню на разделе сортировки и подразделе рекурсивными функциями. Проанализируйте полученные результаты, выведенные на страницы массивы, таблицы, графики многостраничной панели. Убедитесь в выполнении команд файл/сохранить все графики и файл/открыть все графики.

3.По коду обработчика щелчка на кнопке НАЧАТЬ установите исключительные ситуации, обрабатываемые приложением. Смоделируйте эти ситуации.

4.Убедитесь в действенности контекстных всплывающих меню.

5.Увеличивая размер исходного массива, получите сообщение о переполнении стека:  ……‘Stack overflow’…… . Для выхода из режима выполнения введите команду Запуск/Сброс программы. Затем увеличьте размер стека до максимально возможного последовательностью действий Проект/Опции/Компоновщик/Макс.размер_стека. После указания максимально возможного размера стека в поле Макс. размер стека можно будет сортировать всеми методами массивы размерами до 1000. Убедитесь в этом. Проанализируйте полученные результаты.

6.Разработайте алгоритмы сортировок с помощью циклов (кроме быстрой сортировки) и напишите код для подраздела циклами с последующей отладкой и получением графически представляемых зависимостей, увеличив не менее чем на порядок размер сортируемых массивов и диапазон значений элементов массивов. Объясните полученные результаты.

7.Для завершения работы щелкните на разделе меню выход и выйдите из среды Builder.

Заголовочный файл

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

 

#ifndef LR_3H

#define LR_3H

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

 

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include "CSPIN.h"

#include <ComCtrls.hpp>

#include <Menus.hpp>

#include <Buttons.hpp>

#include <ExtCtrls.hpp>

#include <Grids.hpp>

#include <Chart.hpp>

#include <TeEngine.hpp>

#include <TeeProcs.hpp>

#include <Series.hpp>

#include <Dialogs.hpp>

#include <ExtDlgs.hpp>

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

class TForm1 : public TForm

{

__published:   // IDE-managed Components

   TMainMenu *MainMenu1;

     TMenuItem *file;

   TMenuItem *N2;

   TMenuItem *N3;

   TMenuItem *sort;

   TMenuItem *rec;

   TMenuItem *rep;

   TMenuItem *help;

   TMenuItem *exit;

   TGroupBox *GroupBox1;

   TGroupBox *GroupBox2;

   TLabel *Label1;

   TLabel *Label2;

   TLabel *Label3;

   TPageControl *PageControl1;

   TTabSheet *TabSheet1;

   TTabSheet *TabSheet2;

   TCSpinEdit *CSpinEdit1;

   TCSpinEdit *CSpinEdit2;

   TCSpinEdit *CSpinEdit3;

   TCSpinEdit *CSpinEdit4;

   TCSpinEdit *CSpinEdit5;

   TLabel *Label4;

   TLabel *Label5;

   TLabel *Label6;

   TCSpinEdit *CSpinEdit6;

   TPanel *Panel1;

   TBitBtn *BitBtn1;

   TMemo *Memo1;

   TStringGrid *StringGrid1;

   TStringGrid *StringGrid2;

   TProgressBar *ProgressBar1;

   TCSpinEdit *CSpinEdit7;

   TTabSheet *TabSheet3;

   TTabSheet *TabSheet4;

   TTabSheet *TabSheet5;

   TTabSheet *TabSheet6;

   TTabSheet *TabSheet7;

   TChart *Chart5;

   TLineSeries *Series9;

   TLineSeries *Series10;

   TChart *Chart4;

   TLineSeries *Series7;

   TLineSeries *Series8;

   TChart *Chart3;

   TLineSeries *Series5;

   TLineSeries *Series6;

   TChart *Chart1;

   TLineSeries *Series1;

   TLineSeries *Series2;

   TChart *Chart2;

   TLineSeries *Series3;

   TLineSeries *Series4;

   TImage *Image1;

   TImage *Image2;

   TImage *Image3;

      TImage *Image4;

   TImage *Image5;

   TPopupMenu *PopupMenu1;

   TPopupMenu *PopupMenu2;

   TPopupMenu *PopupMenu3;

   TPopupMenu *PopupMenu4;

   TPopupMenu *PopupMenu5;

   TMenuItem *N1;

   TMenuItem *N4;

    TMenuItem *N5;

   TMenuItem *N6;

   TMenuItem *N7;

   TMenuItem *N8;

   TMenuItem *N9;

   TMenuItem *N10;

   TMenuItem *N11;

   TMenuItem *N12;

   TLabel *Label7;

   TLabel *Label8;

   TLabel *Label9;

   TGroupBox *GroupBox3;

   void __fastcall exitClick(TObject *Sender);

   void __fastcall BitBtn1Click(TObject *Sender);

   void __fastcall recClick(TObject *Sender);

   void __fastcall N2Click(TObject *Sender);

   void __fastcall N3Click(TObject *Sender);

   void __fastcall N1Click(TObject *Sender);

   void __fastcall N4Click(TObject *Sender);

   void __fastcall N5Click(TObject *Sender);

   void __fastcall N6Click(TObject *Sender);

   void __fastcall N7Click(TObject *Sender);

   void __fastcall N8Click(TObject *Sender);

   void __fastcall N9Click(TObject *Sender);

   void __fastcall N10Click(TObject *Sender);

   void __fastcall N11Click(TObject *Sender);

   void __fastcall N12Click(TObject *Sender);

   void __fastcall helpClick(TObject *Sender);

private:  // User declarations

public:            // User declarations

   __fastcall TForm1(TComponent* Owner);

};

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

 

extern PACKAGE TForm1 *Form1;

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

 

class array{

   public:

     array(int);              //конструктор 1 (с параметром)

     array(array&);           //конструктор 2 (копии)

     void swap(int&,int&); //обмен элементов в сортируемом массиве

     void SwapSort(int,int,int);    //сортировка обменами

     void SelectSort(int,int,int,int); //сортировка выбором

     void InsertSort(int,int,int,array&); //сортировка вставками

     void BubbleSort(int,int,int,int); //сортировка пузырьком

     void QuickSort(int,int,int);    //быстрая сортировка

     void out_mass_a()const; //вывод исходного и

                                             //отсортированного массивов

     int get_sr()const{return sr;} //получить сравнения

     int get_obm()const{return obm;}//получить обмены

     ~array(){delete[]a;}     //деструктор

   private:

       int*a, //указатель для исходного сортируемого массива

        sr, //сравнения

        obm, //обмены

        n; //размер исходного сортируемого массива

      };

#endif

 

 

Файл реализации

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

 

#include <vcl.h>

#pragma hdrstop

 

#include "LR_3.h"

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

#pragma package(smart_init)

#pragma link "CSPIN"

#pragma resource "*.dfm"

TForm1 *Form1;

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

__fastcall TForm1::TForm1(TComponent* Owner)

   : TForm(Owner)

{

}

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

int razm_min,razm_max,d,m,max_d,min_d,razm_out,t;

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

array::array(int p)

{n=p;

 a=new int[n];

 sr=0;

 obm=0;

 for(int i=0;i<n;i++) a[i]=random(max_d-min_d+1)+min_d;

}

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

array::array(array&c)

{n=c.n; sr=c.sr; obm=c.obm;

 a=new int[n];

 for(int i=0;i<n;i++)a[i]=c.a[i];

}

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

void array::swap(int&x,int&y)

{int z=x;x=y;y=z;}

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

void array::SwapSort(int i,int j,int k)

{ if(i==n-1) return;

if(j<n) {

   if(a[i]>a[j]) {swap(a[i],a[j]); obm++;}

   sr++; SwapSort(i,j+1,k);

      }

else SwapSort(i+1,i+2,k);

}

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

void array::SelectSort(int i,int j,int min,int k)

{ if(i==n-1) return;

if(j<n) {

       if(a[min]>a[j]) min=j;

       sr++; SelectSort(i,j+1,min,k);

       }

else {

       swap(a[i],a[min]); obm++;

       SelectSort(i+1,i+2,i+1,k);

      }

}

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

void array::InsertSort(int i,int j,int k,array&c)

{ if(i==n) return;

int z=c.a[i];

if(j>0&&z<a[j-1]) {

                 a[j]=a[j-1]; sr++;

                 InsertSort(i,j-1,k,c);

                 }

else {

       a[j]=z; sr++;

       InsertSort(i+1,i+1,k,c);

        }

}

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

void array::BubbleSort(int i,int j,int last,int k)

{ if(i<=0) return;

if(j<i) {

       if(a[j]>a[j+1]) {swap(a[j],a[j+1]); obm++; last=j;}

       sr++; BubbleSort(i,j+1,last,k);

      }

else BubbleSort(last,0,0,k);

}

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

void array::QuickSort(int l,int h,int k)

{ int su,sd,m,p;

if(h-l<=0) return;

else if(h-l==1) {

                   if(a[h]<a[l]) {swap(a[l],a[h]); obm++;}

                sr++;

                return;

               }

m=(l+h)/2; p=a[m]; swap(a[m],a[l]); obm++; su=l+1;sd=h;

do{

   while(su<=sd && a[su]<=p) {su++; sr++;}

   while(p<a[sd]) {sd--; sr++;}

   if(su<sd) {swap(a[su],a[sd]); obm++; }

} while(su<sd);

a[l]=a[sd]; a[sd]=p; obm++;

if(l<sd-1) QuickSort(l,sd-1,k);

if(sd+1<h) QuickSort(sd+1,h,k);

}

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

void __fastcall TForm1::exitClick(TObject *Sender)

{

Close();

}

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

void array::out_mass_a()const

{

AnsiString str="";

for(int i=0;i<n;i++)str+=" "+IntToStr(a[i]);

Form1->Memo1->Lines->Add(str);

}

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

void __fastcall TForm1::BitBtn1Click(TObject *Sender)

{

Memo1->Clear();

Panel1->Caption="";

for(int i=0;i<StringGrid1->RowCount;i++)

for(int j=0;j<StringGrid1->ColCount;j++)

   {StringGrid1->Cells[j][i]="";

    StringGrid2->Cells[j][i]="";}

StringGrid1->Cells[0][0]="размер";

StringGrid1->Cells[1][0]="обменами";

StringGrid1->Cells[2][0]="выбором";

StringGrid1->Cells[3][0]="вставками";

StringGrid1->Cells[4][0]="пузырьком";

StringGrid1->Cells[5][0]="быстрая";

StringGrid2->Cells[0][0]="размер";

StringGrid2->Cells[1][0]="обменами";

StringGrid2->Cells[2][0]="выбором";

StringGrid2->Cells[3][0]="вставками";

StringGrid2->Cells[4][0]="пузырьком";

StringGrid2->Cells[5][0]="быстрая";

Series1->Clear();

Series2->Clear();

Series3->Clear();

Series4->Clear();

Series5->Clear();

Series6->Clear();

Series7->Clear();

Series8->Clear();

Series9->Clear();

Series10->Clear();

ProgressBar1->Position=0;

if(CSpinEdit1->Value>CSpinEdit2->Value){Panel1->Caption=

"мин размер не м б больше макс!"; return;}

if(CSpinEdit5->Value>CSpinEdit4->Value){Panel1->Caption=

"мин число не м б больше макс!"; return;}

if(CSpinEdit7->Value%CSpinEdit3->Value){Panel1->Caption=

"t/d должно быть целым!"; return;}

razm_min=CSpinEdit1->Value;

razm_max=CSpinEdit2->Value;

d=CSpinEdit3->Value;

m=(razm_max-razm_min)/d+1;

max_d=CSpinEdit4->Value;

min_d=CSpinEdit5->Value;

razm_out=CSpinEdit6->Value;

t=CSpinEdit7->Value;

sort->Enabled=true;

}

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

void __fastcall TForm1::recClick(TObject *Sender)

{

StringGrid1->RowCount=(razm_max-razm_min)/t+2;

StringGrid2->RowCount=(razm_max-razm_min)/t+2;

int count=m,current=0;

for(int k=0;k<m;k++){

   array arr(razm_min+k*d);

   if(razm_min+k*d==razm_out)

      Form1->Memo1->Lines->Add("           Сортировка обменами");

   array arr_swap=arr;

   if(razm_min+k*d==razm_out){

           Form1->Memo1->Lines->Add("Исходный массив");

           arr_swap.out_mass_a();}

   arr_swap.SwapSort(0,1,k);

   Form1->Series1->AddXY(razm_min+k*d,arr_swap.get_sr(),"",clBlack);

   Form1->Series2->AddXY(razm_min+k*d,arr_swap.get_obm(),"",clBlack);

   if(razm_min+k*d==razm_out){

           Form1->Memo1->Lines->Add("Отсортированный массив");

           arr_swap.out_mass_a();}

   if(razm_min+k*d==razm_out)

           Form1->Memo1->Lines->Add("            Сортировка выбором");

   array arr_select=arr;

   if(razm_min+k*d==razm_out){

           Form1->Memo1->Lines->Add("Исходный массив");

           arr_select.out_mass_a();}

   arr_select.SelectSort(0,1,0,k);

   Form1->Series3->AddXY(razm_min+k*d,arr_select.get_sr(),"",clBlack);

   Form1->Series4->AddXY(razm_min+k*d,

                                                            arr_select.get_obm()*100,"",clBlack);

   if(razm_min+k*d==razm_out){

           Form1->Memo1->Lines->Add("Отсортированный массив");

           arr_select.out_mass_a();}

   if(razm_min+k*d==razm_out)

           Form1->Memo1->Lines->Add("           Сортировка вставками");

   array arr_insert=arr;

   if(razm_min+k*d==razm_out){

           Form1->Memo1->Lines->Add("Исходный массив");

           arr_insert.out_mass_a();}

   arr_insert.InsertSort(1,1,k,arr);

   Form1->Series5->AddXY(razm_min+k*d,arr_insert.get_sr(),"",clBlack);

   Form1->Series6->AddXY(razm_min+k*d,arr_insert.get_obm(),"",clBlack);

   if(razm_min+k*d==razm_out){

           Form1->Memo1->Lines->Add("Отсортированный массив");

           arr_insert.out_mass_a();}

   if(razm_min+k*d==razm_out)

           Form1->Memo1->Lines->Add("           Сортировка пузырьком");

   array arr_bubble=arr;

   if(razm_min+k*d==razm_out){

           Form1->Memo1->Lines->Add("Исходный массив");

           arr_bubble.out_mass_a();}

   arr_bubble.BubbleSort(razm_min+k*d-1,0,0,k);

   Form1->Series7->AddXY(razm_min+k*d,arr_bubble.get_sr(),"",clBlack);

   Form1->Series8->AddXY(razm_min+k*d,arr_bubble.get_obm(),"",clBlack);

   if(razm_min+k*d==razm_out){

           Form1->Memo1->Lines->Add("Отсортированный массив");

           arr_bubble.out_mass_a();}

   if(razm_min+k*d==razm_out)

           Form1->Memo1->Lines->Add("           Быстрая сортировка");

   array arr_quick=arr;

   if(razm_min+k*d==razm_out){

           Form1->Memo1->Lines->Add("Исходный массив");

           arr_quick.out_mass_a();}

   arr_quick.QuickSort(0,razm_min+k*d-1,k);

   Form1->Series9->AddXY(razm_min+k*d,arr_quick.get_sr(),"",clBlack);

   Form1->Series10->AddXY(razm_min+k*d,arr_quick.get_obm(),"",clBlack);

   if(razm_min+k*d==razm_out){

           Form1->Memo1->Lines->Add("Отсортированный массив");

           arr_quick.out_mass_a();}

   if(k*d%t==0){

         Form1->StringGrid1->Cells[0][k*d/t+1]=IntToStr(razm_min+k*d);

         Form1->StringGrid2->Cells[0][k*d/t+1]=IntToStr(razm_min+k*d);

         Form1->StringGrid1->Cells[1][k*d/t+1]=IntToStr(arr_swap.get_sr());

         Form1->StringGrid2->Cells[1][k*d/t+1]=IntToStr(arr_swap.get_obm());

         Form1->StringGrid1->Cells[2][k*d/t+1]=IntToStr(arr_select.get_sr());

         Form1->StringGrid2->Cells[2][k*d/t+1]=IntToStr(arr_select.get_obm());

         Form1->StringGrid1->Cells[3][k*d/t+1]=IntToStr(arr_insert.get_sr());

         Form1->StringGrid2->Cells[3][k*d/t+1]=IntToStr(arr_insert.get_obm());

         Form1->StringGrid1->Cells[4][k*d/t+1]=IntToStr(arr_bubble.get_sr());

         Form1->StringGrid2->Cells[4][k*d/t+1]=IntToStr(arr_bubble.get_obm());

         Form1->StringGrid1->Cells[5][k*d/t+1]=IntToStr(arr_quick.get_sr());

         Form1->StringGrid2->Cells[5][k*d/t+1]=IntToStr(arr_quick.get_obm());

               }

   current+=1;

   ProgressBar1->Position=100*current/count;

   }

sort->Enabled=false;

}

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

AnsiString fn1="swap.bmp",fn2="select.bmp",fn3="insert.bmp",

      fn4="bubble.bmp",fn5="quick.bmp";

void __fastcall TForm1::N2Click(TObject *Sender)

{

Form1->Image1->Picture->LoadFromFile(fn1);

Form1->Image2->Picture->LoadFromFile(fn2);

Form1->Image3->Picture->LoadFromFile(fn3);

Form1->Image4->Picture->LoadFromFile(fn4);

Form1->Image5->Picture->LoadFromFile(fn5);

}

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

void __fastcall TForm1::N3Click(TObject *Sender)

{

Form1->Chart1->SaveToBitmapFile(fn1);

Form1->Chart2->SaveToBitmapFile(fn2);

Form1->Chart3->SaveToBitmapFile(fn3);

Form1->Chart4->SaveToBitmapFile(fn4);

Form1->Chart5->SaveToBitmapFile(fn5);

MessageBox(NULL,"Все графики выведены в файлы!",

  "5 пар графиков!",MB_OK);

}

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

void __fastcall TForm1::N1Click(TObject *Sender)

{

Form1->Chart1->SaveToBitmapFile(fn1);

MessageBox(NULL,"Графики (обменами) выведены в файл!",

  "Сортировка обменами",MB_OK);

}

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

void __fastcall TForm1::N4Click(TObject *Sender)

{

Form1->Image1->Picture->LoadFromFile(fn1);

}

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

void __fastcall TForm1::N5Click(TObject *Sender)

{

Form1->Chart2->SaveToBitmapFile(fn2);

MessageBox(NULL,"Графики (выбором) выведены в файл!",

"Сортировка выбором",MB_OK);

}

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

void __fastcall TForm1::N6Click(TObject *Sender)

{

Form1->Image2->Picture->LoadFromFile(fn2);

}

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

void __fastcall TForm1::N7Click(TObject *Sender)

{

Form1->Chart3->SaveToBitmapFile(fn3);

MessageBox(NULL,"Графики (вставками) выведены в файл!",

"Сортировка вставками",MB_OK);

}

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

void __fastcall TForm1::N8Click(TObject *Sender)

{

Form1->Image3->Picture->LoadFromFile(fn3);

}

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

void __fastcall TForm1::N9Click(TObject *Sender)

{

Form1->Chart4->SaveToBitmapFile(fn4);

MessageBox(NULL,"Графики (пузырьком) выведены в файл!",

"Сортировка пузырьком",MB_OK);

}

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

void __fastcall TForm1::N10Click(TObject *Sender)

{

Form1->Image4->Picture->LoadFromFile(fn4);

}

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

void __fastcall TForm1::N11Click(TObject *Sender)

{

Form1->Chart5->SaveToBitmapFile(fn5);

MessageBox(NULL,"Графики (быстрая) выведены в файл!",

"Быстрая сортировка",MB_OK);

}

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

void __fastcall TForm1::N12Click(TObject *Sender)

{

Form1->Image5->Picture->LoadFromFile(fn5);

}

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

void __fastcall TForm1::helpClick(TObject *Sender)

{

MessageBox(NULL,"Разработаны в г. студентом гр. ","Рекурсивные функции для сортировки массивов",MB_OK);

}

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



Контрольные вопросы

1.Сравните алгоритмы сортировок рекурсивными функциями и циклами для способов: а) обменами, б) выбором, в) вставками, г) пузырьком.

2.Объясните алгоритм быстрой сортировки.

3.Как по дереву объектов разместить на форме компоненты?

4.Объясните содержание заголовочного файла.

5.Объясните содержание файла реализации.

6.Расскажите, как заполняется заголовочный файл.

7.Какими возможностями располагает пользователь в заголовочном файле?

8.Как создается обработчик события, например, щелчка на кнопке?

9.Объясните содержание класса array.

10.Расскажите о правилах доступа вне и внутри класса к элементам в открытой и закрытой частях класса.

11.Объясните назначение и выполнение конструктора с параметром.

12.В коде файла реализации укажите точки, где вызывается конструктор с параметром.

13.Сколько раз вызывается конструктор с параметром за время выполнения приложения?

14.Зачем нужен конструктор копии?  Как он выполняется?

15.В коде файла реализации укажите точки, где вызывается конструктор копии.

16.Сколько раз вызывается конструктор копии за время выполнения приложения?

17.Объясните назначение деструктора. Как он выполняется?

18.В коде файла реализации укажите точки, где вызывается деструктор.

19.Какими возможностями располагает пользователь в файле реализации?

20.Где и как задаются параметры сортируемого массива? Как осуществляется связь между датчиками параметров и функциями сортировок?

21.Объясните механизм переполнения стека.

22.Как оцениваются затраты машинного времени на сортировку массива?

23.Объясните ход зависимостей количества сравнений и обменов для сортировок: а) обменами, б) выбором, в) вставками, г) пузырьком, д) быстрая.

24.Расскажите порядок работы с компонентом главное меню MainMenu.

25.Где и как может использоваться управляющая кнопка с пиктограммой BitBtn? Приведите примеры.

26.Какие компоненты потребуются для того, чтобы имена файлов для графиков указывать не во время проектирования, а во время выполнения приложения? Какое событие для этого используется? Что содержит и как выполняется обработчик события?

27.Расскажите о способах вывода сообщений.

Задания

1. Для сортировки посредством выбора получить зависимость затрат машинного времени от длины массива. Получить также указанную зависимость для пересортировки упорядоченного массива.

2. Для сортировки методом пузырька получить зависимость затрат машинного времени от длины массива. Во избежание избыточного просмотра сохранять индекс последнего обмена. Получить также указанную зависимость для пересортировки упорядоченного массива.

3. Для сортировки обменами получить зависимость затрат машинного времени от длины массива. Получить также указанную зависимость для пересортировки упорядоченного массива.

4. Для сортировки вставками получить зависимость затрат машинного времени от длины массива. Получить также указанную зависимость для пересортировки упорядоченного массива.

5. Для “быстрой сортировки” получить зависимость затрат машинного времени от длины массива. Получить также указанную зависимость для пересортировки упорядоченного массива.

6. В массивах находить последовательности максимальной длины возрастающих по величине элементов, причем соседние элементы искомых последовательностей в общем случае не являются соседними элементами в исходных массивах. Получить зависимость усреднённых затрат машинного времени от длины массива.

7. В массивах нулевые элементы примыкать к первым нулевым. Получить зависимость усреднённых затрат машинного времени от длины массива.

8. Массивы сортировать следующим образом: в начале массива размещать положительные элементы, в середине - отрицательные и в конце массива - нулевые элементы. Получить зависимость усреднённых затрат машинного времени от длины массива.

9. Отрицательные элементы массива ставить через один с положительными и отрицательными. Получить зависимость усреднённых затрат машинного времени от длины массива.

10.По полученным зависимостям затрат машинного времени от длины массива сравнить эффективности сортировок обменами и вставками.

11.В массивах нулевые элементы ставить в конец, а затем положительные и отрицательные – чередовать. Получить зависимость усреднённых затрат машинного времени от длины массива.

12.В массивах нулевые элементы – удалять, а положительные – располагать по возрастанию методом пузырька. Во избежание избыточного просмотра сохранять индекс последнего обмена. Получить зависимость усреднённых затрат машинного времени от длины массива.

13.В массивах отрицательные элементы расставлять по убыванию, а положительные – по возрастанию, используя сортировку обменами. Получить зависимость усреднённых затрат машинного времени от длины массива.

14.В массивах отрицательные элементы расставлять по возрастанию, а положительные – по убыванию, используя сортировку вставками. Получить зависимость усреднённых затрат машинного времени от длины массива.

15.Используя сортировку выбором, расставлять положительные элементы массивов по убыванию. Получить зависимость усреднённых затрат машинного времени от длины массива.

16.Массивы равной длины, образующие пару, одинаково сортируются, а затем один вставляется в другой, не нарушая порядка расположения элементов. Получить зависимость затрат машинного времени от длины массива.

17.В массиве, не содержащем нулей, чередовать положительные и отрицательные элементы, начиная с первого элемента массива. Получить зависимость затрат машинного времени от длины массива.

18. По полученным зависимостям затрат машинного времени от длины массива сравнить эффективности сортировок – вставками и “быстрой”.

19.По полученным зависимостям затрат машинного времени от длины массива сравнить эффективности сортировок – выбором и пузырьком.

20.В паре массивов одинакового размера положительные элементы собрать в один массив, а отрицательные – в другой. Получить зависимость усреднённых затрат машинного времени от длины исходных массивов.

21.Массив, отсортированный по возрастанию, пересортировать по убыванию вставками и пузырьком. По полученным зависимостям затрат машинного времени от длины массива сравнить эффективности указанных сортировок.

22.Сравнить эффективности способов сортировки массивов – выбором и “быстрой” для пересортировки массивов - по полученным зависимостям затрат машинного времени от длины массива.

23.Сравнить эффективности способов сортировки массивов – вставками и пузырьком для пересортировки массивов - по полученным зависимостям затрат машинного времени от длины массива.

24.По полученным зависимостям усреднённых затрат машинного времени от длины массива сравнить эффективности двух способов сортировки массива по возрастанию: в первом – сортировка обменами применяется сразу, а во втором - после того, как отрицательные элементы будут поставлены в начало массива, нулевые – в середину, а положительные – в конец массива.

25.В массиве положительные элементы примкнуть к первому положительному и отсортировать по возрастанию. Получить зависимость усреднённых затрат машинного времени от длины массива.

26.Массив, отсортированный по возрастанию, пересортировать по убыванию обменами и выбором. По полученным зависимостям затрат машинного времени от длины массива сравнить эффективности указанных сортировок.

27.Сравнить эффективности способов сортировки массивов – вставками и “быстрой” для пересортировки массивов - по полученным зависимостям затрат машинного времени от длины массива. 

28.В массиве отрицательные элементы поставить в начало массива, а положительные – в конец. Затем отсортировать массив по возрастанию, применив способ “быстрой сортировки”. Тот же исходный массив обработать сразу “быстрой сортировкой”. Сравнить эффективности обоих способов обработки массива по полученным зависимостям затрат машинного времени от длины массива.

29.В массиве чередовать положительные и отрицательные элементы, начиная с последнего элемента массива. Получить зависимость затрат машинного времени от длины массива.

30.В массивах находить последовательности максимальной длины возрастающих по величине отрицательных элементов, причем соседние элементы искомых последовательностей в общем случае не являются соседними элементами в исходных массивах. Получить зависимость усреднённых затрат машинного времени от длины массива.

 



ЛАБОРАТОРНАЯ  РАБОТА  4

СПОСОБЫ ШИФРОВАНИЯ И ДЕШИФРОВАНИЯ ТЕКСТА

 

Введение

    Криптография – наука о методах обеспечения  конфиденциальности (невозможности прочтения информации посторонним) и аутентичности (целостности и подлинности авторства, а также невозможности отказа от авторства) информации.

    История криптографии по существу равна по возрасту истории существования письменности, потому что именно с появлением письменности возникла потребность придумывать различные способы для хранения информации в виде, доступном только для определенного круга лиц. До нашей эры был придуман «Шифр Цезаря», который заключался в замене каждого символа в тексте на символ, отстоящий от него в алфавите на фиксированное число позиций. Криптоаналитики искали способы расшифровывать закодированные сообщения. Криптографы (шифровальщики) и криптоаналитики (дешифровальщики) находились в постоянном противоборстве: первые постоянно придумывали новые шифры, с первого взгляда недоступные для криптоаналитиков, а вторые находили способы дешифрования скрытых сообщений.

    Современная криптография образует отдельное научное направление на стыке математики и информатики. Практическое применение криптографии стало неотъемлемой частью жизни современного общества – её используют в таких отраслях, как электронная коммерция, электронный документооборот (включая цифровые подписи), телекоммуникации и других.

    Существует огромное количество различных способов шифрования данных. Целью данной лабораторной работы является изучение программного продукта, реализующего способы шифрования и дешифрования текста по треугольнику Паскаля, методом Гронсфельда и по матрице, и сохраняющего результаты шифрования (количество зашифрованных символов и их последовательность), а также информацию о способе шифрования в бинарном файле.










Последнее изменение этой страницы: 2018-05-29; просмотров: 183.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...