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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2012, 13:07   #1
jandr
Новичок
Джуниор
 
Регистрация: 22.12.2012
Сообщений: 1
По умолчанию оптимизация процедур поиска(delphi)

есть 2 процедуры, которые ищут записи с введенным кодом рабочего в одном файле и с кодом должности в другом. можно ли как то эти 2 процедуры объединить в одну чтобы в параметрах процедуры указывать имя файла?
Код:
// поиск по коду рабочего
Procedure SearchK_work(A:integer);
var
  P, Q, I, Kp, Kq, k: integer;
  flag: boolean;
begin
  Q:=0; P:=FileSize(fileWork)-1; flag:=false;
  k:=0;
  repeat
    if P<Q
    then begin
      ShowMessage('Запись не найдена');
      exit;
    end
    else begin
      seek(fileWork,Q);
      read(fileWork,RecWork);
      Kq:=RecWork.k_work;
      seek(fileWork,P);
      read(fileWork,RecWork);
      Kp:=RecWork.k_work;

      I:=Trunc((P-Q)*(A-Kq)/(Kp-Kq))+Q;
      seek(fileWork,I);
      read(fileWork,RecWork);
      inc(k);
      // сравнение записи файла с ключом поиска
      if A = RecWork.k_work
      then flag:=true
      else if A < RecWork.k_work
           then P:=I-1
           else Q:=I+1;
    end;
  until flag=true;
  ShowMessage(IntToStr(k)+ ' сравнение при поиске рабочего');
end;

// поиск по номеру должности
Procedure SearchK_dol(A:integer);
var
  P, Q, I, Kp, Kq, k: integer;
  flag: boolean;
begin
  Q:=0; P:=FileSize(fileDol)-1; flag:=false;
  k:=0;
  repeat
    if P<Q
    then begin
      ShowMessage('Запись не найдена');
      exit;
    end
    else begin
      seek(fileDol,Q);
      read(fileDol,RecDol);
      Kq:=RecDol.k_dol;
      seek(fileDol,P);
      read(fileDol,RecDol);
      Kp:=RecDol.k_dol;

      I:=Trunc((P-Q)*(A-Kq)/(Kp-Kq))+Q;
      seek(fileDol,I);
      read(fileDol,RecDol);
      inc(k);
      // сравнение записи файла с ключом поиска
      if A = RecDol.k_dol
      then flag:=true
      else if A < RecDol.k_dol
           then P:=I-1
           else Q:=I+1;
    end;
  until flag=true;
  ShowMessage(IntToStr(k)+ ' сравнение при поиске должности');
end;
jandr вне форума Ответить с цитированием
Старый 23.12.2012, 00:00   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

судя по приведённому Вами фрагменту кода, файлы имеют разные типы (структуру).
в одном хранятся записи такого же типа, как RecWork, в другом - такого же типа, как RecDol.
Совместить можно, но это Вам ничего не даст, фактически все операторы из первой и из второй процедур ПОЛНОСТЬЮ войдут в новую функцию, плюс ещё добавится функция проверки типа. Т.е. это приведёт к увеличению и усложнению кода, что делает объединение бессмысленныи и бесполезным..
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Текст стандартных функций и процедур для работы со строками в Delphi Pixma Помощь студентам 3 17.11.2010 13:25
Delphi. Оптимизация алгоритма. Риндера Помощь студентам 28 12.11.2010 09:27
Оптимизация поиска простых чисел adokS Общие вопросы C/C++ 1 06.11.2010 15:51
Оптимизация поиска mutabor Общие вопросы Delphi 14 07.02.2008 14:30