Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 13.07.2018
Сообщений: 2
1

Визуализация сортировки массива пузырьком

27.08.2018, 23:01. Показов 2530. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Было дано задание, написать визуализацию пузырька. я почти с этим справилась (на самом примитивном уровне), но график перерисовываться не желает. в чем проблема?

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
 const n = 7;
var
  Form1: TForm1;
  i,j,k,g: integer;
  a: array [0..n] of integer;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
   label1.Caption := 'Размер ';
   label2.Caption := 'Массив';
   label3.Caption := Inttostr(n);
   label4.Caption := ' ';
   randomize;
   for i := 0 to n do
   begin
    a[i] := -20 + random(50);
    label4.Caption := label4.Caption + ' ' + inttostr(a[i]);
    Series1.AddXY(0.1*i,a[i],'',clPurple);
   end;
   button1.Caption := 'Сортировка';
   label5.Caption := 'Отсортированный массив';
   label6.Caption := ' ';
   memo1.Text:= '';
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
for i := 0 to n do
for j := 0 to n -1 do
if (a[j] > a[j+1]) then
begin
   k := a[j+1];
   a[j+1] := a[j];
   a[j] := k;
   series1.Clear;
   for g := 0 to n do
   begin
   sleep(200);
   Application.ProcessMessages;
    Memo1.Text := Memo1.Text + ' ' + inttostr(a[g]);
    Series1.AddXY(0.1*i,a[g],'',clPurple); //вот тут столбики лепятся друг на друга
   end;
   Memo1.Text := Memo1.Text + #13#10;
end;
label6.Caption := ' ';
for i := 0 to n do
begin
 sleep(200);
   Application.ProcessMessages;
 label6.Caption := label6.Caption + ' ' + inttostr(a[i]);
end;
end;
 
end.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.08.2018, 23:01
Ответы с готовыми решениями:

Визуализация сортировки массива методом слияния
Необходимо написать программу визуальной сортировки массива методом слияния.Возник вопрос ,как это...

Визуализация сортировки вставками
Всем привет, кто-нибудь реализовывал Визуальное представление сортировки вставками на Delphi? ...

Визуализация сортировки выбором
Написать программу с визуализации сортировки выбором.

Визуализация шейкерной сортировки
Сортировка - procedure TForm1.Shaker(a: Tmas_int); var i, j, d, k, x, p: integer; begin ...

3
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
28.08.2018, 10:55 2
если делать правильно, то вам нужно
1. вынести строки 34--48 в отдельный метод, например DoSortStep()
sleep и Application.ProcessMessages выбросить и более не вспоминать
2. положить на форму таймер interval = 50-80 мсек enabled=false
3. в процедуре обработки таймера
Delphi
1
2
3
4
5
6
7
8
  DoSortStep();
  j:=j+1;
  if j>i-1 then
  begin
    j:=0;
    i:=i+1;
  end;
  if i>n then timer1.enabled := false;
по кнопке
Delphi
1
2
3
4
5
6
procedure TForm1.Btn1Click(Sender:TObject);
begin
  i:=0;
  j:=0;
  timer1.enabled := true;
end;
вроде все
не проверял. писал на коленке
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
28.08.2018, 11:13 3
Лучший ответ Сообщение было отмечено hellgirl1304 как решение

Решение

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
const n=8;
var
  Form1: TForm1;
   a: array [1..n] of integer;
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
var i:Integer;
begin
label1.Caption := 'Размер массива='+inttostr(n);
label2.Caption := 'Исходный массив';
Label3.Caption:='';
randomize;
for i := 1 to n do
 begin
  a[i] := -20 + random(50);
  label3.Caption := label3.Caption+'  '+inttostr(a[i]);
  Series1.AddXY(i,a[i],'',clPurple);
 end;
button1.Caption := 'Сортировка';
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var i,j,k,x:Integer;
begin
for i:=1 to n do
for j:=1 to n-1 do
if a[j]>a[j+1] then
 begin
  x:=a[j];
  a[j]:=a[j+1];
  a[j+1]:=x;
  sleep(500);
  Application.ProcessMessages;
  Series1.Clear;
  for k:=1 to n do
     begin
      Memo1.Text := Memo1.Text + ' ' + inttostr(a[k]);
      Series1.AddXY(k,a[k],'',clPurple);
     end;
    Memo1.Text := Memo1.Text + #13#10;
   end;
  end;
0
0 / 0 / 0
Регистрация: 13.07.2018
Сообщений: 2
28.08.2018, 11:57  [ТС] 4
Цитата Сообщение от krapotkin Посмотреть сообщение
если делать правильно, то вам нужно
у меня была проблема с графиком, а с написанием задержки, проблему решила таким образом =)

Puporev,
спасибо. как-то даже обидно, что из-за одного неверного значения, выходила полная чушь =))
0
28.08.2018, 11:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.08.2018, 11:57
Помогаю со студенческими работами здесь

Визуализация пирамидальной сортировки
Доброго времени суток! Мне поставлена задача визуализировать пирамидальную сортировку, но в...

Функция сортировки текстового файла пузырьком
Приветствую всех. Вот в чём вопрос. Нужна функция сортировки текстового файла пузырьком. Т.е....

Визуализация сортировки массива
Народ необходимо написать программу визуальной сортировки массива. Но возник вопрос как это...

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru