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

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

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

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

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

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

Здравствуйте! Помогите сделать сортировку массива записей рабочей, смысл в том, что на форме есть 2 радиокнопки, при активации одной из кнопок содержимое комбобокса меняется, затем открывается опен диалог, и выбирается файл записей, в котором осуществляется поиск данных, найденные данные заполняются в массив, далее в этом массиве происходит сортировка данных по фамилии, и далее отсортированные в массиве записи выводятся в ричедит

Код:
procedure TForm1.Button1Click(Sender: TObject);
var mass_sorted: array of trec;
  m, i1, n10: Word;
bf:trec;
begin
  if not OpenDialog1.Execute then Exit;
  AssignFile(f, OpenDialog1.FileName);
  Reset(f);
  Seek(f, 0);
  m := 0;
  SetLength(mass_sorted, filesize(f));
  while not Eof(F) do
  begin
    read(f, work);
    if RadioButton1.Checked then
    begin
      if Pos(AnsiLowerCase(Trim(ComboBox3.text)), AnsiLowerCase(Trim(work.Podr))) = 1 then mass_sorted[m] := work;
      Inc(m);
    end
    else
    begin
      if Pos(AnsiLowerCase(Trim(ComboBox3.text)), AnsiLowerCase(Trim(work.Dolzn))) = 1 then mass_sorted[m] := work;
      inc(m);
    end;
  end;
  for i1 := 0 to m - 1 do
    for N10 := i1 + 1 to m - 2 do
      if mass_sorted[i1].fam > mass_sorted[n10].fam then
      begin
        bf := mass_sorted[i1];
        mass_sorted[i1] := mass_sorted[N10];
        mass_sorted[N10] := bf;
      end;
 for i1:=0 to m-1 do    RichEdit1.Lines.add('|' + inttostr(mass_sorted[i1].Tn) + '|' +  mass_sorted[i1].Fam + '|' +  mass_sorted[i1].Im + '|' +  mass_sorted[i1].Oth + '|' + datetostr( mass_sorted[i1].DataR) + '|' + datetostr( mass_sorted[i1].DataJ) + '|' + datetostr( mass_sorted[i1].DataW) + '|' +  mass_sorted[i1].Adr + '|' +  mass_sorted[i1].Podr + '|' +  mass_sorted[i1].Dolzn + '|' + inttostr( mass_sorted[i1].NomP) + '|' + inttostr( mass_sorted[i1].Ser) + '|' +  mass_sorted[i1].KemV + '|');
  mass_sorted := nil;
  CloseFile(F);
end;
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 06.12.2013, 00:22   #2
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Неужели никто не может посмотреть ошибок в коде? Вить я все сделал сам, но у меня не работает, поиск работает, а сортировка нет
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 06.12.2013, 09:41   #3
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Попробуй так:
Код:
type alphabet='АБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЪЮЬЭЮЯ';


var m: array of trec;
i,j,x:integer;

procedure swap(var a,b:trec);
var c:trec;
begin
   c:=a;
   a:=b;
   b:=c;
end;

  procedure quick_sort(First,last:integer);
begin
i:=First;
j:=Last;
x:=pos(m[(i+j) div 2].Fam[1],alphabet);
repeat
  while pos(m[i].Fam[1],alphabet)<x do i:=i+1;
  while x<pos(m[j].Fam[1],alphabet) do j:=j-1;
  if i<=j then
  begin
      swap(m[i],m[j]);
      i:=i+1;
      j:=j-1;
  end;
until i>j;
if first<j then quick_sort(first,j);
if i<last then quick_sort(i,last);
end; 
..............
// сортировка массива
quick_sort(0,final_element_of_array);
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 06.12.2013, 15:23   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Алексей,
попробуйте изменить свой код сортировки на такой:
Код:
  for i1 := 0 to m - 2 do
    for N10 := i1 + 1 to m - 1 do
      if mass_sorted[i1].fam > mass_sorted[n10].fam then
      begin
        bf := mass_sorted[i1];
        mass_sorted[i1] := mass_sorted[N10];
        mass_sorted[N10] := bf;
      end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.12.2013, 23:15   #5
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Спасибо большое!
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает сортировка массива bestnicer JavaScript, Ajax 12 20.01.2013 17:31
Быстрая сортировка(сортировка Хоара). Сортировка фрагмента массива [C++] druger Помощь студентам 0 20.04.2012 15:49
Сортировка массива методами предсортировки и слияния, и пирамидальная сортировка. lenny_24 Помощь студентам 2 17.04.2011 18:57
Почему программа на С++ не работает с локальным описанием массива, но работает с глобальным? >>STINGER<< Помощь студентам 4 08.03.2011 09:56
[pascal]Сортировка массива методом прямого выбора, работает неадекватно. fatoldsun Помощь студентам 7 22.04.2009 19:42