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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2013, 17:24   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию Не работает сортировка

Здравствуйте! Почему-то у меня не работает моя сортировка, с массивом записей работала, а переделав под строки перестала.
данная процедура состоит из 3-х этапов:

1) Инициализируется и заполняется динамический массив строк строками из стринглиста (sl)

2) Сама сортировка

3) отчистка предыдущего стринглиста и листбокса и заполнение их из массива

Код:
procedure TForm1.Button15Click(Sender: TObject);
var a:array of string;
i1,kk,n10:Integer;
strok:string;
begin
  kk:=SL.Count;
  SetLength(a,kk);
 for i1:=0 to kk do a[i1]:=SL.Strings[i1];

 for i1:=0 to kk-1 do
 FOR N10:=i1+1 to kk do
 IF A[i1]>A[n10] then
 begin
 strok:=A [i1];
 A[i1]:=A[N10];
 A[N10]:=strok;
 end ;


 SL.Clear;
 ListBox1.Clear;
 for i1:=0 to kk do
 begin
 SL.add(a[i1]);
 ListBox1.Items.add(ExtractFileName(a[i1]));
 end;
 a:=nil;

 ShowMessage('Плей лист был отсортирован по алфавиту');
end;
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 03.05.2013, 18:13   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Нужно не только в одном месте помнить, что индекс динамических массивов и строк в стриглисте от 0 до Count-1
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.05.2013, 18:41   #3
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Код:
  kk:=SL.Count;
изменил на
Код:
  kk:=SL.Count-1;
все равно не работает, выдает ошибку при заполнении массива

а почему еще может не работать?
from dark to light)

Последний раз редактировалось Stilet; 04.05.2013 в 11:34.
Алексей_2012 вне форума Ответить с цитированием
Старый 03.05.2013, 22:10   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Менять не там надо иначе динамический массив а будет неполный, нужно в циклах до kk везде уменьшить на 1
kk ==> kk-1
kk-1 ==> kk-2

Либо изменить
Код:
 kk:=SL.Count-1;
SetLength(a,kk+1);

Последний раз редактировалось eoln; 03.05.2013 в 22:13.
eoln вне форума Ответить с цитированием
Старый 04.05.2013, 02:36   #5
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Сортировка то работает, но под конец sl листа выводится два одинаковых названия в лист бокс(( но треки играют разные, что за бред?

Код:
procedure TForm1.Button15Click(Sender: TObject);
var a:array of string;
i1,kk,n10:Integer;
strok:string;
begin
  kk:=SL.Count;
  SetLength(a,kk);
 for i1:=0 to kk-1 do a[i1]:=SL.Strings[i1];
 SL.Clear;
 ListBox1.Clear;
 for i1:=0 to kk-1 do
 FOR N10:=i1+1 to kk-1 do
 IF A[i1]>A[n10] then
 begin
 strok:=Trim(A[i1]);
 A[i1]:=Trim(A[N10]);
 A[N10]:=trim(strok);
 end ;

 for i1:=0 to kk-1 do
 begin
 SL.add(a[i1]);
 ListBox1.Items.add(ExtractFileName(SL.Strings[i1]));
 end;
 a:=nil;
 ShowMessage('Плей лист был отсортирован по алфавиту');
end;
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 04.05.2013, 13:35   #6
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

ну дак в чем дело, кто знает?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 04.05.2013, 14:22   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Отладчиком пройтись не желаешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.05.2013, 21:48   #8
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

каким отладчиком? Я не умею
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 05.05.2013, 02:37   #9
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Самый простой отладчик - повставлять везде Showmessage('mess'); Где вместо mess будет любая строка, чтобы видеть, что она сейчас содержит.

Код:
procedure TForm1.Button15Click(Sender: TObject);
var a:array of string;
i1,kk,n10:Integer;
strok:string;
begin
  kk:=SL.Count;
  SetLength(a,kk);
 for i1:=0 to kk-1 do 
BEGIN
 ShowMessage(a[i1]); //отладчик
a[i1]:=SL.Strings[i1];
END:
 SL.Clear;
 ListBox1.Clear;
 for i1:=0 to kk-1 do
 FOR N10:=i1+1 to kk-1 do  
 IF A[i1]>A[n10] then
 begin
 ShowMessage(a[i1]+' '+A[N10]); //отладчик
 strok:=Trim(A[i1]); //ЧТО ДЕЛАЕТ ТРИМ? НУЖЕН ЛИ ОН ТУТ ВООБЩЕ?! Если strok-обычный буфер, то зачем в него присваивать результат функции?
 A[i1]:=Trim(A[N10]); //           --//--
 A[N10]:=trim(strok); //           --//--
 end ;

 for i1:=0 to kk-1 do
 begin
 SL.add(a[i1]);
 ListBox1.Items.add(ExtractFileName(SL.Strings[i1]));
 end;
 a:=nil;
 ShowMessage('Плей лист был отсортирован по алфавиту');
end;
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 05.05.2013, 09:33   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Я не умею
Рекомендую научится. Освоить установки точек прерывания и клавиши F7-F8.
Просто поверь - это твое все.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает сортировка массива bestnicer JavaScript, Ajax 12 20.01.2013 17:31
Сортировка не работает CWD Общие вопросы C/C++ 6 21.09.2011 23:35
Не работает сортировка Serzhi1 Общие вопросы C/C++ 16 25.12.2008 07:22
TDBgridEh -не работает Сортировка adminhl БД в Delphi 0 01.04.2008 20:40