Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Сортировка "пузырьком"   Найти похожие ветки 

 
Evgeniy ©   (2012-03-12 16:35) [0]

Добрый день! Прошу прощения за то, что открываю уже "хорошо избитую" тему на страницах данного сайта, но объясню это тем, что я очень плохо разбираюсь в delphi, но мне необходимо научиться с ним работать, поэтому буду очень признателен за помощь!
Итак, задача заключается в следующем. Необходимо отсортировать массив случайно сгенерированных чисел в ListBox1 (по возрастанию/убыванию) методом "пузырька", посредством выбора соответствующей кнопки в RadioGroup, а затем вывести отсортированный массив в ListBox2.
Мне удалось сделать генератор чисел в ListBox. Проблема заключается в том, что я не понимаю как взять числа из ListBox1, отсортировать их, приняв во внимание значения RadioGroup (по возрастанию/убыванию) и затем вывести отсортированный массив в ListBox2...
Я очень хочу разобраться в этой задаче, очень Вас прошу помочь! Если можно, объясните мне пошагово что и как нужно писать в коде. Наброски своего кода прилагаю. Заранее спасибо!smiley


procedure SortBubble(Sender: TObject);
var i,n, min: integer;
begin
min:=1;
for i:=2 to n+1 do
if i < min then min:=i;
Form1.ListBox2:=IntToStr(min);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
SortBubble(ListBox1.Items);
end;

procedure TForm1.Button2Click(Sender: TObject);
var i: integer;
begin
randomize;
for i:= 1 to 10 do
ListBox1.Items.Add(IntToStr(random(10)));
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
ListBox1.Items.Clear;
ListBox2.Items.Clear;
Edit1.Clear;
end;
end.


 
stas ©   (2012-03-12 16:45) [1]

У Вас очень уж много ошибок, во всем разбираться нет времени, вот пример как можно оформить процедуру.

procedure SortBubble(ListSource,ListDest: TStrings);
var i,n, min: integer;
begin
min:=1;
for i:=0 to List.Count-1 do
begin

  .....
   ListDest:=IntToStr(min);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
SortBubble(ListBox1.Items,ListBox2.Items);
end;


Хотя можно не заморачиваться пока с параметрами и сделать ее методом класса TForm1

А можно отсортировать еще ListBox свойством Sorted:=true, но в этом случае будет так
1
10
11
2
3
4


 
RWolf ©   (2012-03-12 16:48) [2]

готовый пример сортировки пузырьком есть в подкаталоге Demos\Threads.


 
stas ©   (2012-03-12 16:54) [3]

точнее так:

...
ListDest.Add (IntToStr(min));


 
Ega23 ©   (2012-03-12 17:02) [4]

Вот наглядный пример пузырька:
www.youtube.com/watch?v=lyZQPjUT5B4


 
Jeer ©   (2012-03-12 17:21) [5]

var
 arSort: array of double;
 N: integer;

implementation

{$R *.dfm}

uses Math;

procedure TfmStatusForm.btnGenerateClick(Sender: TObject);
var i: integer;
begin
 lbxSrc.Clear;
 lbxTrg.Clear;
 N := updown.Position;
 SetLength(arSort, N);
 for i:=0 to High(arSort)  do begin
   arSort[i] := Random;
   lbxSrc.Items[i] := FloatToStr(arSort[i]);
 end;
end;

procedure TfmStatusForm.btnBubbleSortClick(Sender: TObject);
var  i,j: integer;
    x: double;
 function Ascending(Yes: boolean): boolean;
 begin
   if Yes then Result := (arSort[i] > arSort[j])
   else Result := (arSort[i] <= arSort[j]);
 end;
begin
 for  i := 0 to N-1 do begin
   for j := i+1 to N-1 do begin
     if Ascending(chkAscending.Checked) then begin
       x := arSort[i]; arSort[i] := arSort[j]; arSort[j] := x;
     end;
   end;
   lbxTrg.Items.Add(FloatToStr(arSort[i]));
 end;
end;


 
Evgeniy ©   (2012-03-12 17:27) [6]

