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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2011, 12:13   #1
nicklifs
Пользователь
 
Регистрация: 10.12.2011
Сообщений: 32
По умолчанию Процедура слияния 2 файлов в 2 файла

procedure sort(var f1,f2,d1,d2:file of integer; var prov:integer );
var a,alast,b,blast,k,m,last,x: integer;
fl:boolean;
begin
rewrite(d1);
rewrite(d2);
reset(f1);
reset(f2);

fl:=true;
k:=1; //записываем в файл 1
m:=1; //читаем из файла 1

read(f1,a);
read(f2,b);
if a<b then begin
write(d1,a);
alast:=a;
blast:=a;
end
else begin
write(d1,b);
blast:=b;
alast:=b;
m:=2;
end;
if m=1 then begin read(f1,a); if a<alast then fl:=false end;
if m=2 then begin read(f2,b); if b<blast then fl:=false end;
while (not eof(f1))and(not eof(f2)) do begin

if fl=true then begin

if a<b then begin
if k=1 then write(d1,a)
else write(d2,a);
alast:=a;
m:=1;
read(f1,a);

end
else begin
if k=2 then write(d2,b)
else write(d1,b);
blast:=b;
m:=2;
read(f1,b)
end;

end
else begin
if (m=1) then begin
if k=1 then write(d1,b)
else write(d2,b);
blast:=b;
read(f2,b);
while (b>blast)and((not eof(f1))and(not eof(f2))) do begin
if k=1 then begin write(d1,b);blast:=b; read(f2,b); end
else begin write(d2,b); blast:=b; read(f2,b); end;
end;

end
else begin
if k=1 then write(d1,a)
else write(d2,a);
alast:=a;
read(f1,a);
while (a>alast)and((not eof(f1))and(not eof(f2))) do begin
if k=1 then begin write(d1,a);alast:=a; read(f1,a); end
else begin write(d2,b); blast:=b; read(f1,a); end;
end;

end;


fl:=true;
end;

end;

if not eof(f1) then begin
while not eof(f1) do begin
read(f1,x);
if k=1 then write(d1,x)
else write(d2,x);
end;
end;
if not eof(f2) then begin
while not eof(f2) do begin
read(f2,x);
if k=1 then write(d1,x)
else write(d2,x);
end;
end;



reset(d2);
if eof(d2) then prov:=1 //файл отсортирован!
else prov:=2;
close(f1);
rewrite(f1);
close(f1);
close(f2);
rewrite(f2);
close(f2);
close(d1);
close(d2);
end;
nicklifs вне форума Ответить с цитированием
Старый 15.12.2011, 12:15   #2
nicklifs
Пользователь
 
Регистрация: 10.12.2011
Сообщений: 32
По умолчанию

помогите искправить ошибки, слияние происходит по серия(некое кол-во чисел по возрастанию) из f1,f2 в d1, d2
nicklifs вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедура считывания из файла Black_butterfly Помощь студентам 0 29.05.2011 16:51
Функция обьединения двух посортованых файлов в третий методом слияния.. eva.t Паскаль, Turbo Pascal, PascalABC.NET 0 06.06.2010 02:39
Процедура выдачи из файла grafgrial Общие вопросы Delphi 4 16.05.2010 00:34
Процедура поиска нескольких файлов одновременно GvR Общие вопросы Delphi 3 15.11.2009 02:43
Программа для слияния файлов и просчёта суммы Харуми-тян Общие вопросы .NET 9 07.02.2009 17:05