Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
19
Добавлен:
28.06.2014
Размер:
5.99 Кб
Скачать
{define debug}
program uMergeSort;
uses crt;

{‘®авЁа®ўЄ  ҐбвҐб⢥­­л¬ б«Ёп­ЁҐ¬.}
Type
TItem = record {Ѓ §®ўл© вЁЇ Ё бў®©бвў®}
key: integer;
end;
Ftape = file of Titem; {” ©« нв®Ј® вЁЇ }
var f1, f2, f: Ftape; {’аЁ д ©« . 2 ўаҐ¬Ґ­­ле Ё ®б­®ў­®©}
fi1, fi2, fi: string; {ЏҐаҐ¬Ґ­­лҐ ¤«п ў­Ґи­Ёе  ¤аҐб®ў д ©«®ў}
buf, buf1: titem; {2 ЎгддҐа­лҐ ЇҐаҐ¬Ґ­­лҐ}
k, ext: boolean; {2 Є«оз  ¤«п ўл室 }

{”г­ЄжЁп, ўлзЁб«пой п а §¬Ґа д ©« . ‚室­®Ґ ¤ ­­®Ґ -  ¤аҐб д ©« }
function sizefile(str: string): integer;
var i: integer;
f: ftape;
j: titem;
begin
assign(f, str);
reset(f);
i:=0;
while not eof(f) do
begin
read(f, j);
i:=i+1;
end;
sizefile:=i;
close(f);
end;

{”г­ЄжЁп, ўлў®¤пй п д ©«. ‚室­®Ґ ¤ ­­®Ґ -  ¤аҐб д ©« }
procedure writefile(str: string);
var f: ftape;
buf: titem;
begin
assign(f, str);
reset(f);
if not eof(f) then
repeat
read(f, buf);
write(buf.key, ' ');
until eof(f);
close(f);
readln;
end;

{Џа®жҐ¤га  б®§¤ ­Ёп д ©«  f}
procedure CreateF;
var i: integer;
arr: array[1..20] of titem;
buf: titem;
begin
rewrite(f);
{arr[1].key:=3;
arr[2].key:=2;
arr[3].key:= 5;
arr[4].key:= 11;
arr[5].key:=7;
arr[6].key:= 13;
arr[7].key:= 19;
arr[8].key:= 17;
arr[9].key:= 23;
arr[10].key:= 31;
arr[11].key:= 29;
arr[12].key:= 37;
arr[13].key:= 43;
arr[14].key:=41;
arr[15].key:=47;
arr[16].key:=59;
arr[17].key:=57;
arr[18].key:=61;
arr[19].key:=71;
arr[20].key:=67;
}
arr[1].key:=17;;
arr[2].key:= 19;
arr[3].key:= 13;
arr[4].key:= 57;
arr[5].key:= 23;
arr[6].key:= 29;
arr[7].key:= 11;
arr[8].key:= 59;
arr[9].key:= 31;
arr[10].key:= 37;
arr[11].key:= 7;
arr[12].key:= 61;
arr[13].key:= 41;
arr[14].key:= 43;
arr[15].key:= 5;
arr[16].key:= 67;
arr[17].key:= 47;
arr[18].key:= 71;
arr[19].key:= 2;
arr[20].key:= 3;
for i:= 1 to 20 do
begin
{arr[i].key:=random(20);}
write(f, arr[i]);
end;
end;

