Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
runer74
0 / 0 / 0
Регистрация: 23.07.2013
Сообщений: 13
#1

Из delphi в С++: создать приложение, визуально демонстрирующее работу разных алгоритмов сортировки - C++

23.07.2013, 12:21. Просмотров 613. Ответов 7
Метки нет (Все метки)

Задача:
Кликните здесь для просмотра всего текста
Методические рекомендации по лабораторной работе №2

Процессы. Потоки.

Часть 1.

Задача: создать многопотоковое приложение, в котором можно менять приоритеты потоков. Программа DreadedSorts создает два потока. Один поток запускает пузырьковую сортировку (bubble sort), другой – быструю сортировку (quick sort). С помощью соответствующих ползунков на главной форме можно изменять приоритеты потоков, чтобы они получали разнойе количество тактовой частоты. При этом, можно так настроить приоритеты, чтобы более медленная сортировка выполнялась даже быстрее.

Ход работы.

1. Запустить Delphi. Открыть новое приложение командой File|New Application.

2. Сохраните проект, дав модулю имя main.pas, проекту – DreadedSorts.dpr.

3. Перенести на пустую форму, кнопку BitBtn со страницы Additional палитры компонентов, два компонент Label со страницы Standard, 2 компонента TrackBar со страницы Win32. Свойства Name компонентов TrackBar установите соответственно как BubbleTrackBar и QuickTrackBar.

Установите свойства компонентов формы:

Delphi
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
object Form1: TForm1
 
Caption = 'Пример многопоточного приложения'
 
object Label1: TLabel
 
Left = 40
 
Top = 8
 
Width = 129
 
Height = 33
 
Alignment = taCenter
 
Caption = 'Приоритет пузырьковой сортировки'
 
WordWrap = True
 
end
 
object Label2: TLabel
 
Left = 232
 
Top = 8
 
Width = 129
 
Height = 39
 
Alignment = taCenter
 
Caption = 'Приоритет быстрой сортировки'
 
WordWrap = True
 
end
 
object BitBtn1: TBitBtn
 
Left = 136
 
Top = 88
 
Width = 153
 
Height = 25
 
Caption = 'Запустить сортировку'
 
end
 
object BubbleTrackBar: TTrackBar
 
Left = 32
 
Top = 40
 
Width = 150
 
Height = 45
 
Max = 2
 
Min = -2
 
end
 
object QuickTrackBar: TTrackBar
 
Left = 224
 
Top = 40
 
Width = 150
 
Height = 45
 
Max = 2
 
Min = -2
 
end
 
end
4. Форма должна приобрести вид указанный на рис. 1.

Рис.1.

5. Теперь добавьте в проект две пустых формы, сохраните модули этих форм соответственно secform и thform.

6. Вернитесь к главной форме приложения и создайте обработчик события OnCreate:

Delphi
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
procedure TForm1.FormCreate(Sender: TObject);
 
begin
 
// получить размер рабочего стола
 
ScreenWidth := GetSystemMetrics (SM_CXSCREEN);
 
ScreenHeight:= GetSystemMetrics (SM_CYSCREEN);
 
// переместить основную форму сверху центральной части рабочего стола
 
form1.top := 0;
 
form1.left := (ScreenWidth-form1.width) div 2;
 
// определить, сколько элементов можно отобразить в двух окнах
 
SortWindowSize := (ScreenHeight - form1.height) div 2;
 
if SortWindowSize > (ScreenWidth div 2) then
 
SortWindowSize := ScreenWidth div 2;
 
end;
7. Создайте обработчик события OnClick кнопки BitBtn1 главной формы:

Delphi
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
// обработчик события щелчка мыши на кнопке - создает формы сортировки,
 
// генерирует данные сортировки и запускает потоки
 
procedure TForm1.BitBtn1Click(Sender: TObject);
 
var
 
i: integer;
 
ThreadID: dWord;
 
begin
 
// помещает форму пузырьковой сортировки на рабочий стол
 
form2.free;
 
form2 := TForm2.Create (self);
 
form2.top := form1.top + form1.Height+formgap;
 
form2.left := (ScreenWidth-(SortWindowSize*2)) div 2;
 
// помещает окно пузырьковой сортировки в левой половине экрана
 
form2.width := SortWindowSize;
 
form2.height := SortWindowSize;
 
form2.color := formcolor;
 
form2.caption := 'Bubble Sort';
 
form2.show;
 
// помещает форму быстрой сортировки на рабочем столе
 
form3.free;
 
form3 := TForm3.Create (self);
 
form3.top := form1.top + form1.Height+formgap;
 
form3.left := form2.left + form2.width;
 
// помещает окно пузырьковой сортировки в левой половине экрана
 
form3.width := SortWindowSize;
 
form3.height := SortWindowSize;
 
form3.color := formcolor;
 
form3.caption := 'Quick Sort';
 
form3.show;
 
// присваивает число элементов сортировки равным форме
 
NumItems := form2.ClientHeight - pixeloffset*2;
 
//выделение динамических массивов для хранения данных сортировки
 
SetLength (a, NumItems);
 
SetLength (b, NumItems);
 
// генерирование случайных чисел для сортировки
 
Randomize;
 
for i:=0 to NumItems-1 do
 
begin
 
a[i] := random (NumItems);
 
b[i] := a[i];
 
form2.canvas.pixels[a[i]+pixeloffset,i+pixeloffset] := pixelcolor;
 
form3.canvas.pixels[b[i]+pixeloffset,i+pixeloffset] := pixelcolor;
 
end;
 
// запуск потока пузырьковой сортировки
 
T1:= CreateThread (nil, 0, @BubbleThread, nil, 0, threadID);
 
// установка потока быстрой сортировки для отслеживания позитивного значения
 
setThreadPriority (T1, BubbleTrackBar.Position);
 
// запуск потока быстрой сортировки
 
T2:= CreateThread (nil, 0, @QuickThread, nil, 0, threadID);
 
// установка потока быстрой сортировки для отслеживания позитивного значения
 
setThreadPriority (T2, QuickTrackBar.Position);
 
// замечание: для просмотра рекурсивной быстрой сортировки в действии
 
// установите приоритет потока к значению -1 или -2. Для того,
 
// чтобы посмотреть может ли пузырьковая сортировка подавлять
 
// быструю сортировку, установите приоритет потока пузырьковой сортировки
 
// к значению +2, а быстрой сортировки к значению -2.
 
end;
8. Добавьте в раздел interface модуля main нижеследующий код:

8.1. описание констант

Delphi
1
2
3
4
5
6
7
8
9
10
11
const
 
pixeloffset = 5; // смещение пикселов обеспечивает рамку внутри окон
 
formgap = 10; // количество пиксельных промежутков между основной формой
 
// и окнами сортировки
 
formcolor = clBlack; // цвет фона для формы сортировки окон
 
pixelcolor = clWhite; // цвет пикселов для элементов данных сортировки
8.2. в описание типа TForm1 код, выделеный жирным шрифтом.

Delphi
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
31
32
33
34
35
36
37
type
 
TForm1 = class(TForm)
 
Label1: TLabel;
 
Label2: TLabel;
 
BitBtn1: TBitBtn;
 
BubbleTrackBar: TTrackBar;
 
QuickTrackBar: TTrackBar;
 
procedure BitBtn1Click(Sender: TObject);
 
procedure FormCreate(Sender: TObject);
 
private
 
{ Private declarations }
 
T1, T2: THandle;
 
ScreenWidth, ScreenHeight,
 
SortWindowSize : Word;
 
NumItems: Word;
 
a, b: array of integer;
 
public
 
{ Public declarations }
 
end;
9. Добавьте в раздел implementation модуля main нижеследующий код:

9.1. ссылки на модули других форм приложения

Delphi
1
2
3
uses
 
secform, thform;
9.2. процедуру пузырьковой сортировки

Delphi
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// процедура пузырьковой сортировки - вызывается процедурой BubbleThread
 
procedure BubbleSort (var ia: array of integer; items: integer);
 
var
 
i, j, t: integer;
 
DC: HDC;
 
begin
 
DC := GetDC (Form2.Handle);
 
for i:= items downto 0 do
 
begin
 
for j:=0 to items -1 do
 
if ia[j] < ia[j+1] then
 
begin
 
t:= ia[j];
 
//
 
SetPixel (DC, ia[j+1]+pixeloffset, j+1+pixeloffset, formcolor);
 
SetPixel (DC, ia[j]+pixeloffset, j+pixeloffset, formcolor);
 
ia[j] := ia[j+1];
 
ia[j+1] := t;
 
SetPixel (DC, ia[j+1]+pixeloffset, j+1+pixeloffset, pixelcolor);
 
SetPixel (DC, ia[j]+pixeloffset, j+pixeloffset, pixelcolor);
 
end;
 
end;
 
ReleaseDC (Form2.Handle, DC);
 
end;
9.3. процедуру быстрой сортировки

Delphi
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// процедура быстрой сортировки - вызывается процедурой QuickThread
 
procedure QuickSort (var ia: array of integer; iLo, iHi: integer);
 
var
 
Lo, Hi, Mid, T: integer;
 
DC: HDC;
 
begin
 
Lo := iLo;
 
Hi := iHi;
 
mid := ia[(Lo+Hi) div 2];
 
DC := GetDC (Form3.Handle);
 
repeat
 
while ia[Lo] < mid do Inc(Lo);
 
while ia[Hi] > mid do Dec(Hi);
 
if Lo <= Hi then
 
begin
 
T:= ia[Lo];
 
//
 
SetPixel (DC, ia[Lo]+pixeloffset, Lo+pixeloffset, formcolor);
 
SetPixel (DC, ia[Hi]+pixeloffset, Hi+pixeloffset, formcolor);
 
ia[Lo] := ia[Hi];
 
ia[Hi] := T;
 
SetPixel (DC, ia[Lo]+pixeloffset, Lo+pixeloffset, pixelcolor);
 
SetPixel (DC, ia[Hi]+pixeloffset, Hi+pixeloffset, pixelcolor);
 
inc (Lo);
 
dec (Hi);
 
end;
 
until (Lo > Hi);
 
if Hi > iLo then QuickSort (ia, iLo, Hi);
 
if Lo < iHi then QuickSort (ia, Lo, iHi);
 
ReleaseDC (Form3.Handle, DC);
 
end;
9.4. две функции потоков

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// функция потока пузырьковой сортировки
 
function BubbleThread (parms: pointer): LongInt; far;
 
begin
 
BubbleSort (form1.a, form1.numItems-1);
 
end;
 
// функция потока быстрой сортировки
 
function QuickThread (parms: pointer): LongInt; far;
 
begin
 
QuickSort (form1.b, 0, form1.numItems-1);
 
end;
10. Приложение готово можно скомпилировать и выполнить его.



Задание: Задача выше - это указания, с помощью которых можно создать приложение, визуально демонстрирующее работу разных алгоритмов сортировки. нужно взяв код приложение на Делфи за основу, переписать его на С/С++ с возможностью задавать количество сортируемых элементов (менять NumItems). Сейчас, NumItems := form2.ClientHeight - pixeloffset*2. Если вместо этой строки написать, например, NumItems := 1000000, программа начинает глючить. Т.О. надо переписать код на С/С++ и устранить баг с NumItems.
Помогите пожалуйста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2013, 12:21     Из delphi в С++: создать приложение, визуально демонстрирующее работу разных алгоритмов сортировки
Посмотрите здесь:

C++ Сравнение алгоритмов сортировки ... алгоритм Шелла
C++ Сравнение алгоритмов сортировки массива
C++ Визуализация алгоритмов сортировки
Подскажите название алгоритмов поиска и сортировки информации C++
C++ создать программу для сравнения алгоритмов сортировки
Сравнение быстродействия алгоритмов сортировки слияния с сортировкой линейной выборкой C++
Реализация алгоритмов сортировки C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
runer74
0 / 0 / 0
Регистрация: 23.07.2013
Сообщений: 13
25.07.2013, 06:19  [ТС]     Из delphi в С++: создать приложение, визуально демонстрирующее работу разных алгоритмов сортировки #2
Никто не знает?
SatanaXIII
Супер-модератор
Эксперт С++
5578 / 2612 / 239
Регистрация: 01.11.2011
Сообщений: 6,422
Завершенные тесты: 1
25.07.2013, 08:42     Из delphi в С++: создать приложение, визуально демонстрирующее работу разных алгоритмов сортировки #3
Цитата Сообщение от runer74 Посмотреть сообщение
Никто не знает?
Никаких идей. Если только взять какую-нибудь среду разработки типа билдера или студии, в них переписать предоставленный код, а затем подправить косяки с переполнением.
У вас какие-нибудь идеи, наработки есть?
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
25.07.2013, 08:43     Из delphi в С++: создать приложение, визуально демонстрирующее работу разных алгоритмов сортировки #4
я знаю.
runer74
0 / 0 / 0
Регистрация: 23.07.2013
Сообщений: 13
26.07.2013, 21:36  [ТС]     Из delphi в С++: создать приложение, визуально демонстрирующее работу разных алгоритмов сортировки #5
Пока не знаю

Добавлено через 3 часа 54 минуты
Ув. Kukurudza, буду рад, если поделитесь решением задачи
nonedark2008
26.07.2013, 23:36
  #6

Не по теме:

runer74, слишком многабукаф. Никто по доброте душевной в это дерьмо не полезет.

runer74
0 / 0 / 0
Регистрация: 23.07.2013
Сообщений: 13
27.07.2013, 11:45  [ТС]     Из delphi в С++: создать приложение, визуально демонстрирующее работу разных алгоритмов сортировки #7
Хорошо, кто поможет не за спасибо? пишите в ЛС
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.07.2013, 12:49     Из delphi в С++: создать приложение, визуально демонстрирующее работу разных алгоритмов сортировки
Еще ссылки по теме:

Использовать перегрузку функций для реализации алгоритмов сортировки C++
C++ Сравнить время работы алгоритмов сортировки
C++ Сравнение алгоритмов сортировки Хоара и std::sort
Алгоритмы сортировки,сравнение алгоритмов C++
5 алгоритмов сортировки C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
nonedark2008
820 / 578 / 111
Регистрация: 28.07.2012
Сообщений: 1,540
27.07.2013, 12:49     Из delphi в С++: создать приложение, визуально демонстрирующее работу разных алгоритмов сортировки #8
Цитата Сообщение от runer74 Посмотреть сообщение
кто поможет не за спасибо?
Создавай тему в разделе Фриланса.
Yandex
Объявления
27.07.2013, 12:49     Из delphi в С++: создать приложение, визуально демонстрирующее работу разных алгоритмов сортировки
Ответ Создать тему
Опции темы

Текущее время: 13:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru