Консультация # 196680: Здравствуйте! Прошу помощи в следующем вопросе: Разработать алгоритм сортировки естественным слиянием. Отсортировать с помощью него массив. Pascal...
const
n0:string='inpData.dat';
n1:string='File1st.dat';
n2:string='File2nd.dat';
a:array[1..16]of integer=(59,30,99,28,27,87,65,98,25,29,92,88,73,84,81,41);
type
tF=file of integer;
var
f0,f1,f2:tF;{}
a1,a2:integer;{}
b:boolean;
c1,c2:integer;{}
begin
assign(f0,n0);assign(f1,n1);assign(f2,n2);
rewrite(f0);
for c1:=1 to 16 do write(f0,a[c1]);
close(f0);
repeat
reset(f0);rewrite(f1);rewrite(f2);
read(f0,a1,a2);b:=true;
repeat
if b then write(f1,a1) else write(f2,a1);
if a1>a2 then b:= not b;
a1:=a2;
read(f0,a2);
until EOF(f0);
if b then write(f1,a1) else write(f2,a1);
if a1>a2 then b:=not b;
if b then write(f1,a2) else write(f2,a2);
close(f0);close(f1);close(f2);
{}
writeln('control output before sort:');
reset(f0);reset(f1);reset(f2);
write(FileSize(f0):6,' ':3);while not EOF(f0)do begin read(f0,a1);write(a1:3)end;writeln;
write(FileSize(f1):6,' ':3);while not EOF(f1)do begin read(f1,a1);write(a1:3)end;writeln;
write(FileSize(f2):6,' ':3);while not EOF(f2)do begin read(f2,a1);write(a1:3)end;writeln;
c1:=FileSize(f1);c2:=FileSize(f2);
close(f0);close(f1);close(f2);
if(c1<>0)and(c2<>0)then
begin
rewrite(f0);reset(f1);reset(f2);
while(not EOF(f1))and(not EOF(f2))do
begin
c1:=-32768;c2:=-32768;
read(f1,a1);read(f2,a2);
while(c1<=a1)and(c2<=a2)and(not EOF(f1))and(not EOF(f2))do
if a1<=a2 then
begin
write(f0,a1);
c1:=a1;
read(f1,a1)
end
else
begin
write(f0,a2);
c2:=a2;
read(f2,a2)
end;
while(c1<=a1)and(not EOF(f1))do
begin
write(f0,a1);
c1:=a1;
read(f1,a1)
end;
while(c2<=a2)and(not EOF(f2))do
begin
write(f0,a2);
c2:=a2;
read(f2,a2)
end;
while not EOF(f1)do
begin
write(f0,a1);
read(f1,a1)
end;
while not EOF(f2)do
begin
write(f0,a2);
read(f2,a2)
end;
if a1<=a2 then write(f0,a1,a2)
else write(f0,a2,a1);
end;
close(f0);close(f1);close(f2);
reset(f0);reset(f1);reset(f2);
writeln('control output after sort');
write(FileSize(f0):6,' ':3);while not EOF(f0)do begin read(f0,a1);write(a1:3)end;writeln;
write(FileSize(f1):6,' ':3);while not EOF(f1)do begin read(f1,a1);write(a1:3)end;writeln;
write(FileSize(f2):6,' ':3);while not EOF(f2)do begin read(f2,a1);write(a1:3)end;writeln;
c1:=FileSize(f1);c2:=FileSize(f2);
close(f0);close(f1);close(f2);
end
until(c1=0)or(c2=0);
end.
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались.
Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора -
для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение.
Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал,
который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом.
Заходите - у нас интересно!