Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторные работы_2 / Спецификации / Лабораторная работа 6

.doc
Скачиваний:
17
Добавлен:
28.06.2014
Размер:
42.5 Кб
Скачать

Лабораторная работа № 6

«Внешняя сортировка»

Захаров Антон

группа А–13–08

  1. Условие задачи.

Программу NaturalMerge перевести в Турбо Паскаль, сделав ее работоспособной в Турбо среде:

- избавиться от буферной переменной, реализуя “заглядывание вперед”;

- задать внешние имена для файлов;

Исправить некорректность программы, вызванную принятым Допущением.

  1. Входные данные.

Входная форма:

fin

<key> <key>…<key>


конец файла

  1. Выходные данные.

{Пересылка элемента из х в y}

procedure Copy (var x,y:tape);

var buf:item;

begin

read(x,buf);

write(y,buf);

if eof(x) then

eor:=true

else {Заглядывание вперед}

eor:=buf.key > x^.key;

end;

{Перепись одной серии из x в y}

procedure CopyRun (var x,y:tape);

begin

repeat

Copy (x,y)

until eof;

end;

{из  с  в  а  и  в}

procedure Distribute;

begin

repeat

Copyrun (c,a);

if not eof (c) then

Copyrun (c,b)

until eof(c);

end;

{Слияние серий из а и b в с}

procedure MergeRun;

begin

repeat

if a^.key<b^.key then

begin

Copy (a,c);

if eof then

CopyRun (b,c)

end

else

begin

Copy(b,c);

if eor then

CopyRun(a,c)

end

until eof;

end;

{ из  а  и  в  в  с .}

procedure Merge;

begin

repeat

MergeRun;

l:=l+1;

until not eof(a);

if not eof(a) then

begin

CopyRun(a,c);

l:=l+1;

end

end;

{Сортировка естественным слиянием}

procedure NaturalMerge;

var l : integer; {Количество серий}

a, b : tape;

begin .

repeat

rewrite (a);

rewrite (b);

reset (c);

Distribute; {распределение}

l:=0;

Merge; {слияние}

until l=1;

end;