Уважаемый stas ©! Я попробовал использовать написанную вами процедуру, но при компиляции кода возникает ошибка, ругается на for i:=0 to List.Count-1 do, точнее на List.Count, пишет что неизвестный идентификатор List. Мне его нужно в переменных объявить? Поясните ещё пожалуйста каждую строчку кода, а то я не совсем понимаю что они значат.


 
stas ©   (2012-03-12 17:32) [7]

SourceList


 
stas ©   (2012-03-12 17:35) [8]

procedure SortBubble(ListSource,ListDest: TStrings);
var i,n, min: integer;
begin
min:=1;
for i:=0 to ListSource.Count-1 do
begin

 .....
  ListDest:=IntToStr(min);
end;
end;


 
Jeer ©   (2012-03-12 17:38) [9]


> ListDest:=IntToStr(min);


Да, ну ?


 
stas ©   (2012-03-12 17:41) [10]

Jeer ©   (12.03.12 17:38) [9]
я выше уже поправился и опять написал...


 
Evgeniy ©   (2012-03-12 17:43) [11]

ListDest:=IntToStr(min) ругается на эту строчку. Вместо многоточия должен какой-то кусочек кода присутствовать?
Jeer, благодарю Вас за предоставленный код, но он довольно сложен для восприятия, разобраться в нём я не сумею.


 
Evgeniy ©   (2012-03-12 17:46) [12]

Спасибо, stas! Но программа работает не корректно, в отсортированный массив выводятся все единицы?


 
stas ©   (2012-03-12 17:50) [13]

Evgeniy ©   (12.03.12 17:46) [12]
Вместо троеточия нужен код по сортировке, я не стал его приводить.


 
Evgeniy ©   (2012-03-12 17:52) [14]

Понятно, спасибо stas! Попробую дальше сам разобраться. Всех благодарю за помощь!


 
Evgeniy ©   (2012-03-12 18:04) [15]

Уважаемый stas! Может Вы всё-таки набросайте код по сортировке, я не догоняю:( Я разобрался в коде что Вы написали, но как его доработать не понимаю. Помогите пожалуйста!


 
Jeer ©   (2012-03-12 18:06) [16]

Чукча ?

См [5].


 
stas ©   (2012-03-12 18:12) [17]

Delphi нет под рукой, что-то типа этого

procedure SortBubble(ListSource,ListDest: TStrings);
var i,k,n, min: integer;
begin
min:=1;
for i:=0 to ListSource.Count-1 do
begin
 k:=i+1; //определяем индекс следующего элемента
 if k>ListSource.Count then min:=StrToInt(ListSource[i]) //проверяем на вхождение в диапазон
 else
  begin
    min:=StrToInt(ListSource[i]); //получаем текущее значение
    n:=StrToInt(ListSource[k]); //получаем следующее значение
    if min>n then min:=n; //определяем минимальное значение
  end;
 
 ListDest.Add (IntToStr(min)); //добавляем в список
end;
end;


 
Evgeniy ©   (2012-03-12 18:34) [18]

Компилируется без ошибок, но при сортировке вылетает ошибка, ругается на строку n:=StrToInt(ListSource[k]);, пишет Value assigned to "min" never used.


 
stas ©   (2012-03-12 18:39) [19]

if k>=ListSource.Count


 
Evgeniy ©   (2012-03-12 18:43) [20]

Спасибо, stas!


 
Anatoly Podgoretsky ©   (2012-03-12 19:55) [21]


> Evgeniy ©   (12.03.12 18:04) [15]

А код из примеров чем не устраивает?


 
stas ©   (2012-03-12 20:16) [22]

Evgeniy ©   (12.03.12 18:43) [20]
Мой код наверное не правильный, ну я думаю сам дальше разберешься, сейчас не могу сказать как сделать.



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.058 c
15-1332619977
xayam
2012-03-25 00:12
2013.03.22
Всё самое важное в дырочках


2-1338443775
Demo
2012-05-31 09:56
2013.03.22
Настроить Delphi 2007


15-1351354654
Дмитрий С
2012-10-27 20:17
2013.03.22
Сортировка папок и файлов наравне. windows 7


15-1328702657
Арт
2012-02-08 16:04
2013.03.22
Google кидок..


2-1339439626
vasa777
2012-06-11 22:33
2013.03.22
const