
15. Структура программ в d Pascal
Программы в D Pascal могут включать разделы определяющие константы и типы для использования в программе. Они также могут определять и использовать функции примерно в таким же способом, как и процедуры. Они могут обрабатывать файлы, которые созданы иными программами, или готовить файлы для других программ. Эти возможности создают удобство использования и являются вкладом в хороший стиль программирования документированием и локализацией значения программ.
Программы CF Pascal состоят из заголовка, объявления переменных, объявления процедур и тела программы. D Pascal богаче чем CF Pascal и содержит дополнительные возможности как внешние файлы, константы, типы и функции, и это отражает его структура программы. В D Pascal <заголовок программы> и <блок> могут содержать больше элементов, чем в CF Pascal. Синтаксис D Pascal следующий:
<программа> ::= <заголовок программы>; <блок>.
<заголовок программы> ::= PROGRAM <идентификатор> (<список идентификаторов>);
<список идентификаторов> ::= <список идентификаторов>, <идентификатор> |
<блок> ::= <раздел объявления констант><раздел объявления типов>
<раздел объявления переменных>
<раздел объявления процедур и функций><оператор BEGIN>
<раздел объявления переменных> ::= VAR <объявления переменных>; |
<объявления переменных> ::= <объявления переменных>, <объявление переменной>
| <объявление переменной>
<объявление переменной> ::= <список идентификаторов> : <обозначение типа>
Порядок этих частей очень жесткий, но он легко запоминается из требования Паскаля объявлять идентификаторы до использования. Идентификаторы констант, которые объявляются в разделе объявлений констант и могут быть использованы в объявлении диапазонов в разделе объявления типов, объявляются перед типами. Аналогично, объявления переменных должны появиться до использования переменных в процедурах, а процедуры должны быть объявлены до того как они могут быть вызваны в операторе BEGIN.
15.1. Внешние файлы.
Файлы, которые существуют за пределами времени выполнения программы, могут быть использованы для создания программных систем, взаимодействия между Паскаль-программами и другими частями компьютерной системы.
Файлы могут иметь время жизни, как и другие переменные в Паскале, которое определяется временем выполнения программы или временем жизни соответствующего блока, но они могут также продолжать существовать за пределами выполнения программы. Если файловая переменная появляется в заголовке программы, (с INPUT и OUTPUT), файл называется внешним. Содержимое внешнего файла может читаться и записываться Паскаль-программой, но файл может существовать до начала выполнения программы и оставаться после завершения выполнения. Например, в программе
PROGRAM FileProcess(INPUT, OUTPUT, ExtFile);
VAR
IntFile, ExtFile: TEXT;
BEGIN
…
END.
Содержимое файла ExtFile может существовать до выполнения FileProcess и оставаться после выполнения, а содержимое IntFile должно быть создано в FileProcess и будет уничтожено при завершении выполнения. Каждая Паскаль-машина имеет различные способы связывания внешних файлов с именами в файловой системе. Часто идентификатор задает используемое имя, но это может быть и не так из-за ограничений за пределами Паскаль-машины.
Внешние файлы могут иметь три разных варианта использования: ввод – предоставление данных программе извне, вывод – сохранение данных, подготовленных данной программой другим программам и изменение – предоставление данных программе для изменения с целью дальнейшего использования.
Например, файл может быть использован для накопления записей студентов, регистрирующихся на учебный курс. Предположим, стандартный входной файл INPUT содержит имена всех студентов зарегистрировавшихся сегодня, а Students содержит имена зарегистрировавшихся ранее студентов в алфавитном порядке. Следующий раздел проекта показывает, какие требуются обработки.
PROGRAM Register(INPUT, OUTPUT, Students);
{добавляет имена в INPUT в Students и сообщает
о дублировании имен в OUTPUT}
VAR
Students, Temp1, Temp2: TEXT;
BEGIN {Register}
{Копировать INPUT в Temp1}
{сортировать имена в Temp1}
{соединить Temp1 и Students в Temp2 –
если имя существует в обоих файлах,
послать в OUTPUT и не дублировать в Temp2}
{копировать Temp2 в Students}
END. {Register}
Temp1 и Temp2 – внутренние файлы, которые уничтожаются при завершении выполнения. Student изменяется и будет использован этой же программой позднее.
Внешние файлы D Pascal обеспечивают возможность создания, не просто одиночных программ, а программных систем, где программы обмениваются информацией через внешние файлы. Например, другая программа может распечатывать файл Students, скажем, как в следующем разделе проекта:
PROGRAM PrintRegistered(INPUT, OUTPUT, Students);
{печатает имена в Students в OUTPUT}
VAR
Students: TEXT;
BEGIN {PrintRegistered}
{Копировать и форматировать имена из Students в OUTPUT}
END. {PrintRegistered}
Программные системы, как и программы, требуют тщательного проектирования, но здесь структурами данных являются внешние файлы и элементарными операциями являются действия программ в системе. В приложениях обработки данных, лицо проектирующее программные системы, но не обязательно программы в них входящие, называется системным аналитиком.