- •Отчет по лабораторной работе № 7
- •Ввод записей из текстового файла
- •Петренко а.С. 15 5 1980 украинец 1977 м
- •Петренко а.С. 15 5 1980 украинец 1977 м
- •Пример выполнения задания
- •11.Об использовании кодификаторов.
- •{ Создание, печать, коррекция и обработка архива сведений }
- •SignSort : boolean; { признак сортировки архива } Reply : char; { символ нажатой клавиши } Product : ProductType;{ компонент архива }
- •Var k : word;
- •Пример выполнения задания
- •FileOut { архивный файл изделий}
- •Разработка многомодульной программы
- •Interface
- •Implementation
- •Interface
- •St : StringAr; { строка для печати таблиц }
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
Пример выполнения задания
В программе Labor8вместо обрабатываемого массива используется очередь, компонентами которой являются записи типаDynProduct. ЗаписьDynProductразделена на две части: информационнуюInfи указательNext. Информационная частьInfцеликом совпадает с записью типаProductType. Для работы с очередью используются три глобальных указателя:Lp,RpиRunтипаPointerProduct. УказателиLpиRpопределяют адреса левого и правого элементов очереди, указательRunиспользуется в основном для перебора компонентов очереди.
Выбор очереди вместо стека продиктован следующими соображениями. В различных режимах работы программы нужно читать записи из архивного файла, формируя при этом линейный список. Если в роли списка использовать стек, то в нем элементы будут расположены в обратном порядке по сравнению с архивом. В частности, если в архиве записи сгруппированы по возрастанию кода изделия, то в стеке они будут расположены по уменьшению этого кода. Это требует периодически выполнять операцию реверсирования стека, что не всегда удобно. В то же время очередь лишена указанного недостатка: порядок расположения ее элементов совпадает с порядком расположения записей в архивном файле.
В программе Labor8 предусмотрены те же режимы работы, что и в программеLabor7. По сравнению с предыдущей программой в Labor8 внесено ряд изменений, описанных ниже.
Вместо массива записей Products используется очередь с типом указателяPointerProduct.
Удалена процедура SearchArchive, так как бинарный поиск в очереди не реализуется. В связи с этим изъяты также переменнаяSignSort и фрагменты программы, где эта переменная используется.
Добавлена процедура DisposeProduct для удаления очереди.
Изменены тексты процедур ReadFileOut, WriteFileOut, SortArchive, AddArchive, DeleteArchive, ChangeArchive, WorkUpArchive, что связано с заменой массива записей на очередь записей. Суть выполненных изменений достаточно ясна из текста соответствующих процедур.
Все другие процедуры и функции остались без изменения. В приведенном ниже тексте программы 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; { файл результатов }