begin
fi1:='f:\Tpascal\2semestr\laba6\f1.txt'; {‡ ЇЁблў Ґ¬  ¤аҐб  д ©«®ў}
fi2:='f:\Tpascal\2semestr\laba6\f2.txt';
fi:='f:\Tpascal\2semestr\laba6\f.txt';
assign(f1, fi1); assign(f2, fi2); assign(f, fi);
CreateF; {‘®§¤ ­ЁҐ д ©«  f}
writeln('€б室­л© д ©« а §¬Ґа  ', sizefile(fi), ' § ЇЁбҐ©');
writefile(fi); {Ё ҐЈ® ўлў®¤}
repeat {Џ®ўв®а塞 ®ЇаҐ¤ жЁо ¤Ґ«Ґ­Ёп Ё б«Ёп­Ёп}
rewrite(f1); rewrite(f2); reset(f);
if not eof(f) then {„Ґ«Ґ­ЁҐ}
begin
read(f, buf);
write(f1, buf);
end;
while not eof(f) do
begin
repeat
buf1:=buf;
read(f, buf);
k:=buf1.key<=buf.key;
IF k THEN
write(f1, buf)
else
write(f2, buf);
until eof(f) or (not k);
if not eof(f) then
repeat
buf1:=buf;
read(f, buf);
k:=buf1.key<=buf.key;
IF k THEN
write(f2, buf)
else
write(f1, buf);
until eof(f) or (not k);
end;
ext:= (sizefile(fi1) > 0) and (sizefile(fi2)>0); {ЏҐаҐ¬Ґ­­ п, Є®­ва®«Ёагой п ўл室 Ё§ жЁЄ« }
{$ifdef debug}
writeln('f1');
writefile(fi1); {‚лў®¤ ўаҐ¬Ґ­­ле д ©«®ў ў ०Ё¬Ґ ®в« ¤ЄЁ}
writeln('f2');
writefile(fi2);
writeLN('‘®ЎЁа Ґ¬ ');
{$endif}
rewrite(f); reset(f1); reset(f2); {‘«ЁҐп­ЁҐ}
if ext then
begin
if not eof(f1) and not eof(f2) then
begin
Read(f1, buf);
Read(f2,buf1);
While (not EOF(f1)) and (not EOF(f2)) do
begin
If (buf.key<=buf1.key) then
begin
Write(f,buf);
Read(f1,buf);
End
else
begin
Write(f,buf1);
Read(f2,buf1);
End;
End;
if eof(f1) then {‚ buf Ё buf1 «Ґ¦ в ЇҐаҐ¬Ґ­­лҐ.}
begin
k:=false; {…б«Ё ваг в® ¤®Ў ў«Ґ­ buf}
while not k do
begin
if (buf1.key<buf.key) and (not eof(f2)) then
begin
write(f, buf1);
read(f2, buf1);
end
else
begin
if eof(f2) then
begin
if buf1.key > buf.key then
write(f, buf, buf1)
else
write(f, buf1, buf);
k:=true;
end
else {‡­ зЁв ¬л ¤®«¦­л ЇЁб вм buf1}
begin
write(f, buf);
write(f, buf1);
k:=true;
repeat
read(f2, buf1);
write(f, buf1)
until(eof(f2));
end
end
end
end
else
if eof(f2) then
begin
k:=false; {…б«Ё ваг в® ¤®Ў ў«Ґ­ buf1}
while not k do
begin
if (buf.key<buf1.key) and (not eof(f1)) then
begin
write(f, buf);
read(f1, buf);
end
else
begin
if eof(f1) then
begin
if buf.key > buf1.key then
write(f, buf1, buf)
else
write(f, buf, buf1);
k:=true;
end
else {‡­ зЁв ¬л ¤®«¦­л ЇЁб вм buf1}
begin
write(f, buf1);
write(f, buf);
k:=true;
repeat
read(f1, buf);
write(f, buf)
until(eof(f1));
end
end
end
end
else {ЋЎ  д ©«  Є®­зЁ«Ёбм}
if buf.key > buf1.key then
write(f, buf1, buf)
else
write(f, buf, buf1);
end;
end
else
if sizefile(fi1) = 0 then
repeat
read(f2, buf1);
write(f, buf1);
until(eof(f2))
else
repeat
read(f1, buf);
write(f, buf);
until(eof(f1));
close(f); close(f1); close(f2);
{$ifdef debug}
writefile(fi);
{$endif}
until not ext;
writeln('Џ®«г祭­л© д ©« а §¬Ґа  ', sizefile(fi), ' § ЇЁбҐ©');
writefile(fi);
writeln('ѓ®в®ў®');
readln;
end.
Соседние файлы в папке laba6