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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2009, 05:06   #1
Dremgor
 
Регистрация: 29.12.2008
Сообщений: 5
По умолчанию Cортировка типизированного файла по 3м признакам

Всем привет, хотелось бы получить консультацию по поводу сортировки в типизированном файле.
................................... ................................... ..................................
Код:
 type
  tceh=record
   kodm:integer;
   kodp:integer;
   Scod:integer;
   SName:string;
   day:longint;
   kols:integer;
  end;

 var
  ceh: tceh;
  fout: file of tceh;
................................... ................................... ..................................
А вот создаю файл.
................................... ................................... ..................................
Код:
procedure crtfile;
 var
  ceh1: tceh;
  f_temp: file of tceh;
  filename: string;
  ans: string;
  fl,raz: boolean;
  pr: integer;
 begin
  repeat
   textcolor(13);
   writeln('Enter a filename...');
   textcolor(white);
   readln(filename);
   assign(fout,filename);
   {$I-}
    reset(fout);
   {$I+}

   if ioresult=0 then
    begin
	 textcolor(red);
     writeln('The file ',filename,' exists');
	 textcolor(white);
     close(fout);
     fl:=false;
    end
   else
    begin
     rewrite(fout);
     fl:=true;
    end;

  until fl;

  raz:=false;
  repeat

  fl:=true;

  assign(fout,filename);
  assign(f_temp,'temp');

   reset(fout);
   rewrite(f_temp);

   
   pr:=prof('Min Code.');
   ceh1.kodm:=pr;
   
   pr:=prof('Predp code.');
   ceh1.kodp:=pr;
   
   pr:=prof('Speciality Code.');
   ceh1.Scod:=pr;
   
   writeln('Speciality Name.');
   readln(ceh1.SName);
   
   pr:=prof('Quantity of specialists.');
   ceh1.kols:=pr;
 
   writeln('day.');
   readln(ceh1.day);
................................... ................................... ..................................
У меня сделана следующая сортировка, но она насколько я понял работает только для соседних элементов, не подскажите как ее лучше изменить? Насколько я знаю нужно сделать обмен строк прямым доступом правда я не очень понял как это делается...
Сортировка происходи по реквизитам
Scod => kodm => kodp
................................... ................................... ..................................
Код:
 if raz then
   begin
   repeat
    read(fout,ceh);
    if (ceh.scod>ceh1.scod) then
     begin
      fl:=false;
      write(f_temp,ceh1);
      write(f_temp,ceh);
     end
    else
	  if (ceh.scod=ceh1.scod) and (ceh.kodm>ceh1.kodm) then
	   begin
	    fl:=false;
		write(f_temp,ceh1);
		write(f_temp,ceh);
	   end
	    else
		 if (ceh.scod=ceh1.scod) and (ceh.kodm=ceh1.kodm) and (ceh.kodp>ceh1.kodp) then
		  begin
		   fl:=false;
		   write(f_temp,ceh1);
           write(f_temp,ceh);
		  end
		 else  
          write(f_temp,ceh);

   until eof(fout) or not(fl);

   while (not(eof(fout))) do
    begin
     read(fout,ceh);
     write(f_temp,ceh);
    end;

    if fl then
     write(f_temp,ceh1);


   close(fout);
   close(f_temp);

   erase(fout);
   rename(f_temp,filename);

   end
   else
   begin
    write(fout,ceh1);
    raz:=true;
   end;


   textcolor(green);
   writeln('To continue record!? (Y/N)');
   textcolor(9);
   readln(ans);
   textcolor(white);


  until (ans='N') or (ans='n');


 end;
--------------------------------------------------------------------------
Не поможете советом? В прямом доступе я не шарю =(

Последний раз редактировалось Stilet; 04.06.2009 в 07:58.
Dremgor вне форума Ответить с цитированием
Старый 04.06.2009, 13:39   #2
Dremgor
 
Регистрация: 29.12.2008
Сообщений: 5
По умолчанию 111

Все еще актуально. Up!
Dremgor вне форума Ответить с цитированием
Старый 05.06.2009, 10:45   #3
Dremgor
 
Регистрация: 29.12.2008
Сообщений: 5
По умолчанию

Видимо эта задача настолько сложна что никто даже не может помочь советом
Dremgor вне форума Ответить с цитированием
Старый 05.06.2009, 14:10   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

рассказать, как делается сортировка по трём признакам — это несложно.
а вот понять, что означает Ваша фраза:
"сделана следующая сортировка, но она насколько я понял работает только для соседних элементов ... Насколько я знаю нужно сделать обмен строк прямым доступом... " я лично не смог.

p.s. сортировка по нескольким признакам делается ТОЧНО ТАК ЖЕ, как и по одному. только при сравнении по первому признаку обрабатывается дополнительно ситуация, когда сравниваемые элементы РАВНЫ! в случае равенства сравниваются эти же элементы по второму признаку, и принимается решение в зависимости от того, какой больше, какой меньше. если же и по второму признаку равны, тогда сравниваем по третьему признаку...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с чтением типизированного файла. Вадим Буренков Общие вопросы Delphi 8 28.05.2009 13:31
Переписать из типизированного файла в текстовый все данные. menlo Помощь студентам 3 10.03.2008 23:34
Вывести информацию из типизированного файла в combobox... tacer Помощь студентам 1 04.12.2007 11:46