Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизСортировка "пузырьком" Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.071 c