Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.075 c
2-1330445134
Zheksonz
2012-02-28 20:05
2013.03.22
Почему может не срабатывать TGauge.Visible?


3-1276604494
Eugene1501
2010-06-15 16:21
2013.03.22
Как блокировать таблицу при помощи ADO


15-1346782032
vuk
2012-09-04 22:07
2013.03.22
Плавали по морю мимо Кольского


2-1339949716
Cobalt
2012-06-17 20:15
2013.03.22
Вывод текста


15-1349680247
Scott Storch
2012-10-08 11:10
2013.03.22
uml





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский