Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Turbo Pascal / Stud_1_2 / Part4 / text4.doc
Скачиваний:
99
Добавлен:
03.03.2016
Размер:
597.5 Кб
Скачать

Пример выполнения задания

В программе Labor8вместо обрабатываемого массива используется очередь, компонентами которой являются записи типаDynProduct. ЗаписьDynProductразделена на две части: информационнуюInfи указательNext. Информационная частьInfцеликом совпадает с записью типаProductType. Для работы с очередью используются три глобальных указателя:Lp,RpиRunтипаPointerProduct. УказателиLpиRpопределяют адреса левого и правого элементов очереди, указательRunиспользуется в основном для перебора компонентов очереди.

Выбор очереди вместо стека продиктован следующими соображениями. В различных режимах работы программы нужно читать записи из архивного файла, формируя при этом линейный список. Если в роли списка использовать стек, то в нем элементы будут расположены в обратном порядке по сравнению с архивом. В частности, если в архиве записи сгруппированы по возрастанию кода изделия, то в стеке они будут расположены по уменьшению этого кода. Это требует периодически выполнять операцию реверсирования стека, что не всегда удобно. В то же время очередь лишена указанного недостатка: порядок расположения ее элементов совпадает с порядком расположения записей в архивном файле.

В программе Labor8 предусмотрены те же режимы работы, что и в программеLabor7. По сравнению с предыдущей программой в Labor8 внесено ряд изменений, описанных ниже.

  1. Вместо массива записей Products используется очередь с типом указателяPointerProduct.

  2. Удалена процедура SearchArchive, так как бинарный поиск в очереди не реализуется. В связи с этим изъяты также переменнаяSignSort и фрагменты программы, где эта переменная используется.

  3. Добавлена процедура DisposeProduct для удаления очереди.

  4. Изменены тексты процедур ReadFileOut, WriteFileOut, SortArchive, AddArchive, DeleteArchive, ChangeArchive, WorkUpArchive, что связано с заменой массива записей на очередь записей. Суть выполненных изменений достаточно ясна из текста соответствующих процедур.

  5. Все другие процедуры и функции остались без изменения. В приведенном ниже тексте программы Labor8 для этих процедур и функций указаны лишь их имена.

Текст программы Labor8 :

Program Labor8;

{ Создание, печать, коррекция и обработка архива сведений }

{ о продукции, которая выпускается цехами предприятия }

Uses Crt,Printer;

Const

MaxKodif = 50; { макс.кол-во компонент кодификатора }

Enter = 13; { код клавиши Enter }

PressKey = 'Нажмите клавишу ENTER';

Type

ProductType = record { тип компонента архива }

NumberShop : byte; { номер цеха }

Kod : longint; { код изделия }

Dimens : string[5]; { единица измерения }

Price : real; { цена изделия }

Plan, { план выпуска по полугодиям }

Fact { факт.выпуск по полугодиям }

: array[1..2] of real;

end;

PointerProduct = ^DynProduct;

DynProduct = record

Inf : ProductType;

Next : PointerProduct;

end;

KodIfType = record { тип компонента кодификатора }

Kod : longint; { код изделия }

Name : string[35]; { наименование изделия }

end;

KodifAr = array[1..MaxKodif] of KodifType;

string80 = string[80];

StringAr = array[1..10] of string80;

Var

np : word; { количество компонентов архива }

nk, { количество компонентов кодификатора }

KeyRegime, { ключ выбора режима работы }

Device : byte; { устройство вывода результатов: }

{ 0 – экран; 1 – экран и магн.диск; }

{ 2 – экран и принтер }

SignArchive : boolean; { признак создания архива }

Reply : char; { символ ответа на запрос программы }

Product : ProductType; { компонент архива }

Lp,Rp, { левый и правый указатели очереди }

Run : PointerProduct; { текущий указатель очереди записей }

Kodif : KodIfType; { компонент кодификатора }

Kodifs : KodIfAr; { массив компонентов кодификатора }

St : StringAr; { строки для печати таблиц }

FileInput, { файл входных документов }

FileAdd, { файл добавляемых документов }

FileKodif, { файл кодификатора изделий }

FileRes : text; { файл результатов }

Соседние файлы в папке Part4