русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2014-09-29; просмотров: 1093; Нарушение авторских прав


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

 

#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



<== предыдущая лекция | следующая лекция ==>
СОРТИРОВКИ ЧИСЛОВЫХ МАССИВОВ. РЕКУРСИВНЫЕ ФУНКЦИИ | СПОСОБЫ ШИФРОВАНИЯ И ДЕШИФРОВАНИЯ ТЕКСТА


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.843 сек.