![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сортировка "пузырьком" [D7]
Evgeniy © (2012-03-12 16:35:00)Добрый день! Прошу прощения за то, что открываю уже "хорошо избитую" тему на страницах данного сайта, но объясню это тем, что я очень плохо разбираюсь в 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 20:16:00) [1]Evgeniy © (12.03.12 18:43) [20]
Мой код наверное не правильный, ну я думаю сам дальше разберешься, сейчас не могу сказать как сделать.
Anatoly Podgoretsky (2012-03-12 19:55:00) [2]
> Evgeniy © (12.03.12 18:04) [15]
А код из примеров чем не устраивает?
Evgeniy (2012-03-12 18:43:00) [3]Спасибо, stas!
stas (2012-03-12 18:39:00) [4]if k>=ListSource.Count
Evgeniy (2012-03-12 18:34:00) [5]Компилируется без ошибок, но при сортировке вылетает ошибка, ругается на строку
n:=StrToInt(ListSource[k]);, пишет Value assigned to 'min' never used.
stas (2012-03-12 18:12:00) [6]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;
Jeer (2012-03-12 18:06:00) [7]Чукча ?
См [5].
Evgeniy (2012-03-12 18:04:00) [8]Уважаемый stas! Может Вы всё-таки набросайте код по сортировке, я не догоняю:( Я разобрался в коде что Вы написали, но как его доработать не понимаю. Помогите пожалуйста!
Evgeniy (2012-03-12 17:52:00) [9]Понятно, спасибо stas! Попробую дальше сам разобраться. Всех благодарю за помощь!
stas (2012-03-12 17:50:00) [10]Evgeniy © (12.03.12 17:46) [12]
Вместо троеточия нужен код по сортировке, я не стал его приводить.
Evgeniy (2012-03-12 17:46:00) [11]Спасибо, stas! Но программа работает не корректно, в отсортированный массив выводятся все единицы?
Evgeniy (2012-03-12 17:43:00) [12]
ListDest:=IntToStr(min)ругается на эту строчку. Вместо многоточия должен какой-то кусочек кода присутствовать?
Jeer, благодарю Вас за предоставленный код, но он довольно сложен для восприятия, разобраться в нём я не сумею.
stas (2012-03-12 17:41:00) [13]Jeer © (12.03.12 17:38) [9]
я выше уже поправился и опять написал...
Jeer (2012-03-12 17:38:00) [14]
> ListDest:=IntToStr(min);
Да, ну ?
stas (2012-03-12 17:35:00) [15]
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;
stas (2012-03-12 17:32:00) [16]SourceList
Evgeniy (2012-03-12 17:27:00) [17]Уважаемый stas ©! Я попробовал использовать написанную вами процедуру, но при компиляции кода возникает ошибка, ругается на
for i:=0 to List.Count-1 do, точнее на List.Count, пишет что неизвестный идентификатор List. Мне его нужно в переменных объявить? Поясните ещё пожалуйста каждую строчку кода, а то я не совсем понимаю что они значат.
Jeer (2012-03-12 17:21:00) [18]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;
Ega23 (2012-03-12 17:02:00) [19]Вот наглядный пример пузырька:
www.youtube.com/watch?v=lyZQPjUT5B4
stas (2012-03-12 16:54:00) [20]точнее так:
...
ListDest.Add (IntToStr(min));