Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2015, 22:59   #1
Dumacuk93
Новичок
Джуниор
 
Регистрация: 11.12.2015
Сообщений: 3
Вопрос Нужна помощь с сортировкой в Delphi

Препод попросил объяснить эту процедуру. Она рабочая. Единственное, сортировка идет по первой цифре т.е. от 0 до 9. Например число 256 будет меньше чем число 3. как это исправить? и как мне объяснить преподавателю: что такое aCol, SlSort,SlRow и т.д.! что к чему присвоено и какой метода сортировки использован? за ранее благодарен)

P.s. программу писал не сам, а сам в программирование не шарю(((


Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  SlSort, SlRow : TStringList;
  i, j, aCol : Integer;
begin
  aCol := ComboBox1.ItemIndex;  
  SlSort := TStringList.Create;    
  for i := StrinGgrid1.FixedRows to StrinGgrid1.RowCount - 1 do begin
    SlRow := TStringList.Create;
    SlRow.Assign(StrinGgrid1.Rows[i]);
    SlSort.AddObject(StrinGgrid1.Cells[aCol, i], SlRow);
  end;
  SlSort.Sort;
  j := 0;
  for i := StrinGgrid1.FixedRows to StrinGgrid1.RowCount - 1 do begin

    SlRow := Pointer(SlSort.Objects[j]);
    StrinGgrid1.Rows[i].Assign(SlRow);
    SlRow.Free;
    Inc(j);
  end;
  SlSort.Free;

end;

Последний раз редактировалось Stilet; 11.12.2015 в 23:20.
Dumacuk93 вне форума Ответить с цитированием
Старый 12.12.2015, 10:25   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Эта процедура предназначена для сортировки таблицы строк и не пойдет для сортировки численных данных.
Цитата:
программу писал не сам
Так нужно самому писать или думать что сдираешь.
Вот напиши свое задание.
puporev вне форума Ответить с цитированием
Старый 12.12.2015, 16:55   #3
Dumacuk93
Новичок
Джуниор
 
Регистрация: 11.12.2015
Сообщений: 3
По умолчанию

Так я и хочу разобраться.

Вот например сортирую по "цене за один сканер" а значение 234 она приравнивает к 2. как сделать что бы она 2х и 3х значные числа сравнивала?
Изображения
Тип файла: jpg Безымянный.jpg (28.3 Кб, 131 просмотров)
Dumacuk93 вне форума Ответить с цитированием
Старый 12.12.2015, 17:08   #4
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Вам же сказали что сравниваются строки, а не числа.
строка "5" всегда "больше" чем "234", а число 5 всегда меньше чем 234, что не понятно?
come-on вне форума Ответить с цитированием
Старый 12.12.2015, 17:27   #5
Dumacuk93
Новичок
Джуниор
 
Регистрация: 11.12.2015
Сообщений: 3
По умолчанию

Ладно спасибо)
А можете помочь тогда разобраться что и как в этой процедуре?
Типа:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  SlSort, SlRow : TStringList;
  i, j, aCol : Integer;
begin
  aCol := ComboBox1.ItemIndex;  // .....?? 
  SlSort := TStringList.Create;    // .....??
  for i := StrinGgrid1.FixedRows to StrinGgrid1.RowCount - 1 do begin // .....??
    SlRow := TStringList.Create;
    SlRow.Assign(StrinGgrid1.Rows[i]);
    SlSort.AddObject(StrinGgrid1.Cells[aCol, i], SlRow);
  end;
  SlSort.Sort;
  j := 0;
  for i := StrinGgrid1.FixedRows to StrinGgrid1.RowCount - 1 do begin

    SlRow := Pointer(SlSort.Objects[j]);
    StrinGgrid1.Rows[i].Assign(SlRow);
    SlRow.Free;
    Inc(j);
  end;
  SlSort.Free;

end;

Последний раз редактировалось Stilet; 12.12.2015 в 17:34.
Dumacuk93 вне форума Ответить с цитированием
Старый 14.12.2015, 09:38   #6
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

В этом Вы целиком не разберётесь, а разобравшись немножко (иначе не получится, тут тяжелая артиллерия задействована), засыпетесь на любом вопросе и снова прибежите.
Я бы посоветовал поискать или сюрприз! написать самому, код который сортирует обычный массив чисел, хоть методом пузырька.
Потом на основе этого кода написать сортировку (числовую, ессно) нужных Вам полей из Вашего набора данных, при этом придётся ещё запомнить как перемешались поиндексно строки (т.е. номера строк поменяли своё положение при сортировке данных в одном столбце).
И чтобы увидеть работу этого всего в гриде - написать процедуру вывода данных в грид циклом по номерам строк (т.е. например первой должна идти 5 по оригинальному номеру, первой после сортировки).
Ключевая мысль - работать с данными отдельно (сортировать числа из вашего набора данных), а выводить в грид отдельно, т.к. в приведённом коде это склеено в единый монолоит. Весь этот код (в теме), ессно убрать вообще, от него толку ноль, если Вы его не понимаете.
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь с сортировкой mrDo Общие вопросы Delphi 2 26.02.2014 02:52
Нужна помощь с сортировкой односвязных списков на Pascal Lesowik Помощь студентам 2 22.05.2011 06:14
Требуется помощь с сортировкой по полю! Phaeton Общие вопросы C/C++ 0 05.01.2010 23:10
Нужна помощь с Delphi! Тая Помощь студентам 4 22.11.2008 13:01