





  УТВЕРЖДЕН

   ЩИ1.700.016 ПО.04-01 35





                                  
                                  

                                  

                                  
                              ПАСКАЛЬ

                                  

                           ОПИСАНИЕ ЯЗЫКА
                      ТОМ 5  КНИГА 4  ЧАСТЬ 1


                       ЩИ1.700.016 ПО.04-01 35

                             ЛИСТОВ 47

























                                1982
                                                         ЛИТЕРА   






                               CTP. 2 

                      
ЩИ1.700.016 ПО.04-01 35






                            1. АННОТАЦИЯ




       В ДАННОМ ДОКУМЕНТЕ ПРИВЕДЕНО ОПИСАНИЕ ЯЗЫКА ВЫСОКОГО  УРОВНЯ
  - ПАСКАЛЬ. ОПИСАНИЕ СОПРОВОЖДАЕТСЯ ПРИМЕРАМИ. ЗА ОСНОВУ  ОПИСАНИЯ
  ВЗЯТ ДОКУМЕНТ K.JENSEN,N.WIRTH "PASCAL USER  MANUAL  AND  REPORT"
  (1978), КОТОРЫЙ МОЖНО РАССМАТРИВАТЬ В КАЧЕСТВЕ СТАНДАРТА НА  ЯЗЫК
  ПАСКАЛЬ.












































                               CTP. 3 

                      
ЩИ1.700.016 ПО.04-01 35






                             СОДЕРЖАНИЕ



  1.   АННОТАЦИЯ   .............................................  2


  2.  ОБЩИЕ СВЕДЕНИЯ............................................  5


  3.  СПОСОБ ОПИСАНИЯ ЯЗЫКА.....................................  9


  4.  ЭЛЕМЕНТЫ И ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА..................... 10


  5.  ЭЛЕМЕНТЫ И ВВОД/ВЫВОД ДАННЫХ.............................. 11

  5.1.   ОПРЕДЕЛЕНИЯ КОНСТАНТ................................... 11
  5.2.   ОПРЕДЕЛЕНИЯ ТИПОВ ДАННЫХ............................... 11
  5.2.1.   ПРОСТЫЕ ТИПЫ......................................... 12
  5.2.1.1. СКАЛЯРНЫЕ ТИПЫ....................................... 12
  5.2.1.2. СТАНДАРТНЫЕ СКАЛЯРНЫЕ ТИПЫ........................... 12
  5.2.1.3. ОТРЕЗКИ ТИПОВ........................................ 13
  5.2.2.   СТРУКТУРНЫЕ ТИПЫ..................................... 13
  5.2.2.1. ТИПЫ МАССИВОВ........................................ 14
  5.2.2.2. ТИПЫ ЗАПИСЕЙ......................................... 14
  5.2.2.3. ТИПЫ МНОЖЕСТВ........................................ 15
  5.2.2.4. ТИПЫ ФАЙЛОВ.......................................... 16
  5.2.3.   ТИПЫ УКАЗАТЕЛЕЙ...................................... 16
  5.3.   ОПИСАНИЕ И ИЗОБРАЖЕНИЕ ПЕРЕМЕННЫХ...................... 17
  5.3.1.   ПОЛНЫЕ ПЕРЕМЕННЫЕ.................................... 18
  5.3.2.   КОМПОНЕНТНЫЕ ПЕРЕМЕННЫЕ.............................. 18
  5.3.2.1. ПЕРЕМЕННЫЕ С ИНДЕКСАМИ............................... 18
  5.3.2.2. УКАЗАТЕЛИ ПОЛЕЙ...................................... 19
  5.3.2.3. БУФЕРЫ ФАЙЛОВ........................................ 19
  5.3.3.   УКАЗУЕМЫЕ ПЕРЕМЕННЫЕ................................. 19

  6.  ВЫРАЖЕНИЯ................................................. 20

  6.1.   ОПЕРАЦИЯ ОТРИЦАНИЯ..................................... 21
  6.2.   ОПЕРАЦИИ ТИПА УМНОЖЕНИЯ................................ 21
  6.3.   ОПЕРАЦИИ ТИПА СЛОЖЕНИЯ................................. 21
  6.4.   ЛОГИЧЕСКИЕ ОПЕРАЦИИ С ЦЕЛЫМИ ЧИСЛАМИ................... 22
  6.5.   ЗНАКИ ОТНОШЕНИЙ........................................ 22
  6.6.   УКАЗАТЕЛИ ФУНКЦИИ...................................... 23
  6.7.   АДРЕСНЫЙ ОПЕРАТОР "@".................................. 23

  7.  ОПЕРАТОРЫ................................................. 24

  7.1.   ПРОСТЫЕ ОПЕРАТОРЫ...................................... 24
  7.1.1.   ОПЕРАТОРЫ ПРИСВАИВАНИЯ............................... 24
  7.1.2.   ОПЕРАТОРЫ ПРОЦЕДУР................................... 25
  7.1.3.   ОПЕРАТОРЫ ПЕРЕХОДА................................... 26
                               CTP. 4 

                      
ЩИ1.700.016 ПО.04-01 35


  7.1.4.   ПУСТОЙ ОПЕРАТОР...................................... 26
  7.2.   СТРУКТУРНЫЕ ОПЕРАТОРЫ.................................. 26
  7.2.1.   СОСТАВНЫЕ ОПЕРАТОРЫ.................................. 27
  7.2.2.   УСЛОВНЫЕ ОПЕРАТОРЫ................................... 27
  7.2.2.1. ОПЕРАТОР "IF"........................................ 27
  7.2.2.2. ОПЕРАТОР "CASE"...................................... 28
  7.2.3.   ЦИКЛЫ................................................ 29
  7.2.3.1. ОПЕРАТОР "WHILE"..................................... 29
  7.2.3.2. ОПЕРАТОР "REPEAT".................................... 30
  7.2.3.3. ОПЕРАТОР "FOR"....................................... 30
  7.2.3.4. ОПЕРАТОР EXIT........................................ 31
  7.2.4.   ОПЕРАТОР НАД ЗАПИСЯМИ "WITH"......................... 32

  8.  OПИСАНИЕ ПРОЦЕДУР......................................... 33

  8.1.   СТАНДАРТНЫЕ ПРОЦЕДУРЫ.................................. 35
  8.1.1.   ПРОЦЕДУРЫ РАБОТЫ С ФАЙЛАМИ........................... 35
  8.1.2.   ДОПОЛНИТЕЛЬНЫЕ АРГУМЕНТЫ ДЛЯ "RESET" И "REWRITE"..... 36
  8.1.3.   ПРОЦЕДУРА ДИНАМИЧЕСКОГО РАЗМЕЩЕНИЯ................... 37
  8.1.4.   ФАЙЛЫ ПРЯМОГО ДОСТУПА................................ 38
  8.2.   ПРОЦЕДУРЫ ВВОДА/ВЫВОДА................................. 38
  8.2.1.   ПРОЦЕДУРА READ....................................... 39
  8.2.2.   ПРОЦЕДУРА READLN..................................... 39
  8.2.3.   ПРОЦЕДУРА WRITE...................................... 39
  8.2.4.   ПРОЦЕДУРА WRITELN.................................... 40
  8.2.5.   ВВОД/ВЫВОД С ТЕРМИНАЛА............................... 41
  8.3.   КОНЕЦ ФАЙЛА............................................ 41

  9.  ОПИСАНИЯ ФУНКЦИЙ.......................................... 42

  9.1.   СТАНДАРТНЫЕ ФУНКЦИИ.................................... 43
  9.1.1.   АРИФМЕТИЧЕСКИЕ ФУНКЦИИ............................... 43
  9.1.2.   ПРЕДИКАТЫ............................................ 44
  9.1.3.   ФУНКЦИИ ПРЕОБРАЗОВАНИЯ............................... 44
  9.1.4.   ФУНКЦИЯ "TIME"....................................... 45
  9.1.5.   ПРОЧИЕ СТАНДАРТНЫЕ ФУНКЦИИ........................... 45

  10. ПРОГРАММЫ................................................. 46

  10.1.  ИСПОЛЬЗОВАНИЕ МАКРОАССЕМБЛЕРА.......................... 46
  10.2.  ВНЕШНИЕ И ФОРТРАНОВСКИЕ ПОДПРОГРАММЫ (ПРОЦЕДУРЫ)....... 47
      ЛИСТ РЕГИСТРАЦИИ ИЗМЕНЕНИЙ.............................
















                               CTP. 5 

                      
ЩИ1.700.016 ПО.04-01 35


                         2. ОБЩИЕ СВЕДЕНИЯ




       РАЗРАБОТКА ЯЗЫКА ПАСКАЛЬ  ПРЕСЛЕДОВАЛА  ДВЕ  ОСНОВНЫЕ  ЦЕЛИ.
  ПЕРВАЯ - ДАТЬ ЯЗЫК, ПРИГОДНЫЙ ДЛЯ ОБУЧЕНИЯ  ПРОГРАММИРОВАНИЮ  КАК
  СИСТЕМАТИЧЕСКОЙ ДИСЦИПЛИНЕ, ОСНОВАННОЙ  НА  РЯДЕ  ФУНДАМЕНТАЛЬНЫХ
  ПОНЯТИЙ, ЯСНО И ЕСТЕСТВЕННО ОТРАЖЕННЫХ В  ЭТОМ  ЯЗЫКЕ.  ВТОРАЯ  -
  ОСУЩЕСТВИТЬ РЕАЛИЗАЦИЮ ЭТОГО ЯЗЫКА, КОТОРАЯ БЫЛА БЫ НАДЕЖНА  И  В
  ТО ЖЕ ВРЕМЯ ЭФФЕКТИВНА НА СУЩЕСТВУЮЩИХ ВЫЧИСЛИТЕЛЬНЫХ MAШИНАХ.

       ДЛЯ ПРЕПОДАВАНИЯ ПРОГРАММИРОВАНИЯ ТРЕБОВАЛСЯ НОВЫЙ ЯЗЫК, ТАК
  КАК КОНСТРУКЦИИ И СВОЙСТВА ИСПОЛЬЗУЕМЫХ  РАНЕЕ  ЯЗЫКОВ  ЧАСТО  НЕ
  ПОДДАЮТСЯ УБЕДИТЕЛЬНОМУ И  ЛОГИЧЕСКОМУ  ОБ'ЯСНЕНИЮ.  ОНИ  СЛИШКОМ
  ЧАСТО НЕ СООТВЕТСТВУЮТ ПРИУЧЕННОМУ К СИСТЕМАТИЧЕСКОМУ РАССУЖДЕНИЮ
  МЫШЛЕНИЮ. К ЭТОМУ СЛЕДУЕТ ПРИСОЕДИНИТЬ УБЕЖДЕНИЕ,  ЧТО  ЯЗЫК,  НА
  КОТОРОМ  ОБУЧАЮТ  ВЫРАЖАТЬ   СВОИ   МЫСЛИ,   ОКАЗЫВАЕТ   ГЛУБОКОЕ
  ВОЗДЕЙСТВИЕ НА НАВЫКИ МЫШЛЕНИЯ И ИЗОБРЕТАТЕЛЬСКИЕ СПОСОБНОСТИ,  И
  ЧТО ЦАРЯЩИЙ  В  СУЩЕСТВУЮЩИХ  ЯЗЫКАХ  БЕСПОРЯДОК  НЕПОСРЕДСТВЕННО
  СКАЗЫВАЕТСЯ   НА   СТИЛЕ   ПРОГРАММИРОВАНИЯ,   ФОРМИРУЮЩЕМСЯ    У
  ОБУЧАЮЩИХСЯ.

       ЗА ОСНОВУ ДЛЯ ПАСКАЛЯ БЫЛ ВЗЯТ  АЛГОЛ-60,  ОТКУДА  В  ПЕРВУЮ
  ОЧЕРЕДЬ ЗАИМСТВОВАНЫ ПРИНЦИПЫ СТРУКТУРИРОВАНИЯ И ФОРМА ВЫРАЖЕНИЯ.

       ГЛАВНЫЕ ДОПОЛНЕНИЯ ПО СРАВНЕНИЮ  С  АЛГОЛОМ-60  ОТНОСЯТСЯ  К
  СПОСОБАМ  СТРУКТУРИРОВАНИЯ  ДАННЫХ,   ПОСКОЛЬКУ   НЕДОСТАТОЧНОСТЬ
  ПОСЛЕДНИХ   В   АЛГОЛЕ-60   БЫЛА   ПРИЗНАНА   ГЛАВНОЙ    ПРИЧИНОЙ
  ОТНОСИТЕЛЬНОЙ УЗОСТИ ОБЛАСТИ ЕГО ПРИМЕНЕНИЯ. ВВЕДЕНИЕ  ЗАПИСЕЙ  И
  ФАЙЛОВ СДЕЛАЛО ВОЗМОЖНЫМ РЕШАТЬ С  ПОМОЩЬЮ  ПАСКАЛЯ  КОММЕРЧЕСКИЕ
  ЗАДАЧИ ИЛИ ПО  КРАЙНЕЙ  МЕРЕ  ПОЗВОЛИЛО  УСПЕШНО  ДЕМОНСТРИРОВАТЬ
  ПОДОБНЫЕ ЗАДАЧИ В КУРСАХ ПРОГРАММИРАВАНИЯ.

       АЛГОРИТМЫ И ПРОГРАММЫ ВЫЧИСЛИТЕЛЬНОЙ МАШИНЫ СОСТОЯТ ИЗ  ДВУХ
  ЧАСТЕЙ: ОПИСАНИЯ ДЕЙСТВИЙ, КОТОРЫЕ ДОЛЖНЫ  БЫТЬ  ОСУЩЕСТВЛЕНЫ,  И
  ОПИСАНИЯ  ОБРАБАТЫВАЕМЫХ  ЭТИМИ   ДЕЙСТВИЯМИ   ДАННЫХ.   ДЕЙСТВИЯ
  ЗАДАЮТСЯ ТАК НАЗЫВАЕМЫМИ ОПЕРАТОРАМИ, А  ДАННЫЕ  -  ОПИСАНИЯМИ  И
  ОПРЕДЕЛЕНИЯМИ.

       ДАННЫЕ   ПРЕДСТАВЛЕНЫ    ЗНАЧЕНИЯМИ    ПЕРЕМЕННЫХ.    КАЖДАЯ
  ПЕРЕМЕННАЯ, ВХОДЯЩАЯ В НЕКОТОРЫЙ ОПЕРАТОР,  ДОЛЖНА  БЫТЬ  ВВЕДЕНА
  НЕКОТОРЫМ  ОПИСАНИЕМ   ПЕРЕМЕННОЙ,   КОТОРОЕ   ПРИПИСЫВАЕТ   ЭТОЙ
  ПЕРЕМЕННОЙ  ИДЕНТИФИКАТОР  И  ТИП  ДАННЫХ.  ИМЕННО   ТИП   ДАННЫХ
  ОПРЕДЕЛЯЕТ МНОЖЕСТВО ЗНАЧЕНИЙ,  КОТОРОЕ  МОЖЕТ  ПРИНИМАТЬ  ДАННАЯ
  ПЕРЕМЕННАЯ. В ПАСКАЛЕ ТИП МОЖЕТ БЫТЬ ЗАДАН ЛИБО ПРЯМО В  ОПИСАНИИ
  ПЕРЕМЕННОЙ, ЛИБО УКАЗАН ИДЕНТИФИКАТОРОМ ТИПА, В ПОСЛЕДНЕМ  СЛУЧАЕ
  ЭТОТ ИДЕНТИФИКАТОР ДОЛЖЕН БЫТЬ ВВЕДЕН ЯВНЫМ ОПРЕДЕЛЕНИЕМ ТИПА.

       БАЗИСНЫМИ ЯВЛЯЮТСЯ СКАЛЯРНЫЕ  ТИПЫ  ДАННЫХ.  ИХ  ОПРЕДЕЛЕНИЕ
  ЗАДАЕТ   УПОРЯДОЧЕННОЕ   МНОЖЕСТВО    ЗНАЧЕНИЙ,    Т.Е.    ВВОДИТ
  ИДЕНТИФИКАТОРЫ, ОБОЗНАЧАЮЩИЕ  КАЖДОЕ  ЗНАЧЕНИЕ  ЭТОГО  МНОЖЕСТВА.
  ПОМИМО СКАЛЯРНЫХ ТИПОВ, ВВОДИМЫХ ОПРЕДЕЛЕНИЯМИ, В ПАСКАЛЕ ИМЕЕТСЯ
  ЧЕТЫРЕ СТАНДАРТНЫХ СКАЛЯРНЫХ ТИПА:  ЛОГИЧЕСКИЙ  "BOOLEAN",  ЦЕЛЫЙ
  "INTEGER", ЛИТЕРНЫЙ "CHAR" И ВЕЩЕСТВЕННЫЙ "REAL".  ЗНАЧЕНИЯ  ЭТИХ
  ТИПОВ, КРОМЕ ЛОГИЧЕСКОГО,  ОБОЗНАЧАЮТСЯ  НЕ  ИДЕНТИФИКАТОРАМИ,  А
  ЧИСЛАМИ   И   ЗАКЛЮЧЕННЫМИ   В   КАВЫЧКИ   ЛИТЕРАЛАМИ,    КОТОРЫЕ
  СИНТАКСИЧЕСКИ  ОТЛИЧНЫ  ОТ  ИДЕНТИФИКАТОРОВ.  МНОЖЕСТВО  ЗНАЧЕНИЙ
                               CTP. 6 

                      
ЩИ1.700.016 ПО.04-01 35


  ЛИТЕРНОГО ТИПА -  ЭТО  МНОЖЕСТВО  ЛИТЕР,  ИМЕЮЩИХСЯ  НА  ПЕЧАТНОМ
  УСТРОЙСТВЕ ДАННОЙ УСТАНОВКИ (КОИ-7).

       ТИП МОЖНО ОПРЕДЕЛИТЬ КАК ОТРЕЗОК НЕКОТОРОГО СКАЛЯРНОГО  ТИПА
  - УКАЗАНИЕМ НАИМЕНЬШЕГО И НАИБОЛЬШЕГО ЗНАЧЕНИЙ ОТРЕЗКА.

       СТРУКТУРНЫЕ  ТИПЫ  ДАННЫХ  ОПРЕДЕЛЯЮТСЯ  ЗАДАНИЕМ  ТИПА   ИХ
  КОМПОНЕНТ И УКАЗАНИЕМ СПОСОБА  ОРГАНИЗАЦИИ.  СПОСОБЫ  ОРГАНИЗАЦИИ
  ОТЛИЧАЮТСЯ МЕХАНИЗМОМ ИЗВЛЕЧЕНИЯ КОМПОНЕНТ ИЗ ПЕРЕМЕННОЙ СЛОЖНОГО
  ТИПА.  В  ПАСКАЛЕ  ИМЕЕТСЯ  ЧЕТЫРЕ  СПОСОБА  ОРГАНИЗАЦИИ  ДАННЫХ:
  МАССИВ, ЗАПИСЬ, МНОЖЕСТВО И ФАЙЛ.

       ПРИ ОРГАНИЗАЦИИ ДАННЫХ В МАССИВ ВСЕ КОМПОНЕНТЫ  ОТНОСЯТСЯ  К
  ОДНОМУ И ТОМУ ЖЕ ТИПУ. ОТДЕЛЬНАЯ КОМПОНЕНТА ВЫДЕЛЯЕТСЯ СЕЛЕКТОРОМ
  МАССИВА, ИЛИ ВЫЧИСЛЯЕМЫМ ИНДЕКСОМ,  ТИП  КОТОРОГО  УКАЗЫВАЕТСЯ  В
  ОПРЕДЕЛЕНИИ ТИПА МАССИВА. ТИП ИНДЕКСА ДОЛЖЕН БЫТЬ СКАЛЯРНЫМ.  КАК
  ПРАВИЛО, ЭТО ТИП, ОПРЕДЕЛЯЕМЫЙ ПРОГРАММИСТОМ, ИЛИ ОТРЕЗОК  ЦЕЛОГО
  ТИПА. ПО ЗНАЧЕНИЮ, ПРИНАДЛЕЖАЩЕМУ ТИПУ ИНДЕКСА, СЕЛЕКТОР  МАССИВА
  ВЫДАЕТ ЗНАЧЕНИЕ, ИМЕЮЩЕЕ ТИП КОМПОНЕНТ  МАССИВА.  ТАКИМ  ОБРАЗОМ,
  КАЖДАЯ ПЕРЕМЕННАЯ-МАССИВ МОЖЕТ  РАССМАТРИВАТЬСЯ  КАК  ОТОБРАЖЕНИЕ
  ТИПА ИНДЕКСА НА  ТИП  КОМПОНЕНТ.  ВРЕМЯ  ВЫБОРКИ  НЕ  ЗАВИСИТ  ОТ
  СЕЛЕКТОРА  (ИНДЕКСА),  ПОЭТОМУ  МАССИВЫ  НАЗЫВАЮТСЯ   СТРУКТУРАМИ
  ДАННЫХ С ПРОИЗВОЛЬНЫМ ДОСТУПОМ.

       ПРИ  ОРГАНИЗАЦИИ  ДАННЫХ  В  ЗАПИСЬ  КОМПОНЕНТЫ  (НАЗЫВАЕМЫЕ
  ПОЛЯМИ) МОГУТ БЫТЬ РАЗНОГО ТИПА. ЧТОБЫ ТИП ВЫБИРАЕМОЙ  КОМПОНЕНТЫ
  МОЖНО  БЫЛО  УСТАНОВИТЬ  ПРЯМО  ПО  ТЕКСТУ  ПРОГРАММЫ   (БЕЗ   ЕЕ
  ИСПОЛНЕНИЯ), СЕЛЕКТОРЫ ЗАПИСЕЙ НЕ СОДЕРЖАТ ВЫЧИСЛЯЕМЫХ  ЗНАЧЕНИЙ,
  А ЯВЛЯЮТСЯ ИДЕНТИФИКАТОРАМИ, ОДНОЗНАЧНО ОПРЕДЕЛЯЮЩИМИ ИЗВЛЕКАЕМУЮ
  КОМПОНЕНТУ. ЭТИ ИДЕНТИФИКАТОРЫ  ОПИСЫВАЮТСЯ  В  ОПРЕДЕЛЕНИИ  ТИПА
  ЗАПИСИ, ПОЭТОМУ ВРЕМЯ ДОСТУПА К ВЫБИРАЕМОЙ КОМПОНЕНТЕ НЕ  ЗАВИСИТ
  ОТ СЕЛЕКТОРА, И, СЛЕДОВАТЕЛЬНО, ЗАПИСИ ТАКЖЕ ЯВЛЯЮТСЯ СТРУКТУРАМИ
  С ПРОИЗВОЛЬНЫМ ДОСТУПОМ.

       МОЖЕТ БЫТЬ УКАЗАНО, ЧТО ТИП  ЗАПИСИ  СОСТОИТ  ИЗ  НЕСКОЛЬКИХ
  ВАРИАНТОВ. ЭТО ЗНАЧИТ, ЧТО РАЗЛИЧНЫЕ ПЕРЕМЕННЫЕ ОДНОГО И ТОГО  ЖЕ
  ТИПА МОГУТ ИМЕТЬ  ЗНАЧЕНИЯМИ  ОПРЕДЕЛЕННЫМ  ОБРАЗОМ  ОТЛИЧАЮЩИЕСЯ
  ЗАПИСИ. РАЗЛИЧИЯ МОГУТ КАСАТЬСЯ ЧИСЛА И ТИПОВ КОМПОНЕНТ. ВАРИАНТ,
  ЯВЛЯЮЩИЙСЯ  ТЕКУЩИМ  ЗНАЧЕНИЕМ  ПЕРЕМЕННОЙ-ЗАПИСИ,  ОТМЕЧАЕТСЯ  В
  ОБЩЕМ ДЛЯ ВСЕХ ВАРИАНТОВ ПОЛЕ,  НАЗЫВАЕМЫМ  ПОЛЕМ  ПРИЗНАКА.  КАК
  ПРАВИЛО, ОБЩАЯ ВСЕМ ВАРИАНТАМ  ЧАСТЬ  БУДЕТ  СОДЕРЖАТЬ  НЕСКОЛЬКО
  КОМПОНЕНТ, ВКЛЮЧАЯ И ПОЛЕ ПРИЗНАКА.

       ОРГАНИЗАЦИЯ  ДАННЫХ  ВО   МНОЖЕСТВЕ   ОПРЕДЕЛЯЕТ   МНОЖЕСТВО
  ЗНАЧЕНИЙ, ЯВЛЯЮЩИХСЯ МНОЖЕСТВОМ-СТЕПЕНЬЮ БАЗОВОГО  ТИПА.  БАЗОВЫЙ
  ТИП  ДОЛЖЕН  БЫТЬ  СКАЛЯРНЫМ  И  ОПРЕДЕЛЯТЬСЯ  ПРОГРАММИСТОМ  ИЛИ
  ПРЕДСТАВЛЯТЬ СОБОЙ ОТРЕЗОК ЦЕЛОГО ТИПА.

       ФАЙЛ -  ЭТО  ПОСЛЕДОВАТЕЛЬНОСТЬ  ОДНОТИПНЫХ  КОМПОНЕНТ.  ОНА
  ОПРЕДЕЛЯЕТ ЕСТЕСТВЕННОЕ УПОРЯДОЧЕНИЕ КОМПОНЕНТ. В  КАЖДЫЙ  МОМЕНТ
  НЕПОСРЕДСТВЕННО ДОСТУПНА ТОЛЬКО ОДНА КОМПОНЕНТА. ДОСТУП К  ДРУГИМ
  КОМПОНЕНТАМ  МОЖНО  ПОЛУЧИТЬ   В   РЕЗУЛЬТАТЕ   ПОСЛЕДОВАТЕЛЬНОГО
  ПРОДВИЖЕНИЯ   ПО   ФАЙЛУ.   ФАЙЛ   ЗАПОЛНЯЕТСЯ   ПОСЛЕДОВАТЕЛЬНЫМ
  ПРИСОЕДИНЕНИЕМ НОВЫХ КОМПОНЕНТ К КОНЦУ  ФАЙЛА.  ОПРЕДЕЛЕНИЕ  ТИПА
  ФАЙЛА НЕ ЗАДАЕТ ЧИСЛА ЕГО КОМПОНЕНТ.

       ПЕРЕМЕННЫЕ,   ЗАДАННЫЕ   ЯВНЫМИ    ОПИСАНИЯМИ,    НАЗЫВАЮТСЯ
  СТАТИЧЕСКИМИ.   ОПИСАНИЕ   СВЯЗЫВАЕТ   С   ПЕРЕМЕННОЙ   НЕКОТОРЫЙ
                               CTP. 7 

                      
ЩИ1.700.016 ПО.04-01 35


  ИДЕНТИФИКАТОР,  ИСПОЛЬЗУЕМЫЙ  ДЛЯ  УКАЗАНИЯ  ЭТОЙ  ПЕРЕМЕННОЙ.  С
  ДРУГОЙ   СТОРОНЫ,   ПЕРЕМЕННЫЕ   МОГУТ   СОЗДАВАТЬСЯ    НЕКОТОРЫМ
  ОПЕРАТОРОМ. ПРИ ТАКОМ ДИНАМИЧЕСКОМ СОЗДАНИИ  ПЕРЕМЕННОЙ  ВЫДАЕТСЯ
  ТАК НАЗЫВАЕМЫЙ УКАЗАТЕЛЬ  (ЗАМЕНЯЮЩИЙ  ЯВНЫЙ  ИДЕНТИФИКАТОР).  ОН
  ИСПОЛЬЗУЕТСЯ ВПОСЛЕДСТВИИ ДЛЯ УКАЗАНИЯ НА ТАКУЮ ПЕРЕМЕННУЮ.  ЭТОТ
  УКАЗАТЕЛЬ МОЖЕТ БЫТЬ ПРИСВОЕН ПЕРЕМЕННЫМ ТИПА  УКАЗАТЕЛЬ.  КАЖДАЯ
  ПЕРЕМЕННАЯ-УКАЗАТЕЛЬ МОЖЕТ ПРИНИМАТЬ ТОЛЬКО ЗНАЧЕНИЯ,  ЯВЛЯЮЩИЕСЯ
  УКАЗАТЕЛЯМИ НА ЗНАЧЕНИЯ ОДНОГО И ТОГО ЖЕ ТИПА "Т";  ГОВОРЯТ,  ЧТО
  ОНА ЗАКРЕПЛЕНА ЗА ЭТИМ ТИПОМ "Т". ОНА  МОЖЕТ,  ВПРОЧЕМ,  ПОЛУЧИТЬ
  ТАКЖЕ  ЗНАЧЕНИЕ  "NIL",  КОТОРОЕ  НЕ  УКАЗЫВАЕТ   НИ   НА   КАКУЮ
  ПЕРЕМЕННУЮ.    ПОСКОЛЬКУ    ПЕРЕМЕННЫЕ-УКАЗАТЕЛИ    МОГУТ    БЫТЬ
  КОМПОНЕНТАМИ  СОЗДАВАЕМЫХ  ДИНАМИЧЕСКИХ  ПЕРЕМЕННЫХ   СТРУКТУРНЫХ
  ТИПОВ, ТО С ПОМОЩЬЮ  ЭТИХ  УКАЗАТЕЛЕЙ  МОЖНО  ПРЕДСТАВЛЯТЬ  ЛЮБЫЕ
  КОНЕЧНЫЕ ГРАФЫ.

       ОСНОВНЫМ ОПЕРАТОРОМ ЯВЛЯЕТСЯ ОПЕРАТОР ПРИСВАИВАНИЯ,  КОТОРЫЙ
  ПРИПИСЫВАЕТ ПРИСВОИТЬ ТОЛЬКО ЧТО ВЫЧИСЛЕННОЕ  ЗНАЧЕНИЕ  НЕКОТОРОЙ
  ПЕРЕМЕННОЙ  (ИЛИ  КОМПОНЕНТЕ  ПЕРЕМЕННОЙ).  ЗНАЧЕНИЕ  МОЖЕТ  БЫТЬ
  ПОЛУЧЕНО В РЕЗУЛЬТАТЕ ВЫЧИСЛЕНИЯ ВЫРАЖЕНИЯ. ВЫРАЖЕНИЯ СОСТОЯТ  ИЗ
  ПЕРЕМЕННЫХ,  КОНСТАНТ,  МНОЖЕСТВ,  ОПЕРАЦИЙ  И  ФУНКЦИЙ,  КОТОРЫЕ
  ВЫПОЛНЯЮТ ДЕЙСТВИЯ НАД ИЗОБРАЖЕННЫМИ ВЕЛИЧИНАМИ  И  ВЫДАЮТ  НОВЫЕ
  ЗНАЧЕНИЯ. ПЕРЕМЕННЫЕ, КОНСТАНТЫ  И  ФУНКЦИИ  ЛИБО  ОПИСЫВАЮТСЯ  В
  ПРОГРАММЕ, ЛИБО ЯВЛЯЮТСЯ СТАНДАРТНЫМИ ОБ'ЕКТАМИ. ПАСКАЛЬ СОДЕРЖИТ
  ФИКСИРОВАННЫЙ   НАБОР   ОПЕРАЦИЙ,   КАЖДАЯ   ИЗ   КОТОРЫХ   МОЖЕТ
  РАССМАТРИВАТЬСЯ  КАК  ОТОБРАЖЕНИЕ  ИЗ  ТИПОВ  ОПЕРАНДОВ   В   ТИП
  РЕЗУЛЬТАТА. ВСЕ ОПЕРАЦИИ ДЕЛЯТСЯ НА ЧЕТЫРЕ ГРУППЫ:

       1) АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ - СЛОЖЕНИЕ, ВЫЧИТАНИЕ,  ИЗМЕНЕНИЕ
  ЗНАКА, УМНОЖЕНИЕ, ДЕЛЕНИЕ И НАХОЖДЕНИЕ ОСТАТКА.

       2) ЛОГИЧЕСКИЕ ОПЕРАЦИИ - ОТРИЦАНИЕ, ДИЗ'ЮНКЦИЯ, КОН'ЮНКЦИЯ.

       3) ОПЕРАЦИИ  НАД  МНОЖЕСТВАМИ  -  ОБ'ЕДИНЕНИЕ,  ПЕРЕСЕЧЕНИЕ,
  РАЗНОСТЬ.

       4) ОПЕРАЦИИ-ОТНОШЕНИЯ  -  РАВЕНСТВО,  НЕРАВЕНСТВО,  ПОРЯДОК,
  ПРИНАДЛЕЖНОСТЬ И ВКЛЮЧЕНИЕ (ДЛЯ МНОЖЕСТВ).

       РЕЗУЛЬТАТЫ ОПЕРАЦИЙ ОТНОШЕНИЙ ПРИНАДЛЕЖАТ ЛОГИЧЕСКОМУ  ТИПУ.
  ОТНОШЕНИЯ ПОРЯДКА ПРИМЕНИМЫ ТОЛЬКО К СКАЛЯРНЫМ ТИПАМ.

       ОПЕРАTOР  ПРОЦЕДУРЫ  ВЫЗЫВАЕТ   ИСПОЛНЕНИЕ   СООТВЕТСТВУЮЩЕЙ
  ПРОЦЕДУРЫ (СМ. НИЖЕ). ОПЕРАТОРЫ ПРИСВАИВАНИЯ И ПРОЦЕДУРЫ ЯВЛЯЮТСЯ
  "КИРПИЧИКАМИ", ИЛИ КОМПОНЕНТАМИ, ИЗ КОТОРЫХ СТРОЯТСЯ  СТРУКТУРНЫЕ
  ОПЕРАТОРЫ,  ПРЕДПИСЫВАЮЩИЕ   ПОСЛЕДОВАТЕЛЬНОЕ,   ВЫБОРОЧНОЕ   ИЛИ
  ПОВТОРНОЕ ИСПОЛНЕНИЕ СВОИХ КОМПОНЕНТ. ПОСЛЕДОВАТЕЛЬНОЕ ИСПОЛНЕНИЕ
  ОПЕРАТОРОВ ЗАДАЕТСЯ СОСТАВНЫМ ОПЕРАТОРОМ, УСЛОВНОЕ ИЛИ ВЫБОРОЧНОЕ
  ИСПОЛНЕНИЕ - ОПЕРАТОРОМ "ЕСЛИ" И ОПЕРАТОРОМ "ВЫБОР", А  ПОВТОРНОЕ
  ИСПОЛНЕНИЕ -  ЦИКЛАМИ.  ОПЕРАТОР  "ЕСЛИ"  СЛУЖИТ  ДЛЯ  ПОДЧИНЕНИЯ
  ИСПОЛНЕНИЯ  ОПЕРАТОРА  ЗНАЧЕНИЮ  ВЫРАЖЕНИЯ  ЛОГИЧЕСКОГО  ТИПА,  А
  ОПЕРАТОР  "ВЫБОР"  ДЕЛАЕТ  ВОЗМОЖНЫМ  ВЫБОР   МЕЖДУ   НЕСКОЛЬКИМИ
  ОПЕРАТОРАМИ В СООТВЕТСТВИИ  СО  ЗНАЧЕНИЕМ  НЕКОТОРОГО  СЕЛЕКТОРА.
  ЦИКЛ С ПАРАМЕТРАМИ (ОПЕРАТОР "ДЛЯ")  УПОТРЕБЛЯЕТСЯ,  КОГДА  ЧИСЛО
  ИТЕРАЦИЙ ИЗВЕСТНО ЗАРАНЕЕ, А  В  ОСТАЛЬНЫХ  СЛУЧАЯХ  ИСПОЛЬЗУЮТСЯ
  ЦИКЛЫ С  УСЛОВИЕМ  ПРОДОЛЖЕНИЯ  (ОПЕРАТОР  "ПОКА")  ИЛИ  ЦИКЛЫ  С
  УСЛОВИЕМ ОКОНЧАНИЯ (ОПЕРАТОР "ПОВТОР").

       ОПЕРАТОРУ МОЖЕТ БЫТЬ ДАНО  ИМЯ  (ИДЕНТИФИКАТОР),  С  ПОМОЩЬЮ
                               CTP. 8 

                      
ЩИ1.700.016 ПО.04-01 35


  КОТОРОГО МОЖНО  ОБРАЩАТЬСЯ  К  ЭТОМУ  ОПЕРАТОРУ.  ТАКОЙ  ОПЕРАТОР
  НАЗЫВАЕТСЯ ПРОЦЕДУРОЙ, А  ЕГО  ОПИСАНИЕ  -  ОПИСАНИЕМ  ПРОЦЕДУРЫ.
  ОПИСАНИЕ   МОЖЕТ   СОДЕРЖАТЬ   МНОЖЕСТВО   ОПИСАНИЙ   ПЕРЕМЕННЫХ,
  ОПРЕДЕЛЕНИЕ ТИПОВ И ДАЛЬНЕЙШЕЕ ОПИСАНИЕ ПРОЦЕДУР.  ТАК  ОПИСАННЫЕ
  ПЕРЕМЕННЫЕ, ТИПЫ И ПРОЦЕДУРЫ МОГУТ УПОМИНАТЬСЯ ТОЛЬКО В  ПРЕДЕЛАХ
  САМОЙ  ПРОЦЕДУРЫ  И  ПОЭТОМУ  НАЗЫВАЮТСЯ  ЛОКАЛЬНЫМИ  ДЛЯ  ДАННОЙ
  ПРОЦЕДУРЫ.  ИХ  ИНДЕТИФИКАТОРЫ  ИМЕЮТ  СМЫСЛ  ТОЛЬКО  В  ПРЕДЕЛАХ
  ПРОГРАММОГО   ТЕКСТА,   СОСТАВЛЯЮЩЕГО   ОПИСАНИЕ   ПРОЦЕДУРЫ    И
  НАЗЫВАЕМОГО ОБЛАСТЬЮ ОПРЕДЕЛЕНИЯ ЭТИХ ИДЕНТИФИКАТОРОВ.  ПОСКОЛЬКУ
  ОДНА ПРОЦЕДУРА МОЖЕТ БЫТЬ ОПИСАНА КАК ЛОКАЛЬНАЯ  ПО  ОТНОШЕНИЮ  К
  ДРУГОЙ, ОБЛАСТИ ОПРЕДЕЛЕНИЯ МОГУТ БЫТЬ  ВЛОЖЕНЫ  ОДНА  В  ДРУГУЮ.
  ОБ'ЕКТЫ,ОПИСАННЫЕ В ГЛАВНОЙ ПРОГРАММЕ, Т.Е. НЕ ЛОКАЛЬНЫЕ  НИ  ДЛЯ
  КАКОЙ ПРОЦЕДУРЫ, НАЗЫВАЮТСЯ ГЛОБАЛЬНЫМИ.

       ПРОЦЕДУРА ИМЕЕТ ФИКСИРОВАННОЕ ЧИСЛО  ПАРАМЕТРОВ,  КАЖДЫЙ  ИЗ
  КОТОРЫХ   ИЗОБРАЖАЕТСЯ    В    ПРЕДЕЛАХ    ПРОЦЕДУРЫ    НЕКОТОРЫМ
  ИДЕНТИФИКАТОРОМ, НАЗЫВАЕМЫМ ФОРМАЛЬНЫМ ПАРАМЕТРОМ. ПРИ  ОБРАЩЕНИИ
  К   ПРОЦЕДУРЕ   КАЖДОМУ   ФОРМАЛЬНОМУ   ПАРАМЕТРУ   ДОЛЖНА   БЫТЬ
  СОПОСТАВЛЕНА  НЕКОТОРАЯ  ФАКТИЧЕСКАЯ   ВЕЛИЧИНА.   ЭТА   ВЕЛИЧИНА
  НАЗЫВАЕТСЯ   ФАКТИЧЕСКИМ   ПАРАМЕТРОМ.   СУЩЕСТВУЕТ   ТРИ    РОДА
  ПАРАМЕТРОВ: ЗНАЧЕНИЯ, ПЕРЕМЕННЫЕ, ПРОЦЕДУРЫ (ФУНКЦИЙ).  В  ПЕРВОМ
  СЛУЧАЕ  ФАКТИЧЕСКИЙ  ПАРАМЕТР   ЯВЛЯЕТСЯ   ВЫРАЖЕНИЕМ,   ЗНАЧЕНИЕ
  КОТОРОГО  ВЫЧИСЛЯЕТСЯ  ОДИН   РАЗ.   СООТВЕТСТВУЮЩИЙ   ФОРМАЛЬНЫЙ
  ПАРАМЕТР ЯВЛЯЕТСЯ  ЛОКАЛЬНОЙ  ПЕРЕМЕННОЙ,  КОТОРОЙ  ПРИСВАИВАЕТСЯ
  РЕЗУЛЬТАТ ЭТОГО ВЫЧИСЛЕНИЯ ПЕРЕД ВЫПОЛНЕНИЕМ ПРОЦЕДУРЫ (ФУНКЦИИ).
  В  СЛУЧАЕ  ПАРАМЕТРА-ПЕРЕМЕННОЙ  ФАКТИЧЕСКИЙ  ПАРАМЕТР   ЯВЛЯЕТСЯ
  ПЕРЕМЕННОЙ  И  ФОРМАЛЬНЫЙ  ПАРАМЕТР  СЛУЖИТ   ОБОЗНАЧЕНИЕМ   ЭТОЙ
  ПЕРЕМЕННОЙ. ЗНАЧЕНИЯ ИНДЕКСОВ, ЕСЛИ ОНИ ЕСТЬ,  ВЫЧИСЛЯЮТСЯ  ПЕРЕД
  ВЫПОЛНЕНИЕМ ПРОЦЕДУРЫ (ФУНКЦИИ). В СЛУЧАЕ ПАРАМЕТРА-ПРОЦЕДУРЫ ИЛИ
  ПАРАМЕТРА-ФУНКЦИИ ФАКТИЧЕСКИМ ПАРАМЕТРОМ  ЯВЛЯЕТСЯ  ИДЕНТИФИКАТОР
  ПРОЦЕДУРЫ ИЛИ ФУНКЦИИ.

       ОПИСАНИЕ  ФУНКЦИИ  АНАЛОГИЧНЫ  ОПИСАНИЯМ  ПРОЦЕДУР.  ОТЛИЧИЕ
  ЗАКЛЮЧАЕТСЯ В ТОМ, ЧТО ФУНКЦИИ  ВЫДАЮТ  РЕЗУЛЬТАТ,  ТИП  КОТОРОГО
  ОГРАНИЧЕН  СКАЛЯРНЫМИ  ТИПАМИ  И  ДОЛЖЕН  БЫТЬ  СПЕЦИФИЦИРОВАН  В
  ОПИСАНИИ ФУНКЦИИ, ПОЭТОМУ ФУНКЦИИ  МОГУТ  БЫТЬ  ИСПОЛЬЗОВАНЫ  КАК
  СОСТАВЛЯЮЩИЕ ЧАСТИ ВЫРАЖЕНИЙ. ДЛЯ УСТРАНЕНИЯ ПОБОЧНЫХ ЭФФЕКТОВ  В
  ПРЕДЕЛАХ ТЕЛА  ФУНКЦИИ  СЛЕДУЕТ  ИЗБЕГАТЬ  ПРИСВАИВАНИЙ  ЗНАЧЕНИЙ
  НЕЛОКАЛЬНЫМ ПЕРЕМЕННЫМ.



















                               CTP. 9 

                      
ЩИ1.700.016 ПО.04-01 35


                      3. СПОСОБ ОПИСАНИЯ ЯЗЫКА




       В  СООТВЕТСТВИИ   С   ТРАДИЦИОННЫМИ   ФОРМАМИ   БЭКУСА-НАУРА
  СИНТАКСИЧЕСКИЕ КОНСТРУКЦИИ  ОБОЗНАЧАЮТСЯ  СЛОВАМИ,ЗАКЛЮЧЕННЫМИ  В
  УГЛОВЫЕ СКОБКИ "<" И ">". ЭТИ СЛОВА ОПИСЫВАЮТ ТАКЖЕ ПРИРОДУ,  ИЛИ
  СМЫСЛ, ДАННЫХ КОНСТРУКЦИЙ И ИСПОЛЬЗУЮТСЯ В  ПОСЛЕДУЮЩЕМ  ОПИСАНИИ
  СЕМАНТИКИ. ВОЗМОЖНОЕ ПОВТОРЕНИЕ НЕКОТОРОЙ КОНСТРУКЦИИ УКАЗЫВАЕТСЯ
  ЗВЕЗДОЧКОЙ (* -  НУЛЬ  ИЛИ  БОЛЕЕ  ПОВТОРЕНИЙ),  А  ТАКЖЕ  ЗНАКОМ
  ЛОГИЧЕСКОЕ  "И"  (&  -  ОДНО  ИЛИ  НЕСКОЛЬКО  ПОВТОРЕНИЙ).   ЕСЛИ
  ПОВТОРЯЕМАЯ КОНСТРУКЦИЯ СОСТОИТ БОЛЕЕ ЧЕМ ИЗ ОДНОГО ЭЛЕМЕНТА, ОНА
  ЗАКЛЮЧАЕТСЯ В МЕТАСКОБКИ "(*" И  "*)",  ЧТО  ОЗНАЧАЕТ  ПОВТОРЕНИЕ
  НУЛЬ ИЛИ НЕСКОЛЬКО РАЗ.

       ОСНОВНАЯ ЛЕКСИКА СОСТОИТ ИЗ  СИМВОЛОВ,  ПОДРАЗДЕЛЯЮЩИХСЯ  НА
  БУКВЫ, ЦИФРЫ И СПЕЦИАЛЬНЫЕ СИМВОЛЫ:

  <БУКВА>::=А!B!C!D!E!F!G!H!I!J!K!L!M!N!O!P!Q!R!S!T!U!V!
            W!X!Z!
            А!Б!В!Г!Д!Е!Ж!З!И!Й!К!Л!М!Н!О!П!Р!С!Т!У!Ф!Х!
            Ц!Ы!Ь!Я
  <ВОСЬМЕР.ЦИФРА>::=0!1!2!3!4!5!6!7
  <ЦИФРА>::=<ВОСЬМЕР.ЦИФРА>!8!9
  <СПЕЦИАЛЬНЫЙ СИМВОЛ>::=+!-!*!/!NOT!AND!OR!=!<>!>!<!<=!>=!
            (!)![!]!:=!.!,!;!:!'!^!DIV!MOD!NIL!IN!IF!THEN!
            ELSE!CASE!OF!REPEAT!UNTIL!WHILE!DO!FOR!TO!
            DOWNTO!BEGIN!END!WITH!GOTO!CONST!VAR!TYPE!
            ARRAY!RECORD!SET!FILE!FUNCTION!PROCEDURE!
            LABEL!PACKED

       КОНСТРУКЦИЯ

  <СКОБКА><ЛЮБАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ СИМВОЛОВ,НЕ ВКЛЮЧАЮЩАЯ <СКОБКУ>
  И "Щ",><СКОБКА>

  НАЗЫВАЕТСЯ КОММЕНТАРИЕМ И МОЖЕТ БЫТЬ ВСТАВЛЕНА МЕЖДУ ЛЮБЫМИ ДВУМЯ
  ИДЕНТИФИКАТОРАМИ, ЧИСЛАМИ ИЛИ СПЕЦИАЛЬНЫМИ СИМВОЛАМИ. КОММЕНТАРИЙ
  МОЖЕТ БЫТЬ УДАЛЕН ИЗ ТЕКСТА ПРОГРАММЫ БЕЗ ИЗМЕНЕНИЯ ЕГО ЗНАЧЕНИЯ.

       В  ПАСКАЛЕ  ДОПУСКАЕТСЯ  ТРИ  ТИПА  <СКОБОК>  ДЛЯ  ВЫДЕЛЕНИЯ
  КОММЕНТАРИЕВ:

  <СКОБКА>::=[...]! (*...*)! /*...*/

  ВСЕ  ТИПЫ   СКОБОК   ЯВЛЯЮТСЯ   ВЗАИМОЗАМЕНЯЕМЫМИ:   ДЛЯ   НАЧАЛА
  КОММЕНТАРИЯ МОЖНО ИСПОЛЬЗОВАТЬ  ОДИН  ТИП,  А  ДЛЯ  ЗАВЕРШЕНИЯ  -
  ДРУГОЙ ТИП СКОБОК.









                               CTP. 10 

                     

ЩИ1.700.016 ПО.04-01 35


              4. ЭЛЕМЕНТЫ И ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА




       ИДЕНТИФИКАТОРЫ  СЛУЖАТ  ДЛЯ  ОБОЗНАЧЕНИЯ  КОНСТАНТ,   ТИПОВ,
  ПЕРЕМЕННЫХ, ПРОЦЕДУР И ФУНКЦИЙ. В ПРЕДЕЛАХ ОБЛАСТИ ОПРЕДЕЛЕННОСТИ
  ИДЕНТИФИКАТОРА, Т.Е. В ПРОЦЕДУРЕ ИЛИ  В  ФУНКЦИИ,  В  КОТОРОЙ  ОН
  ОПИСАН, СМЫСЛ ИДЕНТИФИКАТОРА ДОЛЖЕН БЫТЬ ОДНОЗНАЧНЫМ.

 <ИДЕНТИФИКАТОР>::=<БУКВА><БУКВА ИЛИ ЦИФРА>*
 <БУКВА ИЛИ ЦИФРА>::=<БУКВА>!<ЦИФРА>

       ПАСКАЛЬ ДОПУСКАЕТ ЛЮБУЮ ДЛИНУ  ИДЕНТИФИКАТОРОВ,  ПРИЧЕМ  ВСЕ
  ЗНАКИ  ЯВЛЯЮТСЯ  ЗНАЧИМЫМИ.  ЗНАКИ  КИРИЛЛИЦЫ   (ЗА   ИСКЛЮЧЕНИЕМ
  Ч,Ш,Щ,Э,Ю)    МОГУТ    ТАКЖЕ     ИСПОЛЬЗОВАТЬСЯ,     НО     БУДУТ
  ИНТЕРПРЕТИРОВАТЬСЯ  КАК  И  СООТВЕТСТВУЮЩИЕ  ЛАТИНСКИЕ.   СЛЕДУЕТ
  ЗАМЕТИТЬ, ЧТО В СТАНДАРТЕ ПАСКАЛЯ РЕКОМЕНДУЕТСЯ, ЧТОБЫ  ПЕРВЫЕ  8
  ЗНАКОВ ИДЕНТИФИКАТОРОВ БЫЛИ УНИКАЛЬНЫМИ.

       В  СВЯЗИ  С  ОГРАНИЧЕНИЯМИ  НА  ФОРМАТ   ОБ'ЕКТНОГО   МОДУЛЯ
  ИДЕНТИФИКАТОРЫ  ВНЕШНИХ  ФОРТРАНОВСКИХ   ПРОЦЕДУР   ДОЛЖНЫ   БЫТЬ
  УНИКАЛЬНЫМИ ПО ПЕРВЫМ 6 ЗНАКАМ  (Т.Е.  РАЗЛИЧАТЬСЯ  ПО  ПЕРВЫМ  6
  ЗНАКАМ).

       ДЛЯ ЧИСЕЛ, ЯВЛЯЮЩИХСЯ КОНСТАНТАМИ ЦЕЛОГО  ИЛИ  ВЕЩЕСТВЕННОГО
  ТИПА, ИСПОЛЬЗУЕТСЯ ОБЫЧНАЯ ДЕСЯТИЧНАЯ СИСТЕМА ЗАПИСИ  БУКВА  "Е",
  ПРЕДШЕСТВУЮЩАЯ ПОРЯДКУ, ЧИТАЕТСЯ КАК "УМНОЖИТЬ НА 10 В СТЕПЕНИ".

  <ЦЕЛОЕ БЕЗ ЗНАКА>::= <ЦИФРА>&!<ВОСЬМЕР.ЦИФРА>&В
  <ВЕЩЕСТВЕННОЕ БЕЗ ЗНАКА>::= <ЦИФРА>&.<ЦИФРА>&!
                    <ЦИФРА>&.<ЦИФРА>&Е<ПОРЯДОК>!
                             <ЦИФРА>&Е<ПОРЯДОК>
  <ЧИСЛО БЕЗ ЗНАКА>::= <ЦЕЛОЕ БЕЗ ЗНАКА>!
                             <ВЕЩЕСТВЕННОЕ БЕЗ ЗНАКА>
  <ПОРЯДОК>::= <ЦИФРА>&!<ЗНАК><ЦИФРА>&
  <ЗНАК>::= +!-

      ПРИМЕРЫ:

  1    100    0.1    5Е-3    87.35Е+8    12В

       ПОСЛЕДОВАТЕЛЬНОСТИ ЛИТЕР, ЗАКЛЮЧЕННЫЕ В КАВЫЧКИ,  НАЗЫВАЮТСЯ
  ТЕКСТАМИ. ТЕКСТЫ,  СОСТОЯЩИЕ  ИЗ  ЕДИНСТВЕННОЙ  ЛИТЕРЫ,  ЯВЛЯЮТСЯ
  КОНСТАНТАМИ ЛИТЕРНОГО ТИПА. ТЕКСТЫ, СОСТОЯЩИЕ ИЗ N (N>1) ЛИТЕР  В
  КАВЫЧКАХ, ЯВЛЯЮТСЯ КОНСТАНТАМИ ТИПА.

 ARRAY[1..N] OF CHAR


       П_Р_И_М_Е_Ч_А_Н_И_Е. ЕСЛИ ТЕКСТ ДОЛЖЕН СОДЕРЖАТЬ КАВЫЧКУ, ТО
  ОНА ПОВТОРЯЕТСЯ ДВАЖДЫ.

  <ТЕКСТ>::= '<ЛИТЕРА>&'

      ПРИМЕРЫ:
  'A'     ';'      ''''     'PASCAL'

                               CTP. 11

                     

ЩИ1.700.016 ПО.04-01 35


                  5. ЭЛЕМЕНТЫ И ВВОД/ВЫВОД ДАННЫХ






        5.1. ОПРЕДЕЛЕНИЯ КОНСТАНТ



       ОПРЕДЕЛЕНИЕ  КОНСТАНТЫ  ВВОДИТ  ИДЕНТИФИКАТОР  КАК   СИНОНИМ
  НЕКОТОРОЙ КОНСТАНТЫ:

  <ИДЕНТИФИКАТОР КОНСТАНТЫ>::= <ИДЕНТИФИКАТОР>
  <КОНСТАНТА БЕЗ ЗНАКА>::= <ЧИСЛО БЕЗ ЗНАКА> !
                 <ТЕКСТ> ! <ИДЕНТИФИКАТОР КОНСТАНТЫ> ! NIL
  <КОНСТАНТА>::= <ЧИСЛО БЕЗ ЗНАКА>!<ЗНАК><ЧИСЛО БЕЗ ЗНАКА>!
                 <ИДЕНТИФИКАТОР КОНСТАНТЫ> !
                 <ЗНАК><ИДЕНТИФИКАТОР КОНСТАНТЫ> ! <ТЕКСТ>
  <ОПРЕДЕЛЕНИЕ КОНСТАНТЫ>::= <ИДЕНТИФИКАТОР> = <КОНСТАНТА>

       В  КАЖДОЙ  РЕАЛИЗАЦИИ   ОПРЕДЕЛЕНЫ   СЛЕДУЮЩИЕ   СТАНДАРТНЫЕ
  ИДЕНТИФИКАТОРЫ:

  EOL
         - РАВЕН УПРАВЛЯЮЩЕМУ СИМВОЛУ, ОБОЗНАЧАЮЩЕМУ КОНЕЦ СТРОКИ;

  ALFALENG
         - РАВЕН 10.



        5.2. ОПРЕДЕЛЕНИЯ ТИПОВ ДАННЫХ



       ТИП  ДАННЫХ  ЗАДАЕТ  МНОЖЕСТВО   ЗНАЧЕНИЙ,   КОТОРЫЕ   МОГУТ
  ПРИНИМАТЬ  ПЕРЕМЕННЫЕ  ЭТОГО  ТИПА,  И  СВЯЗЫВАЕТ  С  ЭТИМ  ТИПОМ
  ИДЕНТИФИКАТОР.

  <ТИП>::= <ПРОСТОЙ ТИП> ! <СТРУКТУРНЫЙ ТИП> !
           <ТИП УКАЗАТЕЛЯ>
  <ОПРЕДЕЛЕНИЕ ТИПА>::= <ИДЕНТИФИКАТОР> = <ТИП>














                               CTP. 12

                     

ЩИ1.700.016 ПО.04-01 35


      5.2.1. ПРОСТЫЕ ТИПЫ



  <ПРОСТОЙ ТИП>::= <СКАЛЯРНЫЙ ТИП> ! <ОТРЕЗОК ТИПА> !
                   <ИДЕНТИФИКАТОР ТИПА>
  <ИДЕНТИФИКАТОР ТИПА>::= <ИДЕНТИФИКАТОР>



    5.2.1.1. СКАЛЯРНЫЕ ТИПЫ



       СКАЛЯРНЫЙ ТИП ОПРЕДЕЛЯЕТ  УПОРЯДОЧЕННОЕ  МНОЖЕСТВО  ЗНАЧЕНИЙ
  ПОСРЕДСТВОМ  ПЕРЕЧИСЛЕНИЯ   ИДЕНТИФИКАТОРОВ,   ОБОЗНАЧАЮЩИХ   ЭТИ
  ЗНАЧЕНИЯ:

  <СКАЛЯРНЫЙ ТИП>::=(<ИДЕНТИФИКАТОР>(*,<ИДЕНТИФИКАТОР>*))

       ПРИМЕРЫ:

  (КРАСН, ОРАНЖ, ЖЕЛТ, ЗЕЛ, ГОЛУБОЙ)
  (ЯНВАРЬ,ФЕВРАЛЬ,МАРТ)
  (ЗИМА,ВЕСНА,ЛЕТО,ОСЕНЬ)

       КО ВСЕМ СКАЛЯРНЫМ ТИПАМ(ИСКЛЮЧАЯ REAL)  ПРИМЕНИМЫ  СЛЕДУЮЩИЕ
  ФУНКЦИИ:

  SUCC - СЛЕДУЮЩЕЕ ЗНАЧЕНИЕ (В ПОРЯДКЕ ПЕРЕЧИСЛЕНИЯ);
  PRED - ПРЕДШЕСТВУЮЩЕЕ ЗНАЧЕНИЕ (В ПОРЯДКЕ ПЕРЕЧИСЛЕНИЯ).



    5.2.1.2. СТАНДАРТНЫЕ СКАЛЯРНЫЕ ТИПЫ



       СЛЕДУЮЩИЕ ТИПЫ ЯВЛЯЮТСЯ СТАНДАРТНЫМИ В ПАСКАЛЕ:

       ЦЕЛЫЙ ТИП (INTEGER) - ЗНАЧЕНИЯ ОБРАЗУЮТ  ПОДМНОЖЕСТВО  ЦЕЛЫХ
  ЧИСЕЛ В ГРАНИЦАХ (-32768..32767). БЕЗЗНАКОВЫЕ  ЦЕЛЫЕ  МОГУТ  БЫТЬ
  ОБ'ЯБЛЕНЫ С ПОМОЩЬЮ ДИАПАЗОНА (0..65535).  СЛЕДУЕТ  ПОМНИТЬ,  ЧТО
  АРИФМЕТИЧЕСКИЕ ПЕРЕПОЛНЕНИЯ ОПРЕДЕЛЯЮТСЯ ТОЛЬКО ПРИ  УМНОЖЕНИИ  И
  ДЕЛЕНИИ ЗНАКОВЫХ ЦЕЛЫХ.

  TYPE UNSIGNEDIGIT=0..65535

  ДЛЯ ЦЕЛЫХ ЧИСЕЛ ОПРЕДЕЛЕН ИДЕНТИФИКАТОР MAXINT=32767.

       ВЕЩЕСТВЕННЫЙ ТИП (REAL) -  ЗНАЧЕНИЯ  ЯВЛЯЮТСЯ  ПОДМНОЖЕСТВОМ
  МНОЖЕСТВА ВЕЩЕСТВЕННЫХ  ЧИСЕЛ  ВЕЩЕСТВЕННЫЕ  ЧИСЛА  (REAL)  ИМЕЮТ
  ДИАПАЗОН 1Е-38..1Е+38 И ТОЧНОСТЬ  ПОРЯДКА  7  ДЕСЯТИЧНЫХ  ЗНАКОВ.
  АРИФМЕТИЧЕСКИЕ ПЕРЕПОЛНЕНИЯ ОПРЕДЕЛЯЮТСЯ  ДЛЯ  ВСЕХ  ОПЕРАЦИЙ,  А
  ПОТЕРЯ  ЗНАЧИМОСТИ  НЕ  ДИАГНОСТИРУЕТСЯ  И  ПРИВОДИТ  К  НУЛЕВОМУ
  РЕЗУЛЬТАТУ.

  СТАНДАРТНЫЕ  ТРАНСЦЕНДЕНТНЫЕ  ФУНКЦИИ   ИМЕЮТ   ТОЧНОСТЬ   ДО   6
                               CTP. 13

                     

ЩИ1.700.016 ПО.04-01 35


  ДЕСЯТИЧНЫХ ЦИФР.

       ЛОГИЧЕСКИЙ  ТИП  (BOOLEAN)  -  ЗНАЧЕНИЯ  ПРЕДСТАВЛЯЮТ  СОБОЙ
  ИСТИННОСТНЫЕ  ЗНАЧЕНИЯ,  ОБОЗНАЧАЕМЫЕ  ИДЕНТИФИКАТОРАМИ  TRUE   И
  FALSE;

       ЛИТЕРНЫЙ  ТИП  (CHAR)  -  ЗНАЧЕНИЯ  СУТЬ  МНОЖЕСТВО   ЛИТЕР,
  ЗАВИСЯЩЕЕ  ОТ  КОНКРЕТНОЙ  РЕАЛИЗАЦИИ,  И   ИЗОБРАЖАЮТСЯ   САМИМИ
  ЛИТЕРАМИ, ЗАКЛЮЧЕННЫМИ В КАВЫЧКИ. В ДАННОЙ РЕАЛИЗАЦИИ  ИСПОЛЬЗУЕТ
  ПОЛНЫЙ НАБОР ЗНАКОВ КОИ-7. КАЖДЫЙ ЗНАК ХРАНИТСЯ В ОДНОМ БАЙТЕ  (8
  РАЗРЯДОВ).



    5.2.1.3. ОТРЕЗКИ ТИПОВ



       ТИП МОЖЕТ БЫТЬ ОПРЕДЕЛЕН КАК ОТРЕЗОК ДРУГОГО СКАЛЯРНОГО ТИПА
  ПОСРЕДСТВОМ УКАЗАНИЯ НАИБОЛЬШЕГО И НАИМЕНЬШЕГО ЗНАЧЕНИЙ  ОТРЕЗКА.
  ПЕРВАЯ КОНСТАНТА ЗАДАЕТ НИЖНЮЮ ГРАНИЦУ, КОТОРАЯ  НЕ  ДОЛЖНА  БЫТЬ
  БОЛЬШЕ ВЕРХНЕЙ.

  <ОТРЕЗОК ТИПА>::=<КОНСТАНТА>..<КОНСТАНТА>

      ПРИМЕРЫ:

   1..100
   -10..+10
   ПН..ПТ



      5.2.2. СТРУКТУРНЫЕ ТИПЫ



       СТРУКТУРНЫЙ ТИП ДАННЫХ ХАРАКТЕРИЗУЕТСЯ  ТИПОМ  (ИЛИ  ТИПАМИ)
  СВОИХ КОМПОНЕНТ И СПОСОБОМ ИХ ОРГАНИЗАЦИИ.

  <СТРУКТУРНЫЙ ТИП>::=<ТИП МАССИВА> ! <ТИП ЗАПИСИ> !
                    <ТИП МНОЖЕСТВА> ! <ТИП ФАЙЛА>

       СТАНДАРТНЫЙ ПАСКАЛЬ СОДЕРЖИТ ПРОЦЕДУРЫ "PACK" И "UNPACK" ДЛЯ
  ЭФФЕКТИВНОЙ РАБОТЫ С КОМПОНЕНТАМИ  СТРУКТУРНОГО  ТИПА.  В  ДАННОМ
  ПАСКАЛЕ АТРИБУТ "PACKED", ДОПУСТИМЫЙ В СТАНДАРТЕ,ИГНОРИРУЕТСЯ,  А
  ИСПОЛЬЗОВАНИЕ ПРОЦЕДУР "PACK" И "UNPACK" НЕДОПУСТИМО.











                               CTP. 14

                     

ЩИ1.700.016 ПО.04-01 35


    5.2.2.1. ТИПЫ МАССИВОВ



       ТИП МАССИВА - ЭТО  СТРУКТУРА,  СОСТОЯЩАЯ  ИЗ  ФИКСИРОВАННОГО
  ЧИСЛА  КОМПОНЕНТ  ОДНОГО  И  ТОГО  ЖЕ  ТИПА,  НАЗЫВАЕМОГО   ТИПОМ
  КОМПОНЕНТ. ЭЛЕМЕНТЫ МАССИВОВ ВЫБИРАЮТСЯ ПО ИНДЕКСАМ -  ЗНАЧЕНИЯМ,
  ПРИНАДЛЕЖАЩИМ К ТАК НАЗЫВАЕМОМУ ТИПУ ИНДЕКСОВ.  ОПРЕДЕЛЕНИЕ  ТИПА
  МАССИВА ЗАДАЕТ КАК ТИП КОМПОНЕНТ, ТАК И ТИП ИНДЕКСОВ:

  <ТИП МАССИВА>::=
  ARRAY[<ТИП ИНДЕКСА>(*,<ТИП ИНДЕКСА>*)] OF <ТИП КОМПОНЕНТ>
  <ТИП ИНДЕКСА>::=<ПРОСТОЙ ТИП>
  <ТИП КОМПОНЕНТ>::=<ТИП>

       ЕСЛИ ЗАДАНО N ТИПОВ  ИНДЕКСОВ,  ТО  ТИП  МАССИВА  НАЗЫВАЕТСЯ
  N-МЕРНЫМ; ЕГО КОМПОНЕНТЫ ВЫБИРАЮТСЯ С ПОМОЩЬЮ N ИНДЕКСОВ.

     ПРИМЕРЫ:

  ARRAY[1..100] OF REAL
  ARRAY[1..10,1..20] OF 0..99
  ARRAY[BOOLEAN] OF ЦВЕТ



    5.2.2.2. ТИПЫ ЗАПИСЕЙ



       ТИП ЗАПИСИ -  ЭТО  СТРУКТУРА,  СОСТОЯЩАЯ  ИЗ  ФИКСИРОВАННОГО
  ЧИСЛА КОМПОНЕНТ, ВОЗМОЖНО, РАЗНЫХ ТИПОВ. ОПРЕДЕЛЕНИЕ ТИПА  ЗАПИСИ
  ЗАДАЕТ  ДЛЯ  КАЖДОЙ  КОМПОНЕНТЫ,  НАЗЫВАЕМОЙ  ПОЛЕМ,  ЕЕ  ТИП   И
  ОБОЗНАЧАЮЩИЙ ЭТО ПОЛЕ ИДЕНТИФИКАТОР. ОБЛАСТЬЮ ОПРЕДЕЛЕННОСТИ ЭТИХ
  ИДЕНТИФИКАТОРОВ ПОЛЯ ЯВЛЯЕТСЯ САМО ОПРЕДЕЛЕНИЕ ЗАПИСИ, ОДНАКО ОНИ
  ДОСТУПНЫ ТАКЖЕ В ВЫБОРКАХ ПОЛЯ, ССЫЛАЮЩИХСЯ НА  ПЕРЕМЕННУЮ-ЗАПИСЬ
  ДАННОГО ТИПА.

       ТИП ЗАПИСИ МОЖЕТ ИМЕТЬ НЕСКОЛЬКО ВАРИАНТОВ; В  ТАКОМ  СЛУЧАЕ
  НЕКОТОРОЕ ПОЛЕ ОТМЕЧАЕТСЯ КАК ПОЛЕ ПРИЗНАКА: ЗНАЧЕНИЕ ЭТОГО  ПОЛЯ
  ПОКАЗЫВАЕТ, КАКОЙ ИЗ ВАРИАНТОВ ПЕРЕМЕННОЙ-ЗАПИСИ  РАССМАТРИВАЕТСЯ
  В ДАННЫЙ МОМЕНТ. КАЖДЫЙ ВАРИАНТ ИДЕНТИФИЦИРУЕТСЯ  МЕТКОЙ  ВЫБОРА,
  ЯВЛЯЮЩЕЙСЯ КОНСТАНТОЙ ТИПА ПОЛЯ ПРИЗНАКА:

  <ТИП ЗАПИСИ>::=RECORD<СПИСОК ПОЛЕЙ>END
  <СПИСОК ПОЛЕЙ>::=<ОБЩАЯ ЧАСТЬ>!
                   <ОБЩАЯ ЧАСТЬ>;<ВАРИАНТНАЯ ЧАСТЬ>!
                   <ВАРИАНТНАЯ ЧАСТЬ>
  <ОБЩАЯ ЧАСТЬ>::=<СЕКЦИЯ ЗАПИСИ>(*;<СЕКЦИЯ ЗАПИСИ>*)
  <СЕКЦИЯ ЗАПИСИ>::=<ИДЕНТИФИКАТОР ПОЛЯ>
                   (*,<ИДЕНТИФИКАТОР ПОЛЯ>*):<ТИП>
  <ВАРИАНТНАЯ ЧАСТЬ>::=CASE<ПОЛЕ ПРИЗНАКА>:
            <ИДЕНТИФИКАТОР ТИПА> OF <ВАРИАНТ>(*;<ВАРИАНТ>*)
  <ВАРИАНТ>::=<СПИСОК МЕТОК ВЫБОРА>:(<СПИСОК ПОЛЕЙ>)!
              <СПИСОК МЕТОК ВЫБОРА>
  <СПИСОК МЕТОК ВЫБОРА>::=<МЕТКА ВЫБОРА>(*,<МЕТКА ВЫБОРА>*)
  <МЕТКА ВЫБОРА>::=<КОНСТАНТА БЕЗ ЗНАКА>
  <ПОЛЕ ПРИЗНАКА>::=<ИДЕНТИФИКАТОР>
                               CTP. 15

                     

ЩИ1.700.016 ПО.04-01 35


       ПРИМЕРЫ:

    RECORD ДЕНЬ:1..31;
           МЕС:1..12;
           ГОД:INTEGER
    END

  RECORD  ИМЯ,ФАМИЛИЯ:ALFA;
          ВОЗРАСТ:0..99;
          ЖЕНАТ:BOOLEAN
  END

  RECORD  X,Y:REAL;
          ПЛОЩАДЬ:REAL;
     CASE Ф: ФОРМА OF
     ТРЕУГОЛЬНИК:   (СТОРОНА:REAL;
                     НАКЛОН,УГОЛ1,УГОЛ2:УГОЛ);
     ПРЯМОУГОЛЬНИК:(СТОРОНА1,СТОРОНА2:REAL;
                    СКЛОН,УГОЛ3:УГОЛ);
     КРУГ:(ДИАМЕТР:REAL)
  END



    5.2.2.3. ТИПЫ МНОЖЕСТВ



       ТИП  МНОЖЕСТВА  ОПРЕДЕЛЯЕТ  МНОЖЕСТВО  ЗНАЧEНИЙ,  ЯВЛЯЮЩИХСЯ
  МНОЖЕСТВОМ-СТЕПЕНЬЮ      (МНОЖЕСТВОМ      ВСЕХ       ПОДМНОЖЕСТВ)
  СООТВЕТСТВУЮЩЕГО БАЗОВОГО ТИПА. БАЗОВЫМИ  ТИПАMИ  НЕ  МОГУТ  БЫТЬ
  СТРУКТУРНЫЕ ТИПЫ. НАД КАЖДЫМ ТИПОМ МНОЖЕСТВ ОПРЕДЕЛЕНЫ ОПЕРАЦИИ:

  +   ОБ'ЕДИНЕНИЕ
  *   ПЕРЕСЕЧЕНИЕ
  -   РАЗНОСТЬ МНОЖЕСТВ (БИНАРНОЕ ДОПОЛНЕНИЕ)
  IN  ОТНОШЕНИЕ ПРИНАДЛЕЖНОСТИ (ЧЛЕНСТВА)

  <ТИП МНОЖЕСТВА>::=SET OF <ТИП БАЗЫ>
  <ТИП БАЗЫ>::=<ПРОСТОЙ TИП>

       В ПАСКАЛЕ,РЕАЛИЗОВАННОМ ДЛЯ ДВК, ЧИСЛО  ЭЛЕМЕНТОВ  МНОЖЕСТВА
  НЕ МОЖЕТ ПРЕВЫШАТЬ 64.

  ОПРЕДЕЛЕНО СТАНДАРТНОЕ МНОЖЕСТВО "SET OF CHAR", ЧТО  ЭКВИВАЛЕНТНО
  "SET   OF   SPACE..UNDERLINE",   ГДЕ   SPACE   =    CHR(40B)    И
  UNDERLINE=CHR(137B). ТАКИМ ОБРАЗОМ, "SET  OF  CHAR"  НЕ  ВКЛЮЧАЕТ
  БУКВ КИРИЛЛИЦЫ И УПРАВЛЯЮЩИХ ЗНАКОВ, ИМЕЮЩИХ КОДЫ МЕНЕЕ 40В.










                               CTP. 16

                     

ЩИ1.700.016 ПО.04-01 35


    5.2.2.4. ТИПЫ ФАЙЛОВ



       ОПРЕДЕЛЕНИЕ  ТИПА  ФАЙЛА  ЗАДАЕТ  СТРУКТУРУ,  СОСТОЯЩУЮ   ИЗ
  ПОСЛЕДОВАТЕЛЬНОСТИ   ОДНОТИПНЫХ   КОМПОНЕНТ.   ЧИСЛО   КОМПОНЕНТ,
  НАЗЫВАЕМОЕ ДЛИНОЙ ФАЙЛА, ОПРЕДЕЛЕНИЕМ ТИПА ФАЙЛА НЕ  ФИКСИРУЕТСЯ.
  ФАЙЛ,  ИМЕЮЩИЙ  0  КОМПОНЕНТ,  НАЗЫВАЕТСЯ  ПУСТЫМ;   ФАЙЛЫ,   ТИП
  КОМПОНЕНТ КОТОРЫХ ЛИТЕРНЫЙ, НАЗЫВАЮТСЯ ТЕКСТОВЫМИ ФАЙЛАМИ.

  <ТИП ФАЙЛА>::=FILE OF <ТИП>

     СЛЕДУЮЩИЙ ТИП ЯВЛЯЕТСЯ СТАНДАРТНЫМ:

  TYPE TEXT = FILE OF CHAR

       ДАННЫЙ  ПАСКАЛЬ  НЕ  ПОЗВОЛЯЕТ  ИСПОЛЬЗОВАТЬ  ФАЙЛЫ  ФАЙЛОВ,
  ОДНАКО,  МОЖНО  ПРИМЕНЯТЬ  МАССИВЫ  ФАЙЛОВ,   А   ТАКЖЕ   ЗАПИСИ,
  СОДЕРЖАЩИЕ В КАЧЕСТВЕ КОМПОНЕНТОВ ФАЙЛЫ.



      5.2.3. ТИПЫ УКАЗАТЕЛЕЙ



       ДОСТУП К ОПИСАННЫМ В  ПРОГРАММЕ  ПЕРЕМЕННЫМ  МОЖНО  ПОЛУЧИТЬ
  ЧЕРЕЗ  ИХ  ИДЕНТИФИКАТОРЫ.  ОНИ  СУЩЕСТВУЮТ   ВСЕ   ВРЕМЯ,   ПОКА
  ВЫПОЛНЯЕТСЯ ПРОЦЕДУРА (ОБЛАСТЬ  ОПРЕДЕЛЕННОСТИ),  В  КОТОРОЙ  ЭТИ
  ПЕРЕМЕННЫЕ  ЛОКАЛЬНЫ,  В  СВЯЗИ  С   ЧЕМ   ПОСЛЕДНИЕ   НАЗЫВАЮТСЯ
  СТАТИЧЕСКИМИ  ИЛИ  СТАТИЧЕСКИ  РАЗМЕЩАЕМЫМИ.  С  ДРУГОЙ  СТОРОНЫ,
  ПЕРЕМЕННЫЕ МОГУТ СОЗДАВАТЬСЯ  И  ДИНАМИЧЕСКИ,  Т.Е.  БЕЗО  ВСЯКОЙ
  СВЯЗИ  СО  СТРУКТУРОЙ  ПРОГРАММЫ.  ЭТИ  ДИНАМИЧЕСКИЕ   ПЕРЕМЕННЫЕ
  СОЗДАЮТСЯ СТАНДАРТНОЙ ПРОЦЕДУРОЙ "NEW"; ПОСКОЛЬКУ ОНИ НЕ ВХОДЯТ В
  ЯВНЫЕ ОПИСАНИЯ ПЕРЕМЕННЫХ, ОНИ НЕ МОГУТ БЫТЬ  ОБОЗНАЧЕНЫ  ИМЕНЕМ.
  ДОСТУП  К  ТАКИМ  ПЕРЕМЕННЫМ  ОСУЩЕСТВЛЯЕТСЯ  ЧЕРЕЗ  УКАЗАТЕЛЬНЫЕ
  ЗНАЧЕНИЯ  (ССЫЛКИ),  ВЫДАВАЕМЫЕ   ПОСЛЕ   СОЗДАНИЯ   ДИНАМИЧЕСКОЙ
  ПЕРЕМЕННОЙ. КАЖДЫЙ ТИП  УКАЗАТЕЛЕЙ  СОСТОИТ,  ТАКИМ  ОБРАЗОМ,  ИЗ
  НЕОГРАНИЧЕННОГО  МНОЖЕСТВА  УКАЗЫВАЮЩИХ  НА  ОДНОТИПНЫЕ  ЭЛЕМЕНТЫ
  ЗНАЧЕНИЙ. НАД УКАЗАТЕЛЯМИ НЕ ОПРЕДЕЛЕНО НИКАКИХ  ОПЕРАЦИЙ,  КРОМЕ
  ПРОВЕРКИ НА РАВЕНСТВО.  ЗНАЧЕНИЕ  "NIL"  ПРИНАДЛЕЖИТ  ВСЕМ  ТИПАМ
  УКАЗАТЕЛЕЙ, НО ОНО НЕ УКАЗЫВАЕТ НИ НА КАКОЙ ЭЛЕМЕНТ.

  <ТИП УКАЗАТЕЛЯ>::=^<ИДЕНТИФИКАТОР ТИПА>

     ПРИМЕРЫ ОПРЕДЕЛЕНИЙ ТИПОВ:

  ЦВЕТ = (КРАСН, ОРАНЖ, ЖЕЛТ, ЗЕЛ, ГОЛУБОЙ, СИНИЙ, ФИОЛ)
  ПОЛ = (МУЖ,ЖЕН)
  TEXT = FILE OF CHAR
  ФОРМА = (ТРЕУГОЛЬНИК,ПРЯМОУГОЛЬНИК,КРУГ)
  КАРТА = ARRAY[1..80] OF CNAR
  ALFA = ARRAY[1..ALFALENG] OF CHAR
  КОМПЛ = RECORD RE, IM: REAL END
  ЛИЦО = RECORD ФАМИЛИЯ,ИМЯ:ALFA;
         ВОЗРАСТ:INTEGER;
         ЖЕНАТ:BOOLEAN;
         ОТЕЦ,РЕБЕНОК,БРАТ:^ЛИЦО;
                               CTP. 17

                     

ЩИ1.700.016 ПО.04-01 35


  CASE РОД: ПОЛ OF
       МУЖ: (ВОЕННООБЯЗАН,ЛЫС:BOOLEAN);
       ЖЕН: (БЕРЕМ:BOOLEAN;
            МЕРКА:ARRAY[1..3] OF INTEGER)
  END



        5.3. ОПИСАНИЕ И ИЗОБРАЖЕНИЕ ПЕРЕМЕННЫХ



       ОПИСАНИЯ  ПЕРЕМЕННЫХ  СОСТОЯТ  ИЗ  СПИСКА   ИДЕНТИФИКАТОРОВ,
  ОБОЗНАЧАЮЩИХ НОВЫЕ ПЕРЕМЕННЫЕ, ЗА КОТОРЫМИ СЛЕДУЕТ ИХ ТИП:

  <ОПИСАНИЕ ПЕРЕМЕННОЙ>::=
           <ИДЕНТИФИКАТОР>(*,<ИДEНТИФИКАТОР>*):<ТИП>

       КАЖДОЕ ОПИСАНИЕ ПЕРЕМЕННОЙ-ФАЙЛА "Ф" С КОМПОНЕНТАМИ ТИПА "Т"
  ПОДРАЗУМЕВАЕТ ДОПОЛНИТЕЛЬНОЕ  ОПИСАНИЕ  ТАК  НАЗЫВАЕМОЙ  БУФЕРНОЙ
  ПЕРЕМЕННОЙ ТИПА "Т". ЭТА БУФЕРНАЯ ПЕРЕМЕННАЯ  ИЗОБРАЖАЕТСЯ  Ф^  И
  СЛУЖИТ ДЛЯ ПРИСОЕДИНЕНИЯ К ФАЙЛУ КОМПОНЕНТ ПРИ ЕГО  ЗАПОЛНЕНИИ  И
  ДЛЯ ПОЛУЧЕНИЯ ДОСТУПА К ФАЙЛУ ПРИ ЧТЕНИИ.

       В  ОТДЕЛЬНЫХ  СЛУЧАЯХ  БЫВАЕТ   УДОБНО   ИМЕТЬ   ВОЗМОЖНОСТЬ
  ОБРАЩАТЬСЯ К АБСОЛЮТНЫМ ЯЧЕЙКАМ  ПАМЯТИ,  НАПРИМЕР,  К  РЕГИСТРАМ
  ВНЕШНИХ УСТРОЙСТВ ИЛИ ТАБЛИЦАМ  ОПЕРАЦИОННОЙ  СИСТЕМЫ.  ДЛЯ  ЭТОЙ
  ЦЕЛИ В ДАННОМ ПАСКАЛЕ СЛЕДУЕТ ИСПОЛЬЗОВАТЬ КЛЮЧЕВОЕ СЛОВО  ORIGIN
  В ОБ'ЯВЛЕНИИ ПЕРЕМЕННОЙ. НАПРИМЕР, СЛЕДУЮЩАЯ ПРОГРАММА  СЧИТЫВАЕТ
  ЗНАК С КЛАВИАТУРЫ СИСТЕМНОГО ТЕРМИНАЛА НА ФИЗИЧЕСКОМ УРОВНЕ:

         CONST   READY   =200B;
         VAR     KBCSR ORIGIN 177560B,
                 KBDAT ORIGIN 177562B:   INTEGER;
                 CH:CHAR;
         BEGIN
                 WHILE (KBCSR AND READY) = 0 DO; (*ЖДАТЬ*)
                 C := CHR(KBDAТ);
         END.


    ПРИМЕРЫ:

  X, Y, Z: REAL
  U, V: КОМПЛ
  I, J: INTEGER
  K: 0..9
  P, Q: BOOLEAN
  ОПЕРАЦИЯ: (ПЛЮС, МИНУС, УМНОЖ)
  A: ARRAY [0..63] OF REAL
  B: ARRAY [ЦВЕТ, BOOLEAN] OF КОМПЛ
  Ц: ЦВЕТ
  F: FILE OF CHAR
  ОТТЕНОК1, ОТТЕНОК2: SET OF ЦВЕТ
  P1, P2: ^ЛИЦО

       ИЗОБРАЖЕНИЯ ПЕРЕМЕННЫХ ОБОЗНАЧАЮТ  ЛИБО  ПОЛНУЮ  ПЕРЕМЕННУЮ,
  ЛИБО НЕКОТОРУЮ КОМПОНЕНТУ ПЕРЕМEННОЙ, ЛИБО ПЕРЕМEННУЮ, НА КОТОРУЮ
                               CTP. 18

                     

ЩИ1.700.016 ПО.04-01 35


  ССЫЛАЕТСЯ НЕКОТОРЫЙ УКАЗАТЕЛЬ. ПРЕДПОЛАГАЕТСЯ, ЧТО  ПЕРЕМЕННЫЕ  В
  ПОСЛЕДУЮЩИХ ПРИМЕРАХ ОПИСАНЫ, КАК УКАЗАНО ВЫШЕ.

  <ПЕРЕМЕННАЯ>::= <ПОЛНАЯ ПЕРЕМЕННАЯ> ! <КОМПОНЕНТНАЯ
                  ПЕРЕМЕННАЯ> ! <УКАЗУЕМАЯ ПЕРЕМЕННАЯ>



      5.3.1. ПОЛНЫЕ ПЕРЕМЕННЫЕ



       ПОЛНАЯ ПЕРЕМЕННАЯ ИЗОБРАЖАЕТСЯ СВОИМ ИДЕНТИФИКАТОРОМ:

  <ПОЛНАЯ ПЕРЕМЕННАЯ>::= <ИДЕНТИФИКАТОР ПЕРЕМЕННОЙ>
  <ИДЕНТИФИКАТОР ПЕРЕМЕННОЙ>::= <ИДЕНТИФИКАТОР>




      5.3.2. КОМПОНЕНТНЫЕ ПЕРЕМЕННЫЕ



       КОМПОНЕНТНАЯ   ПЕРЕМЕННАЯ    ИЗОБРАЖАЕТСЯ    СООТВЕТСТВУЮЩЕЙ
  ПЕРЕМЕННОЙ,  ЗА  КОТОРОЙ  СЛЕДУЕТ  ЗАДАЮЩИЙ   НУЖНУЮ   КОМПОНЕНТУ
  СЕЛЕКТОР. ФОРМА СЕЛЕКТОРА ЗАВИСИТ  ОТ  СПОСОБА  ОРГАНИЗАЦИИ  ТИПА
  ПЕРЕМЕННОЙ:

  <КОМПОНЕНТНАЯ ПЕРЕМЕННАЯ>::= <ПЕРЕМЕННАЯ С ИНДЕКСАМИ> !
                           <УКАЗАТEЛЬ ПОЛЯ> ! <БУФЕР ФАЙЛА>



    5.3.2.1. ПЕРЕМЕННЫЕ С ИНДЕКСАМИ



       КОМПОНЕНТА  N-МЕРНОЙ   ПЕРЕМЕННОЙ-МАССИВА   ОБОЗНАЧАЕТСЯ   С
  ПОМОЩЬЮ ЭТОЙ ПЕРЕМЕННОЙ, ЗА КОТОРОЙ СЛЕДУЕТ СПИСОК ИЗ N ИНДЕКСНЫХ
  ВЫРАЖЕНИЙ:

  <ПЕРЕМЕННАЯ С ИНДЕКСОМ>::=
         <ПЕРЕМЕННАЯ-МАССИВ>[<ВЫРАЖЕНИЕ> (*,<ВЫРАЖЕНИЕ>*)]
  <ПЕРЕМЕННАЯ-МАССИВ>::= <ПЕРЕМЕННАЯ>

       ТИПЫ  ИНДЕКСНЫХ  ВЫРАЖЕНИЙ  ДОЛЖНЫ   СООТВЕТСТВОВАТЬ   ТИПАМ
  ИНДЕКСОВ В ОПИСАНИИ СООТВЕТСТВУЮЩЕГО ТИПА МАССИВА.

     ПРИМЕРЫ:

  A [12]
  A [I+J]
  B [КРАСН,TRUE]
  B [SUCC(Ц),P AND Q]



                               CTP. 19

                     

ЩИ1.700.016 ПО.04-01 35


    5.3.2.2. УКАЗАТЕЛИ ПОЛЕЙ



       КОМПОНЕНТА     ПЕРЕМЕННОЙ-ЗАПИСИ     ОБОЗНАЧАЕТСЯ      ЧЕРЕЗ
  СООТВЕТСТВУЮЩУЮ    ПЕРЕМЕННУЮ-ЗАПИСЬ,    ЗА    КОТОРОЙ    СЛЕДУЕТ
  ИДЕНТИФИКАТОР ПОЛЯ НУЖНОЙ КОМПОНЕНТЫ:

  <УКАЗАТЕЛЬ ПОЛЯ>::= <ПЕРЕМЕННАЯ-ЗАПИСЬ>.<ИДЕНТИФИКАТОР
                                             ПОЛЯ>
  <ПЕРЕМЕННАЯ-ЗАПИСЬ>::= <ПЕРЕМЕННАЯ>
  <ИДЕНТИФИКАТОР ПОЛЯ>::= <ИДЕНТИФИКАТОР>

    ПРИМЕРЫ:

  U.RE
  B [КРАСН, TRUE].IM
  P2^.МЕРКА



    5.3.2.3. БУФЕРЫ ФАЙЛОВ



       В  ЛЮБОЙ  МОМЕНТ  НЕПОСРЕДСТВЕННО   ДОСТУПНА   ТОЛЬКО   ОДНА
  КОМПОНЕНТА,  ОПРЕДЕЛЯЕМАЯ  ТЕКУЩЕЙ  ПОЗИЦИЕЙ   ФАЙЛА   (НАПРИМЕР,
  ГОЛОВКОЙ СЧИТЫВАНИЯ-ЗАПИСИ). ЭТА  КОМПОНЕНТА  НАЗЫВАЕТСЯ  ТЕКУЩЕЙ
  КОМПОНЕНТОЙ  ФАЙЛА;  ОНА  ПРЕДСТАВЛЯЕТСЯ  ПЕРЕМЕННОЙ,  НАЗЫВАЕМОЙ
  БУФЕРОМ ФАЙЛА:

  <БУФЕР ФАЙЛА>::= <ПЕРЕМЕННАЯ-ФАЙЛ>
  <ПЕРЕМЕННАЯ-ФАЙЛ>::= <ПЕРЕМЕННАЯ>



      5.3.3. УКАЗУЕМЫЕ ПЕРЕМЕННЫЕ



  <УКАЗУЕМАЯ ПЕРЕМЕННАЯ>::= <ПЕРЕМЕННАЯ-УКАЗАТЕЛЬ>^
  <ПЕРЕМЕННАЯ-УКАЗАТЕЛЬ>::= <ПЕРЕМЕННАЯ>

       ЕСЛИ "P"  ЯВЛЯЕТСЯ  ПЕРЕМЕННОЙ-УКАЗАТЕЛЕМ,  ЗАКРЕПЛЕННОЙ  ЗА
  ТИПОМ "Т", ТО "P" ОБОЗНАЧАЕТ ЭТУ  ПЕРЕМЕННУЮ  И  ЕЕ  УКАЗАТЕЛЬНОЕ
  ЗНАЧЕНИЕ, ТОГДА КАК P^ ОБОЗНАЧАЕТ ПЕРЕМЕННУЮ ТИПА "Т", НА КОТОРУЮ
  ССЫЛАЕТСЯ "P":

    ПРИМЕРЫ:

  P1^.ОТЕЦ
  P1^.БРАТ^.РЕБЕНОК






                               CTP. 20

                     

ЩИ1.700.016 ПО.04-01 35


                            6. ВЫРАЖЕНИЯ




       ВЫРАЖЕНИЯ - ЭТО КОНСТРУКЦИИ, ЗАДАЮЩИЕ ПРАВИЛА ВЫЧИСЛЕНИЙ ДЛЯ
  ОПРЕДЕЛЕНИЯ  ЗНАЧЕНИЙ  ПЕРЕМЕННЫХ  И  ПОЛУЧЕНИЯ  НОВЫХ   ЗНАЧЕНИЙ
  ПРИМЕНЕНИЕМ ДЕЙСТВИЙ. ОНИ СОСТОЯТ ИЗ ОПЕРАНДОВ, Т.Е. ПЕРЕМЕННЫХ И
  КОНСТАНТ, ЗНАКОВ ОПЕРАЦИЙ И ФУНКЦИЙ.

       ПРАВИЛА  КОМПОЗИЦИЙ  ЗАДАЮТ  ПРИОРИТЕТЫ   ЗНАКОВ   ОПЕРАЦИЙ,
  РАЗБИВАЯ ИХ НА ЧЕТЫРЕ  КЛАССА.  НАИВЫСШИЙ  ПРИОРИТЕТ  ИМЕЕТ  ЗНАК
  ОПЕРАЦИИ NOT, ЗАТЕМ СЛЕДУЮТ ТАК НАЗЫВАЕМЫЕ  ЗНАКИ  ОПЕРАЦИЙ  ТИПА
  УМНОЖЕНИЯ, ЗАТЕМ - ЗНАКИ ОПЕРАЦИЙ ТИПА СЛОЖЕНИЯ И НАКОНЕЦ - ЗНАКИ
  ОТНОШЕНИЙ.   ПОСЛЕДОВАТЕЛЬНОСТЬ   ОПЕРАЦИЙ   ОДНОГО    ПРИОРИТЕТА
  ИСПОЛНЯЕТСЯ СЛЕВА НАПРАВО. ЭТИ ОТНОШЕНИЯ ПРИОРИТЕТОВ  ОТРАЖЕНЫ  В
  СЛЕДУЮЩЕМ СИНТАКСИСЕ:

  <МНОЖИТЕЛЬ> ::= <ПЕРЕМЕННАЯ> ! <КОНСТАНТА БЕЗ ЗНАКА> !
                  <ОБРАЩЕНИЕ К ФУНКЦИИ> ! <МНОЖЕСТВО>
                 (<ВЫРАЖЕНИЕ>) ! NOT<МНОЖИТЕЛЬ>
  <МНОЖЕСТВО> ::= [<ВЫРАЖЕНИЕ> (*, <ВЫРАЖЕНИЕ> *) ] ! [ ]
  <ТЕРМ> ::= <МНОЖИТЕЛЬ> !
           <ТЕРМ><ЗНАК ОПЕРАЦИИ ТИПА УМНОЖЕНИЯ><МНОЖИТЕЛЬ>
  <ПРОСТОЕ ВЫРАЖЕНИЕ> ::= <ТЕРМ> ! <ПРОСТОЕ ВЫРАЖЕНИЕ>
                     <ЗНАК ОПЕРАЦИИ ТИПА СЛОЖЕНИЯ><ТЕРМ> !
                     <ЗНАК ОПЕРАЦИИ ТИПА СЛОЖЕНИЯ><ТЕРМ>
  <ВЫРАЖЕНИЕ> ::= <ПРОСТОЕ ВЫРАЖЕНИЕ> !
                <ПРОСТОЕ ВЫРАЖЕНИЕ><ЗНАК ОТНОШЕНИЯ><ПРОСТОЕ
                 ВЫРАЖЕНИЕ>

       ВЫРАЖЕНИЯ,  ЯВЛЯЮЩИЕСЯ  ЭЛЕМЕНТАМИ  МНОЖЕСТВА,  ДОЛЖНЫ  БЫТЬ
  ОДНОГО И ТОГО ЖЕ ТИПА, ЯВЛЯЮЩЕГОСЯ ТИПОМ БАЗЫ ДАННОГО  МНОЖЕСТВА.
  "[]" ОБОЗНАЧАЕТ ПУСТОЕ МНОЖЕСТВО.

       ПРИМЕРЫ:
  МНОЖИТЕЛИ:             Х
                         15
                         (Х+Y+Z)
                         SIN(X+Y)
                         [КРАСН, Ц, ЗЕЛ]
                         ^Р
  ТЕРМЫ:                 X*Y
                         I/(1-I)
                         P AND Q
                         (X<=Y) AND (Y<Z)
  ПРОСТЫЕ ВЫРАЖЕНИЯ:     X+Y
                         -X
                         ОТТЕНОК1 OR ОТТЕНОК2
                         I*J+1
  ВЫРАЖЕНИЯ:             X=15
                         Ц IN ОТТЕНОК1






                               CTP. 21

                     

ЩИ1.700.016 ПО.04-01 35


        6.1. ОПЕРАЦИЯ ОТРИЦАНИЯ



       ЗНАК ОПЕРАЦИИ "NOT", ПРИМЕНИМЫЙ К ОПЕРАНДУ ЛОГИЧЕСКОГО ТИПА,
  ОБОЗНАЧАЕТ ОТРИЦАНИЕ.



        6.2. ОПЕРАЦИИ ТИПА УМНОЖЕНИЯ



  <ЗНАК ОПЕРАЦИИ ТИПА УМНОЖЕНИЯ>::= *!/!DIV!MOD!AND

  -----------------------------------------------------------
    ЗНАК  ! ОПЕРАЦИЯ   !    ТИП         !     ТИП
  ОПЕРАЦИИ!            !  ОПЕРАНДОВ     ! РЕЗУЛЬТАТА
  -----------------------------------------------------------
     *    ! УМНОЖЕНИЕ  ! REAL, INTEGER  ! INTEGER, EСЛИ ОБА
          !            !                ! ОПЕРАНДА ИМЕЮТ
          !            !                ! ЭТОТ ТИП, REAL В
          !            !                ! ОСТАЛЬНЫХ СЛУЧАЯХ
     *    !ПЕРЕСЕЧЕНИЕ ! ЛЮБОЙ ТИП МНО- !
          ! МНОЖЕСТВ   ! ЖЕСТВ Т        !   Т
          !            !                !
     /    ! ДЕЛЕНИЕ    ! REAL, INTEGER  ! REAL
          !            !                !
    DIV   ! ДЕЛЕНИЕ    !\               !
          ! НАЦЕЛО     ! !              !
          !(С УСЕЧЕНИЕМ! !              !
          !            ! !              !
    MOD   ! НАХОЖДЕНИЕ ! ! INTEGER      !  INTEGER
          ! OСТАТКА    ! !              !
          ! ОТ ДЕЛЕНИЯ ! !              !
          ! НАЦЕЛО     !/               !
          !            !                !
    AND   ! КОН'ЮНКЦИЯ ! BOOLEAN        ! BOOLEAN



        6.3. ОПЕРАЦИИ ТИПА СЛОЖЕНИЯ




  <ЗНАК ОПЕРАЦИИ ТИПА СЛОЖЕНИЯ> ::= ! + ! - ! OR











                               CTP. 22

                     

ЩИ1.700.016 ПО.04-01 35


  ------------------------------------------------------------
      ЗНАК   !    ОПЕРАЦИЯ  !      ТИП     !      ТИП
    ОПЕРАЦИИ !              !  ОПЕРАНДОВ   !  РЕЗУЛЬТАТА
  -------------------------------------------------------------
     +       ! ОБ'ЕДИНЕНИЕ ! ЛЮБОЙ ТИП     !
             ! МНОЖЕСТВ    ! МНОЖЕСТВА Т   !  Т
     +       ! СЛОЖЕНИЕ    ! REAL, INTEGER ! INTEGER, ЕСЛИ
     -       ! ВЫЧИТАНИЕ   ! REAL, INTEGER ! ОБА OПЕРАНДА
             !             !               ! ИМЕЮТ ЭТОТ ТИП,
             !             !               ! REAL В ОСТАЛЬ-
             !             !               ! НЫХ СЛУЧАЯХ
     -       ! РАЗНОСТЬ    ! ЛЮБОЙ ТИП     !
             ! МНОЖЕСТВ    ! МНОЖЕСТВА Т   !  Т
     OR      ! ДИЗ'ЮНКЦИЯ  ! BOOLEAN       ! BOOLEAN

       ЗНАКИ ОПЕРАЦИЙ "-" И "+", ЕСЛИ ОНИ ИСПОЛЬЗУЮТСЯ  С  ОДНИМ  И
  ТЕМ ЖЕ ОПЕРАНДОМ, ОБОЗНАЧАЮТ  СООТВЕТСТВЕННО  ИЗМЕНЕНИЕ  ЗНАКА  И
  ТОЖДЕСТВЕННУЮ ОПЕРАЦИЮ.



        6.4. ЛОГИЧЕСКИЕ ОПЕРАЦИИ С ЦЕЛЫМИ ЧИСЛАМИ



       БУЛЕВСКИЕ ОПЕРАЦИИ AND, OR И NOT ИМЕЮТ  РАСШИРЕННУЮ  ОБЛАСТЬ
  ДЕЙСТВИЯ И МОГУТ ПРИМЕНЯТЬСЯ  ДЛЯ  ЦЕЛЫХ  ЧИСЕЛ.  ОПЕРАЦИЯ  БУДЕТ
  ВЫПОЛНЯТЬСЯ НАД 16 РАЗРЯДАМИ ОПЕРАНДОВ. ЭТО РАСШИРЕНИЕ  ПОЗВОЛЯЕТ
  ПРОИЗВОДИТЬ ПРОВЕРКУ  И  УСТАНОВКУ  ОТДЕЛЬНЫХ  РАЗРЯДОВ  В  ЦЕЛЫХ
  ПЕРЕМЕННЫХ (НАПРИМЕР, ДЛЯ РЕГИСТРОВ ВНЕШНИХ УСТРОЙСТВ). ПРИМЕР:

         BYTE := ORD(CH) AND 377B;



        6.5. ЗНАКИ ОТНОШЕНИЙ



  <ЗНАК ОТНОШЕНИЯ> ::= ! = ! <> ! < ! <= ! >= ! > ! IN

  ------------------------------------------------------------
  ЗНАК ОТНОШЕНИЯ  !         ТИП ОПЕРАНДОВ     ! РЕЗУЛЬТАТ
  ------------------------------------------------------------
    =     <>      ! ЛЮБОЙ ТИП, КРОМЕ ТИПА     ! BOOLEAN
                  !   ФАЙЛА                   !
    <  >  <=  >=  ! ЛЮБОЙ СКАЛЯРНЫЙ ТИП ИЛИ   ! BOOLEAN
                  !   ОТРЕЗОК ТИПА            !
        IN        ! ЛЮБОЙ СКАЛЯРНЫЙ ТИП ИЛИ   ! BOOLEAN
                  !   ОТРЕЗОК ТИПА И СВЯЗАН-  !
                  !   НЫЙ С НИМ СООТВЕТСТВУЮ- !
                  !   ЩИЙ ТИП МНОЖЕСТВ        !

       ЗАМЕТИМ, ЧТО ВСЕ  СКАЛЯРНЫЕ  ТИПЫ  ОПРЕДЕЛЯЮТ  УПОРЯДОЧЕННЫЕ
  МНОЖЕСТВА ЗНАЧЕНИЙ. В ЧАСТНОСТИ, FALSE<TRUE. ЗНАКИ ОТНОШЕНИЙ "<="
  И ">=" МОЖНО ИСПОЛЬЗОВАТЬ ДЛЯ СРАВНЕНИЯ ЗНАЧЕНИЙ ТИПА  МНОЖЕСТВА,
  ПРИ ЭТОМ ОНИ ОБОЗНАЧАЮТ СООТВЕТСТВЕННО ОТНОШЕНИЯ ВКЛЮЧЕНИЯ.

                               CTP. 23

                     

ЩИ1.700.016 ПО.04-01 35


       ЗНАКИ ОТНОШЕНИЙ "<=", "<", ">", ">=" МОЖНО ТАКЖЕ ПРИМЕНЯТЬ К
  УПАКОВАННЫМ МАССИВАМ ЛИТЕРНОГО ТИПА; В ЭТОМ СЛУЧАЕ ОНИ ОБОЗНАЧАЮТ
  АЛФАВИТНОЕ ОТНОШЕНИЕ ПОРЯДКА, СООТВЕТСТВУЮЩЕЕ НАЛИЧНОМУ МНОЖЕСТВУ
  ЛИТЕР.



        6.6. УКАЗАТЕЛИ ФУНКЦИИ



       УКАЗАТЕЛЬ ФУНКЦИИ ПРЕДПИСЫВАЕТ ОБРАЩЕНИЕ  К  СООТВЕТСТВУЮЩЕЙ
  ПРОЦЕДУРЕ-ФУНКЦИИ.  ОНО  СОСТОИТ  ИЗ  ОБОЗНАЧАЮЩЕГО  ЭТУ  ФУНКЦИЮ
  ИДЕНТИФИКАТОРА  И  СПИСКА  ФАКТИЧЕСКИХ   ПАРАМЕТРОВ.   ПАРАМЕТРЫ,
  КОТОРЫМИ МОГУТ БЫТЬ ПЕРЕМЕННЫЕ, ВЫРАЖЕНИЯ, ПРОЦЕДУРЫ  И  ФУНКЦИИ,
  ПОДСТАВЛЯЮТСЯ ВМЕСТО СООТВЕТСТВУЮЩИХ ФОРМАЛЬНЫХ ПАРАМЕТРОВ:

  <УКАЗАТЕЛЬ ФУНКЦИИ> ::= <ИДЕНТИФИКАТОР ФУНКЦИИ> !
                    <ИДЕНТИФИКАТОР ФУНКЦИИ>(<ФАКТИЧЕСКИЙ
                     ПАРАМЕТР>(*, <ФАКТИЧЕСКИЙ ПАРАМЕТР> *))
  <ИДЕНТИФИКАТОР ФУНКЦИИ> ::= <ИДЕНТИФИКАТОР>


       ПРИМЕРЫ:

 SUM(A,100)
 SIN(X+Y)
 EOF(F)
 ORD(F^)



        6.7. АДРЕСНЫЙ ОПЕРАТОР "@"



       В СОСТАВ ДАННОГО  ЯЗЫКА  ПАСКАЛЬ  ВХОДИТ  УНАРНЫЙ  ОПЕРАТОР,
  ОБОЗНАЧАЕМЫЙ "@". ЕСЛИ ЕГО ИСПОЛЬЗОВАТЬ С ПЕРЕМЕННОЙ ТИПА "A", ТО
  РЕЗУЛЬТАТОМ БУДЕТ ЗНАЧЕНИЕ ТИПА "^A" (УКАЗАТЕЛЬ НА "A"). АДРЕСНАЯ
  ОПЕРАЦИЯ  МОЖЕТ   ИСПОЛЬЗОВАТЬСЯ   ДЛЯ   РАБОТЫ   СО   СПИСКОВЫМИ
  СТРУКТУРАМИ  ДАННЫХ  ИЛИ  ДЛЯ  ПЕРЕДАЧИ  АДРЕСОВ   В   ПРОГРАММЫ,
  НАПИСАННЫЕ НА ЯЗЫКЕ МАКРОАССЕМБЛЕР. НАПРИМЕР:

         TYPE    BLOCK=ARRAY[0..511] OF CHAR;
         VAR     BUFFER:BLOCK;
         BEGIN
                 (* ЗАПОМНИТЬ АДРЕС БУФЕРА *)
                 XRB.XRLOC:=@BUFFER
         END;









                               CTP. 24

                     

ЩИ1.700.016 ПО.04-01 35


                            7. ОПЕРАТОРЫ




       ОПЕРАТОРЫ  ОБОЗНАЧАЮТ  АЛГОРИТМИЧЕСКИЕ  ДЕЙСТВИЯ.  ПРО   НИХ
  ГОВОРЯТ, ЧТО ОНИ  МОГУТ  БЫТЬ  ВЫПОЛНЕНЫ.  ОПЕРАТОРЫ  МОГУТ  БЫТЬ
  СНАБЖЕНЫ МЕТКОЙ, К КОТОРОЙ МОГУТ ОТСЫЛАТЬ ОПЕРАТОРЫ ПЕРЕХОДА:

  <ОПЕРАТОР> ::= <НЕПОМЕЧЕННЫЙ ОПЕРАТОР> !
                 < МЕТКА>:<НЕПОМЕЧЕННЫЙ ОПЕРАТОР>
  <НЕПОМЕЧЕННЫЙ ОПЕРАТОР> ::= <ПРОСТОЙ ОПЕРАТОР> !
                             <СТРУКТУРНЫЙ ОПЕРАТОР>
  <МЕТКА> ::= <ЦЕЛОЕ БЕЗ ЗНАКА>



        7.1. ПРОСТЫЕ ОПЕРАТОРЫ



       ПРОСТЫЕ ОПЕРАТОРЫ - ЭТО ОПЕРАТОРЫ, НИКАКАЯ ЧАСТЬ КОТОРЫХ  НЕ
  СОДЕРЖИТ В СЕБЕ ДРУГИХ ОПЕРАТОРОВ.

  <ПРОСТОЙ ОПЕРАТОР> ::= <ОПЕРАТОР ПРИСВАИВАНИЯ> !
                         <ОПЕРАТОР ПРОЦЕДУРЫ> !
                         <ОПЕРАТОР ПЕРЕХОДА> !
                         <ПУСТОЙ ОПЕРАТОР>



      7.1.1. ОПЕРАТОРЫ ПРИСВАИВАНИЯ



       ОПЕРАТОР ПРИСВАИВАНИЯ СЛУЖИТ ДЛЯ  ЗАМЕНЫ  ТЕКУЩЕГО  ЗНАЧЕНИЯ
  ПЕРЕМЕННОЙ НОВЫМ ЗНАЧЕНИЕМ, ЗАДАВАЕМЫМ НЕКОТОРЫМ ВЫРАЖЕНИЕМ.

  <ОПЕРАТОР ПРИСВАИВАНИЯ> ::= <ПЕРЕМЕННАЯ>  :=<ВЫРАЖЕНИЕ> !
                     <ИДЕНТИФИКАТОР ФУНКЦИИ> :=<ВЫРАЖЕНИЕ>

       ПЕРЕМЕННАЯ (СООТВЕТСТВЕННО ФУНКЦИЯ) И ВЫРАЖЕНИЕ ДОЛЖНО  БЫТЬ
  ОДНОГО ТИПА; ДОПУСКАЮТСЯ СЛЕДУЮЩИЕ ИСКЛЮЧЕНИЯ:

       1. ПЕРЕМЕННАЯ ИМЕЕТ ВЕЩЕСТВЕННЫЙ ТИП, А  ВЫРАЖЕНИЕ  -  ЦЕЛЫЙ
  ИЛИ ЕГО ОТРЕЗОК;

       2. ТИП  ВЫРАЖЕНИЯ  ЯВЛЯЕТСЯ  ОТРЕЗКОМ  ТИПА  СООТВЕТСТВУЮЩЕЙ
  ПЕРЕМЕННОЙ ИЛИ НАОБОРОТ.

      ПРИМЕРЫ:

  X:=T+Z
  P:=(1<=I) AND (I<100)
  I:=SQR(K)-(I*J)
  ОТТЕНОК:=[ГОЛУБОЙ,SUCC(Ц)]


                               CTP. 25

                     

ЩИ1.700.016 ПО.04-01 35


      7.1.2. ОПЕРАТОРЫ ПРОЦЕДУР



       ОПЕРАТОР  ПРОЦЕДУРЫ   СЛУЖИТ   ДЛЯ   ВЫПОЛНЕНИЯ   ПРОЦЕДУРЫ,
  ОБОЗНАЧЕННОЙ ИДЕНТИФИКАТОРОМ ПРОЦЕДУРЫ. ОПЕРАТОР ПРОЦЕДУРЫ  МОЖЕТ
  СОДЕРЖАТЬ СПИСОК ФАКТИЧЕСКИХ ПАРАМЕТРОВ, ПОДСТАВЛЯЕМЫХ  НА  МЕСТО
  СООТВЕТСТВУЮЩИХ ИМ ФОРМАЛЬНЫХ ПАРАМЕТРОВ, ОПРЕДЕЛЕННЫХ В ОПИСАНИИ
  ПРОЦЕДУРЫ. СООТВЕТСТВИЕ УСТАНАВЛИВАЕТСЯ ПО ПОЗИЦИЯМ ПАРАМЕТРОВ  В
  СПИСКАХ ФОРМАЛЬНЫХ И ФАКТИЧЕСКИХ  ПАРАМЕТРОВ.  СУЩЕСТВУЕТ  ЧЕТЫРЕ
  ВИДА ПАРАМЕТРОВ: ТАК НАЗЫВАЕМЫЕ  ПАРАМЕТРЫ-ЗНАЧЕНИЯ,  ПЕРЕМЕННЫЕ,
  ПРОЦЕДУРЫ  (СООТВЕТСТВУЮЩИЙ  ФАКТИЧЕСКИЙ  ПАРАМЕТР  ДОЛЖЕН   БЫТЬ
  ИДЕНТИФИКАТОРОМ  ПРОЦЕДУРЫ)  И   ПАРАМЕТРЫ-ФУНКЦИИ   (ФАКТИЧЕСКИЕ
  ПАРАМЕТРЫ - ИДЕНТИФИКАТОР ФУНКЦИИ).

       СТАНДАРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ  (ОФОРМЛЕННЫЕ  В  ЯЗЫКЕ)  НЕ
  МОГУТ ПЕРЕДАВАТЬСЯ В КАЧЕСТВЕ ПАРАМЕТРОВ. ЭТО  ОГРАНИЧЕНИЕ  МОЖНО
  ОБОЙТИ  ПУТЕМ  ОПРЕДЕЛЕНИЯ  ВТОРОЙ  ПРОЦЕДУРЫ,   КОТОРАЯ   ПРОСТО
  ВЫЗЫВАЕТ СТАНДАРТНУЮ, НАПРИМЕР:

         FUNCTION SINE(X:REAL): REAL;
         BEGIN SINE:=SIN(X) END;

       В СЛУЧАЕ  ПАРАМЕТРОВ-ЗНАЧЕНИЙ  ФАКТИЧЕСКИЙ  ПАРАМЕТР  ДОЛЖЕН
  БЫТЬ  ВЫРАЖЕНИЕМ  (В  ЧАСТНОСТИ  ПЕРЕМЕННОЙ).   ЕСЛИ   ФОРМАЛЬНЫЙ
  ПАРАМЕТР ЯВЛЯЕТСЯ ЛОКАЛЬНОЙ ПЕРЕМЕННОЙ ВЫЗЫВАЕМОЙ  ПРОЦЕДУРЫ,  ТО
  ТЕКУЩЕЕ  ЗНАЧЕНИЕ  ВЫРАЖЕНИЯ  ПРИСВАИВАЕТСЯ  ЭТОЙ  ПЕРЕМЕННОЙ   В
  КАЧЕСТВЕ ЕЕ НАЧАЛЬНОГО ЗНАЧЕНИЯ. В  СЛУЧАЕ  ПАРАМЕТРОВ-ПЕРЕМЕННЫХ
  ФАКТИЧЕСКИМ ПАРАМЕТРОМ ДОЛЖНА  БЫТЬ  ПЕРЕМЕННАЯ.  СООТВЕТСТВУЮЩИЙ
  ФОРМАЛЬНЫЙ ПАРАМЕТР ПРЕДСТАВЛЯЕТ ЭТУ  ФАКТИЧЕСКУЮ  ПЕРЕМЕННУЮ  ВО
  ВСЕ  ВРЕМЯ  ВЫПОЛНЕНИЯ  ДАННОЙ  ПРОЦЕДУРЫ.  ЕСЛИ  ЭТА  ПЕРЕМЕННАЯ
  ЯВЛЯЕТСЯ КОМПОНЕНТОЙ НЕКОТОРОГО МАССИВА, ТО ЕЕ ИНДЕКС ВЫЧИСЛЯЕТСЯ
  ПРИ ВЫЗОВЕ ПРОЦЕДУРЫ. ПАРАМЕТР-ПЕРЕМЕННУЮ СЛЕДУЕТ ИСПОЛЬЗОВАТЬ ВО
  ВСЕХ СЛУЧАЯХ, КОГДА ПАРАМЕТР СЛУЖИТ ДЛЯ ПРЕДСТАВЛЕНИЯ  РЕЗУЛЬТАТА
  ПРОЦЕДУРЫ.

  <ОПЕРАТОР ПРОЦЕДУРЫ>::= <ИДЕНТИФИКАТОР ПРОЦЕДУРЫ> !
           <ИДЕНТИФИКАТОР ПРОЦЕДУРЫ>(<ФАКТИЧЕСКИЙ ПАРАМЕТР>
           (*, <ФАКТИЧЕСКИЙ ПАРАМЕТР>*) )
  <ИДЕНТИФИКАТОР ПРОЦЕДУРЫ>::=<ИДЕНТИФИКАТОР>
  <ФAКТИЧЕСКИЙ ПАРАМЕТР>::=<ВЫРАЖЕНИЕ> ! <ПЕРЕМЕННАЯ> !
        <ИДЕНТИФИКАТОР ПРОЦЕДУРЫ> ! <ИДЕНТИФИКАТОР ФУНКЦИИ>

      ПРИМЕРЫ:

  TRANSPOSE(A,N,M)
  BTSECT(FST,-1.0,+1.0,X)











                               CTP. 26

                     

ЩИ1.700.016 ПО.04-01 35


      7.1.3. ОПЕРАТОРЫ ПЕРЕХОДА



       ОПЕРАТОР ПЕРЕХОДА СЛУЖИТ ДЛЯ  УКАЗАНИЯ,  ЧТО  ДАЛЬШЕ  ДОЛЖНА
  ВЫПОЛНЯТЬСЯ  ТА   ЧАСТЬ   ПРОГРАММЫ,   ПЕРЕД   КОТОРОЙ   ПОМЕЩЕНА
  СООТВЕТСТВУЮЩАЯ МЕТКА:

  <ОПЕРАТОР ПЕРЕХОДА>::=GOTO <МЕТКА>

  НА ИСПОЛЬЗОВАНИЕ МЕТОК НАКЛАДЫВАЮТСЯ СЛЕДУЮЩИЕ ОГРАНИЧЕНИЯ:

       1) ОБЛАСТЬЮ ДЕЙСТВИЯ МЕТКИ ЯВЛЯЕТСЯ  ОПИСАНИЕ  ПРОЦЕДУРЫ,  В
  ПРЕДЕЛАХ КОТОРОЙ ОНА  ОПРЕДЕЛЕНА.  ТАКИМ  ОБРАЗОМ,  ИЗВНЕ  НЕЛЬЗЯ
  ВОЙТИ ВНУТРЬ ПРОЦЕДУРЫ;

       2)  ЕСЛИ  ОПЕРАТОР  ПЕРЕХОДА   ПЕРЕДАЕТ   УПРАВЛЕНИЕ   ВОВНЕ
  ПРОЦЕДУРЫ, ТО ЕГО МЕТКА  ДОЛЖНА  БЫТЬ  СПЕЦИФИЦИРОВАНА  ОПИСАНИЕМ
  МЕТКИ В ЗАГОЛОВКЕ ПРОЦЕДУРЫ, В КОТОРОЙ ЭТА МЕТКА ОПРЕДЕЛЕНА.



      7.1.4. ПУСТОЙ ОПЕРАТОР



       ПУСТОЙ ОПЕРАТОР НИКАК НЕ ОБОЗНАЧАЕТСЯ И НЕ ВЫЗЫВАЕТ  НИКАКИХ
  ДЕЙСТВИЙ.

               <ПУСТОЙ ОПЕРАТОР>::=



        7.2. СТРУКТУРНЫЕ ОПЕРАТОРЫ



       СТРУКТУРНЫЕ ОПЕРАТОРЫ ЯВЛЯЮТСЯ КОНСТРУКЦИЯМИ,  СОСТАВЛЕННЫМИ
  ИЗ  ДРУГИХ  ОПЕРАТОРОВ,  КОТОРЫЕ  ДОЛЖНЫ   БЫТЬ   ВЫПОЛНЕНЫ   ИЛИ
  ПОСЛЕДОВАТЕЛЬНО (СОСТАВНОЙ ОПЕРАТОР), ИЛИ ПОВТОРНО (ЦИКЛЫ).

  <СТРУКТУРНЫЙ ОПЕРАТОР>::=<СОСТАВНОЙ ОПЕРАТОР> !
                     <УСЛОВНЫЙ ОПЕРАТОР> ! <ОПЕРАТОР ЦИКЛА>
                     <ОПЕРАТОР НАД ЗАПИСЬЮ>














                               CTP. 27

                     

ЩИ1.700.016 ПО.04-01 35


      7.2.1. СОСТАВНЫЕ ОПЕРАТОРЫ



       СОСТАВНОЙ ОПЕРАТОР ПРЕДПИСЫВАЕТ ВЫПОЛНЕНИЕ СОСТАВЛЯЮЩИХ  ЕГО
  ОПЕРАТОРОВ В ПОРЯДКЕ ИХ НАПИСАНИЯ. СИМВОЛЫ BEGIN И END  ДЕЙСТВУЮТ
  КАК ОПЕРАТОРНЫЕ СКОБКИ.

  <СОСТАВНОЙ ОПЕРАТОР>::=BEGIN<ОПЕРАТОР>(*;<ОПЕРАТОР>*)ЕND

     ПРИМЕР:

      BEGIN Z:=X; X:=Y; Y:=Z END



      7.2.2. УСЛОВНЫЕ ОПЕРАТОРЫ



       УСЛОВНЫЙ   ОПЕРАТОР   НАЗНАЧАЕТ   К   ВЫПОЛНЕНИЮ   ОДИН   ИЗ
  СОСТАВЛЯЮЩИХ ЕГО ОПЕРАТОРОВ:

  <УСЛОВНЫЙ ОПЕРАТОР>::=<ОПЕРАТОР "IF">!
                             <ОПЕРАТОР "CASE">



    7.2.2.1. ОПЕРАТОР "IF"



       ОПЕРАТОР  "IF"  УКАЗЫВАЕТ,  ЧТО  НЕКОТОРЫЙ  ОПЕРАТОР  ДОЛЖЕН
  ВЫПОЛНЯТЬСЯ, ЕСЛИ ТОЛЬКО НЕКОТОРОЕ УСЛОВИЕ (ЛОГИЧЕСКОЕ ВЫРАЖЕНИЕ)
  ИСТИННО (TRUE). ЕСЛИ ЖЕ ОНО ИМЕЕТ  ЗНАЧЕНИЕ  FALSE,  TO  ЛИБО  НЕ
  ВЫПОЛНЯЕТСЯ  НИКАКОЙ   ОПЕРАТОР,   ЛИБО   ВЫПОЛНЯЕТСЯ   ОПЕРАТОР,
  СЛЕДУЮЩИЙ ЗА СИМBОЛОМ ELSE:

  <ОПЕРАТОР "IF">::=IF<ВЫРАЖЕНИЕ>THEN<ОПЕРАТОР> !
                  IF<ВЫРАЖЕНИЕ>THEN<ОПЕРАТОР>ELSE<ОПЕРАТОР>

       ВЫРАЖЕНИЕ МЕЖДУ СИМВОЛАМИ IF И THEN ДОЛЖНО ИМЕТЬ  ЛОГИЧЕСКИЙ
  ТИП.


       П_Р_И_М_Е_Ч_А_Н_И_Е.     СИНТАКСИЧЕСКАЯ     НЕОДНОЗНАЧНОСТЬ,
  ВОЗНИКАЮЩАЯ В КОНСТРУКЦИИ:

  IF <ВЫРАЖЕНИЕ1> ТHEN IF <ВЫРАЖЕНИЕ2> THEN <ОПЕРАТОР1>
                                       ELSE <ОПЕРАТОР2>

  РАЗРЕШАЕТСЯ ТОЛКОВАНИЕМ ЭТОЙ КОНСТРУКЦИИ КАК ЭКВИВАЛЕНТА ДЛЯ:






                               CTP. 28

                     

ЩИ1.700.016 ПО.04-01 35


  IF <ВЫРАЖЕНИЕ1>
  THEN BEGIN IF <ВЫРАЖЕНИЕ2>
             ТHEN<ОПЕРАТОР1>
             ELSE<ОПЕРАТОР2>
       END

     ПРИМЕРЫ:

    IF X=1.5 THEN Z:=X+Y ELSE Z:=1.5
    IF P1<>NIL THEN P1:=P1^.ОТЕЦ



    7.2.2.2. ОПЕРАТОР "CASE"



       ОПЕРАТОР "CASE" СОСТОИТ ИЗ ВЫРАЖЕНИЯ  (СЕЛЕКТОРА)  И  СПИСКА
  ОПЕРАТОРОВ, КАЖДЫЙ ИЗ  КОТОРЫХ  ПОМЕЧЕН  КОНСТАНТОЙ  СЕЛЕКТОРНОГО
  ТИПА. ОПЕРАТОР "CASE" УКАЗЫВАЕТ, ЧТО ДОЛЖЕН  БЫТЬ  ВЫПОЛНЕН  ОДИН
  ОПЕРАТОР: ТОТ, МЕТКА КОТОРОГО РАВНА ТЕКУЩЕМУ ЗНАЧЕНИЮ  СЕЛЕКТОРA.
  ЕСЛИ НИ ОДНА ИЗ МЕТОК В ОПЕРАТОРЕ CASE НЕ СОВПАДАЕТ СО  ЗНАЧЕНИЕМ
  "СЕЛЕКТОРНОЙ"   ПЕРЕМЕННОЙ,ТО   ВЫПОЛНЯЕТСЯ    ПОСЛЕДОВАТЕЛЬНОСТЬ
  ОПЕРАТОРОВ,  СЛЕДУЮЩАЯ  ЗА  СИМВОЛОМ  ELSE.   ИСПОЛЬЗОВАНИЕ   ";"
  НЕДОПУСТИМО МЕЖДУ ELSE И END В ОПЕРАТОРЕ CASE.

  <ОПЕРАТОР "CASE">::=CASE<ВЫРАЖЕНИЕ> OF
                <АЛЬТЕРНАТИВА> (*;<АЛЬТЕРНАТИВА>*)
               [ELSE <ОПЕРАТОР>] END
  <AЛЬТЕРНАТИВА>::=<СПИСОК МЕТОК ВЫБОРА>:<ОПЕРАТОР>
  <СПИСОК МЕТОК ВЫБОРА>::=<МЕТКА ВЫБОРА>(*,<МЕТКА ВЫБОРА>*)

      ПРИМЕРЫ:

  CASE ОПЕРАЦИЯ OF                   CASE I OF
       ПЛЮС:Х:=X+Y;                         1:X:=SIN(X);
       МИНУС:X:=X-Y;                        2:X:=COS(X);
       УМНОЖ:X:=X*Y;                        3:X:=EXP(X);
 END                                        4:X:=LN(X);
                                    END

         REPEAT
                 READLN(CH);
                 CASE CH OF
                         'A':APPEND;
                         'D':DELETE;
                         'I':INSERT;
                         'N':NEWFILE;
                         'Q':;
                         ELSE
                          WRITELN('"',CH,'" IS NOT LEGAL')
                 END;
         UNTIL CH = 'Q';





                               CTP. 29

                     

ЩИ1.700.016 ПО.04-01 35


      7.2.3. ЦИКЛЫ



       ОПЕРАТОРЫ   ЦИКЛА   ПРЕДПИСЫВАЮТ   МНОГОКРАТНОЕ   ВЫПОЛНЕНИЕ
  НЕКОТОРЫХ ОПЕРАТОРОВ. ЕСЛИ  ЧИСЛО  ПОВТОРЕНИЙ  ИЗВЕСТНО  ЗАРАНЕЕ,
  Т.Е. ДО  НАЧАЛА  ВЫПОЛНЕНИЯ  ЦИКЛА,  ТО  ПОДХОДЯЩЕЙ  КОНСТРУКЦИЕЙ
  ЯВЛЯЕТСЯ ОПЕРАТОР "FOR"; В ОСТАЛЬНЫХ СЛУЧАЯХ СЛЕДУЕТ ИСПОЛЬЗОВАТЬ
  ОПЕРАТОР "WHILE" ИЛИ ОПЕРАТОР "REPEAT".

  <ОПЕРАТОР ЦИКЛА>::=<ОПЕРАТОР "WHILE"> !
                     <ОПЕРАТОР "REPEAT"> ! <ОПЕРАТОР "FOR">



    7.2.3.1. ОПЕРАТОР "WHILE"



  <ОПЕРАТОР "WHILE">::=WHILE<ВЫРАЖЕНИЕ>DO<ОПЕРАТОР>

  ВЫРАЖЕНИЕ, УПРАВЛЯЮЩЕЕ ПОВТОРЕНИЯМИ, ДОЛЖНО ИМЕТЬ ЛОГИЧЕСКИЙ ТИП.
  ОПЕРАТОР  ПОВТОРНО  ИСПОЛЬЗУЕТСЯ  ДО  ТЕХ  ПОР,  ПОКА   ЗНАЧЕНИЕМ
  ВЫРАЖЕНИЯ НЕ СТАНЕТ "FALSE". ЕСЛИ  ЗНАЧЕНИЕ  ВЫРАЖЕНИЯ  С  САМОГО
  НАЧАЛА "FALSE", ТО ОПЕРАТОР НЕ ВЫПОЛНЯЕТСЯ.

       OПЕРАТОР "WHILE":

       WHILE E DO S

  ЭКВИВАЛЕНТЕН КОНСТРУКЦИИ:

      IF E THEN
         BEGIN S;
            WHILE E DO S
         END

      ПРИМЕРЫ:

   WHILE A(I) <> X DO I:=I+1

   WHILE I>0 DO
   BEGIN IF ODD(I) THEN Z:=Z*X;
        I:=IDIV2;
        X:=SQR(X)
   END

   WHILE NOT EOF(F) DO
   BEGIN P(F^); GET(F)
   END








                               CTP. 30

                     

ЩИ1.700.016 ПО.04-01 35


    7.2.3.2. ОПЕРАТОР "REPEAT"



  <ОПЕРАТОР "REPEAT">::=
    REPEAT<ОПЕРАТОР>(*,<ОПЕРАТОР>*)UNTIL<ВЫРАЖЕНИЕ>

       ВЫРАЖЕНИЕ, УПРАВЛЯЮЩЕЕ ПОВТОРЕНИЯМИ, ДОЛЖНО ИМЕТЬ ЛОГИЧЕСКИЙ
  ТИП.  ПОСЛЕДОВАТЕЛЬНОСТЬ  ОПЕРАТОРОВ   МЕЖДУ   REPEAT   И   UNTIL
  ВЫПОЛНЯЕТСЯ ПОВТОРНО (И НЕ МЕНЕЕ ОДНОГО РАЗА  ДО  ТЕХ  ПОР,  ПОКА
  ЗНАЧЕНИЕМ СООТВЕТСТВУЮЩЕГО ВЫРАЖЕНИЯ НЕ СТАНЕТ TRUE.

       ОПЕРАТОР "REPEAT":

       REPEAT S UNTIL E

  ЭКВИВАЛЕНТЕН ОПЕРАТОРУ:

    BEGIN S;
    IF NOT E THEN
        REPEAT S UNTIL E
    END

      ПРИМЕРЫ:

  REPEAT K:=I MOD J;
         I:=J;
         J:=K;
  UNTIL J=0

  REPEAT P(F);GET(F)
  UNTIL EOF(F)



    7.2.3.3. ОПЕРАТОР "FOR"



       ОПЕРАТОР    "FOR"    ПРЕДПИСЫВАЕТ    ПОВТОРНОЕ    ВЫПОЛНЕНИЕ
  СООТВЕТСТВУЮЩЕГО  ОПЕРАТОРА  ПО  МЕРЕ  ПРИСВАИВАНИЯ   ПЕРЕМЕННОЙ,
  НАЗЫВАЕМОЙ   ПАРАМЕТРОМ   ЦИКЛА,   НЕКОТОРОЙ   ПОСЛЕДОВАТЕЛЬНОСТИ
  ЗНАЧЕНИЙ.

  <ОПЕРАТОР "FOR">::=FOR<ПАРАМЕТР ЦИКЛА>:=<СПИСОК ЦИКЛА> DO
                       <ОПЕРАТОР>
  <СПИСОК ЦИКЛА>::=<ПЕРВОЕ ЗНАЧЕНИЕ>
                    ТО <ПОСЛЕДНЕЕ ЗНАЧЕНИЕ> !
         <ПЕРВОЕ ЗНАЧЕНИЕ> DOWNTO <ПОСЛЕДНЕЕ ЗНАЧЕНИЕ>
  <ПАРАМЕТР ЦИКЛА>::=<ИДЕНТИФИКАТОР>
  <ПЕРВОЕ ЗНАЧЕНИЕ>::=<ВЫРАЖЕНИЕ>
  <ПОСЛЕДНЕЕ ЗНАЧЕНИЕ>::=<ВЫРАЖЕНИЕ>

  ПАРАМЕТРЫ ЦИКЛА, ПЕРВОЕ ЗНАЧЕНИЕ И ПОСЛЕДНЕЕ ЗНАЧЕНИЕ ДОЛЖНЫ БЫТЬ
  ОДНОГО И ТОГО ЖЕ СКАЛЯРНОГО ТИПА (ИЛИ ЕГО ОТРЕЗКА)  И  НЕ  ДОЛЖНЫ
  МЕНЯТЬСЯ ПОВТОРЯЕМЫМ В ЦИКЛЕ ОПЕРАТОРОМ.

       ЦИКЛ С ПАРАМЕТРОМ ВИДА:
                               CTP. 31

                     

ЩИ1.700.016 ПО.04-01 35


         FOR V:= E1 TO E2 DO S

  ЭКВИВАЛЕНТЕН ПОСЛЕДОВАТЕЛЬНОСТИ ОПЕРАТОРОВ:

         V:=E1; S; V:=SUCC(V); S;...; V:=E2; S;

  А ЦИКЛ С ПАРАМЕТРОМ ВИДА:

         FOR V:=E1 DOWNTO E2 DO S

  ЭКВИВАЛЕНТЕН ПОСЛЕДОВАТЕЛЬНОСТИ ОПЕРАТОРОВ:

        V:=E1; S; V:=PRED(V); S;...; V:=E2; S;


       П_Р_И_М_Е_Ч_А_Н_И_Е. ПОСЛЕДНЕЕ ЗНАЧЕНИЕ  ПАРАМЕТРА  ОСТАЕТСЯ
  НЕОПРЕДЕЛЕННЫМ ПОСЛЕ ЗАВЕРШЕНИЯ ЦИКЛА.

      ПРИМЕРЫ:

  FOR I:=2 TO 100 DO IF A[I]>MAX THEN MAX:=A(I)

  FOR I:=1 TO N DO
  FOR J:=1 TO N DO
  BEGIN X:=0;
    FOR K:=1 TO N DO X:=X+A(I,J)*B(K,J)
    C[I,J]:=X
  END

  FOR Ц:=КРАСН ТО ГОЛУБОЙ DO Q(Ц)



    7.2.3.4. ОПЕРАТОР EXIT



       ОПЕРАТОР EXIT ИСПОЛЬЗУЕТСЯ ДЛЯ  ВЫХОДА  ИЗ  ТЕЛА  ОДНОГО  ИЗ
  ИТЕРАЦИОННЫХ ОПЕРАТОРОВ (WHILE, REPEAT, FOR). НАПРИМЕР, ПОИСК  ПО
  ТАБЛИЦЕ:

         FOUND := FALSE;
         FOR I := 1 TO TABLESIZE DO
                 IF TABLE[I] = KEY
                    THEN BEGIN FOUND:=TRUE; EXIT END;













                               CTP. 32

                     

ЩИ1.700.016 ПО.04-01 35


      7.2.4. ОПЕРАТОР НАД ЗАПИСЯМИ "WITH"



  <ОПЕРАТОР "WITH"> ::= WITH<СПИСОК ПЕРЕМЕННЫХ-
                                 ЗАПИСЕЙ>
                                 DO <ОПЕРАТОР>
  <СПИСОК ПЕРЕМЕННЫХ-ЗАПИСЕЙ> ::= <ПЕРЕМЕННАЯ ЗАПИСЬ>
                                (*,<ПЕРЕМЕННАЯ ЗАПИСЬ>*)

       В  ПРЕДЕЛАХ  ВНУТРЕННЕГО  ОПЕРАТОРА   В   ОПЕРАТОРЕ   "WITH"
  КОМПОНЕНТЫ (ПОЛЯ) ПЕРЕМЕННОЙ-ЗАПИСИ, ЗАДАННОЙ  В  ЕГО  ЗАГОЛОВКЕ,
  МОГУТ ОБОЗНАЧАТЬСЯ ОДНИМ ТОЛЬКО СВОИМ ИДЕНТИФИКАТОРОМ ПОЛЯ,  Т.Е.
  БЕЗ  ПРЕДШЕСТВУЮЩЕГО  ИМ  НАПИСАНИЯ  ПОЛНОЙ  ПEPEМЕННОЙ   ЗАПИСИ.
  ФАКТИЧЕСКИ   ОПЕРАТОРЫ    НАД    ЗАПИСЯМИ    РАСШИРЯЮТ    ОБЛАСТЬ
  ОПРЕДЕЛЕННОСТИ ИДЕНТИФИКАТОРОВ ПОЛЯ  ЗАДАННОЙ  ПЕРЕМЕННОЙ-ЗАПИСИ,
  ТАК ЧТО ИДЕНТИФИКАТОРЫ ПОЛЯ МОГУТ ВЫСТУПАТЬ,  КАК  ИДЕНТИФИКАТОРЫ
  ПЕРЕМЕННЫХ.

       ПРИМЕР:

  WITH DATA DO
  IF MEC = 12 THEN
  BEGIN MEC := 1; ГОД := ГОД +1
  END
  ELSE MEC := MEC + 1

       ЭТОТ ОПЕРАТОР ЭКВИВАЛЕНТЕН ТАКОМУ:

  IF DATA.MEC = 12 THEN
  BEGIN DАТА.МЕC := 1; DАТА.ГОД:=DАТА.ГОД +1
  END
  ELSE DАТА.МЕС:= DАТА.МЕС + 1

       В ОПЕРАТОРАХ НАД ЗАПИСЯМИ НЕ ДОЛЖНО СОДЕРЖАТЬСЯ ПРИСВАИВАНИЙ
  НИКАКОЙ СОСТАВЛЯЮЩЕЙ СПИСКА ПЕРЕМЕННЫХ ЗАПИСЕЙ.

       ОПЕРАТОР "WITH" МОЖЕТ ИМЕТЬ УРОВЕНЬ ВЛОЖЕННОСТИ НЕ  ВЫШЕ  4.
  ЕСЛИ СЛОЖНЫЕ ВЫРАЖЕНИЯ ИСПОЛЬЗУЮТСЯ ВНУТРИ  ЭТОГО  ОПЕРАТОРА,  ТО
  УРОВЕНЬ ВЛОЖЕННОСТИ МОЖЕТ БЫТЬ НЕ БОЛЕЕ 2 ИЛИ 3.


















                               CTP. 33

                     

ЩИ1.700.016 ПО.04-01 35


                        8. OПИСАНИЕ ПРОЦЕДУР




       НАЗНАЧЕНИЕ ОПИСАНИЙ ПРОЦЕДУР - ОПРЕДЕЛИТЬ ЧАСТИ ПРОГРАММЫ  И
  СВЯЗАТЬ С НИМИ ИДЕНТИФИКАТОРЫ, С ТЕМ ЧТОБЫ ЭТИ ЧАСТИ  МОГЛИ  БЫТЬ
  АКТИВИРОВАНЫ ОПЕРАТОРАМИ ПРОЦЕДУР. ОПИСАНИЕ ПРОЦЕДУРЫ СОСТОИТ  ИЗ
  СЛЕДУЮЩИХ ЧАСТЕЙ, ЛЮБАЯ  ИЗ  КОТОРЫХ,  ЗА  ИСКЛЮЧЕНИЕМ  ПЕРВОЙ  И
  ПОСЛЕДНЕЙ, МОЖЕТ БЫТЬ ПУСТОЙ:

  <ОПИСАНИЕ ПРОЦЕДУРЫ>::=<ЗАГОЛОВОК ПРОЦЕДУРЫ>
                       <РАЗДЕЛ ОПИСАНИЙ МЕТОК>/
                       <РАЗДЕЛ ОПРЕДЕЛЕНИЙ КОНСТАНТ>/
                       <РАЗДЕЛ ОПРЕДЕЛЕНИЙ ТИПОВ>/
                       <РАЗДЕЛ ОПИСАНИЙ ПЕРЕМЕННЫХ>/
                       <РАЗДЕЛ ОПИСАНИЙ ПРОЦЕДУР И ФУНКЦИЙ>/
                       <РАЗДЕЛ ОПЕРАТОРОВ>

       ЗАГОЛОВОК   ПРОЦЕДУРЫ   ЗАДАЕТ   ИДЕНТИФИКАТОР,    ИМЕНУЮЩИЙ
  ПРОЦЕДУРУ,  И  ИДЕНТИФИКАТОРЫ  ФОРМАЛЬНЫХ  ПАРАМЕТРОВ  (ЕСЛИ  ОНИ
  ЕСТЬ). ПАРАМЕТРАМИ МОГУТ  БЫТЬ  ПАРАМЕТРЫ-ПЕРЕМЕННЫЕ,  -ЗНАЧЕНИЯ,
  -ПРОЦЕДУРЫ ИЛИ ПАРАМЕТРЫ-ФУНКЦИИ.

  <ЗАГОЛОВОК ПРОЦЕДУРЫ>::=PROCEDURE<ИДЕНТИФИКАТОР>;!
    PROCEDURE<ИДЕНТИФИКАТОР>(<СЕКЦИЯ ФОРМАЛЬНЫХ ПАРАМЕТРОВ>
              (*;<СЕКЦИЯ ФОРМАЛЬНЫХ ПАРАМЕТРОВ*));
  <СЕКЦИЯ ФОРМАЛЬНЫХ ПАРАМЕТРОВ>::=<ГРУППА ПАРАМЕТРОВ>!
           VAR <ГРУППА ПАРАМЕТРОВ>!
           FUNCTION <ГРУППА ПАРАМЕТРОВ> !
           PROCEDURE <ИДЕНТИФИКАТОР> (*;<ИДЕНТИФИКАТОР>*)
  <ГРУППА ПАРАМЕТРОВ>::=
             <ИДЕНТИФИКАТОР>(*,<ИДЕНТИФИКАТОР>*)
             :<ИДЕНТИФИКАТОР ТИПА>

       ГРУППЫ   ПАРАМЕТРОВ   БЕЗ   ПРЕДШЕСТВУЮЩЕГО    СПЕЦИФИКАТОРА
  СЧИТАЮТСЯ ПАРАМЕТРАМИ-ЗНАЧЕНИЯМИ.

       РАЗДЕЛ   ОПИСАНИЙ    МЕТОК    СПЕЦИФИЦИРУЕТ    ВСЕ    МЕТКИ,
  ЛОКАЛИЗОВАННЫЕ В ДАННОЙ ПРОЦЕДУРЕ:

  <РАЗДЕЛ ОПИСАНИЙ МЕТОК>::=<ПУСТО>!
                    LABEL <МЕТКА> (*,<МЕТКА>*);

  <РАЗДЕЛ ОПРЕДЕЛЕНИЙ КОНСТАНТ>::=<ПУСТО>!
                             CONST<ОПРЕДЕЛЕНИЕ КОНСТАНТЫ>
                             (*;<ОПРЕДЕЛЕНИЕ КОНСТАНТЫ>*);

  <РАЗДЕЛ ОПРЕДЕЛЕНИЙ ТИПОВ>::=<ПУСТО>!
            TYPE<ОПРЕДЕЛЕНИЕ ТИПА>(*;<ОПРЕДЕЛЕНИЕ ТИПА>*);

  <РАЗДЕЛ ОПИСАНИЙ ПЕРЕМЕННЫХ>::= <ПУСТО>!
       VAR<ОПИСАНИЕ ПЕРЕМЕННОЙ> (*;<ОПИСАНИЕ ПЕРЕМЕННОЙ>*);

  <РАЗДЕЛ ОПИСАНИЙ ПРОЦЕДУР И ФУНКЦИЙ>::=
                      (*<ОПИСАНИЕ ПРОЦЕДУРЫ ИЛИ ФУНКЦИИ>;*)
  <ОПИСАНИЕ ПРОЦЕДУРЫ ИЛИ ФУНКЦИИ>::=<ОПИСАНИЕ ПРОЦЕДУРЫ>!
                                     <ОПИСАНИЕ ФУНКЦИИ>
                               CTP. 34

                     

ЩИ1.700.016 ПО.04-01 35


       РАЗДЕЛ ОПЕРАТОРОВ ЗАДАЕТ АЛГОРИТМИЧЕСКИЕ  ДЕЙСТВИЯ,  КОТОРЫЕ
  ДОЛЖНЫ БЫТЬ ВЫПОЛНЕНЫ  ПОСЛЕ  ОБРАЩЕНИЯ  К  ПРОЦЕДУРЕ  С  ПОМОЩЬЮ
  ОПЕРАТОРА ПРОЦЕДУРЫ:

  <РАЗДЕЛ ОПЕРАТОРОВ>::=<СОСТАВНОЙ ОПЕРАТОР>

       ВСЕ   ИДЕНТИФИКАТОРЫ,   ВВЕДЕННЫЕ   В   РАЗДЕЛЕ   ФОРМАЛЬНЫХ
  ПАРАМЕТРОВ, РАЗДЕЛЕ ОПРЕДЕЛЕНИЙ КОНСТАНТ, ТИПОВ, РАЗДЕЛЕ ОПИСАНИЙ
  ПЕРЕМЕННЫХ И ПРОЦЕДУР ИЛИ ФУНКЦИЙ,  ЛОКАЛЬНЫ  В  ДАННОМ  ОПИСАНИИ
  ПРОЦЕДУРЫ,  КОТОРОЕ  НАЗЫВАЕТСЯ  ОБЛАСТЬЮ   ОПРЕДЕЛЕННОСТИ   ЭТИХ
  ИДЕНТИФИКАТОРОВ.   ОНИ   НЕ   ДОСТУПНЫ    ВНЕ    СВОЕЙ    ОБЛАСТИ
  ОПРЕДЕЛЕННОСТИ. ЗНАЧЕНИЯ ЛОКАЛЬНЫХ ПЕРЕМЕННЫХ В  МОМЕНТ  ВХОДА  В
  ТЕЛО  НЕ  ОПРЕДЕЛЕНЫ.   ИСПОЛЬЗОВАНИЕ   В   ТЕЛЕ   ПРОЦЕДУРЫ   ЕЕ
  СОБСТВЕННОГО  ИМЕНИ  ПОДРАЗУМЕВАЕТ  РЕКУРСИВНОЕ  ВЫПОЛНЕНИЕ  ЭТОЙ
  ПРОЦЕДУРЫ.

       СИНТАКСИЧЕСКИ ВЛОЖЕННОСТЬ ПРОЦЕДУР НЕ МОЖЕТ БЫТЬ  БОЛЕЕ  10.
  ПРИ ВЫПОЛНЕНИИ НА ВЛОЖЕННОСТЬ НЕ  НАКЛАДЫВАЕТСЯ  ОГРАНИЧЕНИЙ,  НО
  БОЛЬШАЯ ВЛОЖЕННОСТЬ ПРИ РЕКУРСИИ МОЖЕТ  ПРИВЕСТИ  К  ИСЧЕРПЫВАНИЮ
  РАБОЧЕЙ ПАМЯТИ.

       ПРИМЕРЫ ОПИСАНИЙ ПРОЦЕДУР:

  PROCEDURE BISECT(FUNCTION F:REAL; A,B:REAL; VAR Z:REAL);
    VAR M :REAL;
   BEGIN (* ПРЕДПОЛАГАЕТСЯ ЧТО F(A)<0 И F(B)>0 *)
   WHILE ABS(A-B) > 1E-10*ABS(A) DO
   BEGIN M := (A+B)/2.0;
          IF F(M)<0 THEN A := M ELSE B :=  M
   END;
   Z:=M
   END

       ПРОЦЕДУРА  (ФУНКЦИЯ)  МОЖЕТ  БЫТЬ  ВЫЗВАНА  РАНЬШЕ,ЧЕМ   ОНА
  ОПРЕДЕЛЕНА,  ЕСЛИ  ЕСТЬ  ССЫЛКА  "ВПЕРЕД"   -   FORWARD.   СПИСОК
  ПАРАМЕТРОВ И ТИП ОКОНЧАТЕЛЬНОГО РЕЗУЛЬТАТА ЗАПИСЫВАЕТСЯ ТОЛЬКО  В
  FORWARD ССЫЛКЕ, НАПРИМЕР:

  PROCEDURE Q(X:T); FORWARD;
  PROCEDURE P(Y:T);
     BEGIN Q(A) END;
  PROCEDURE Q;  (*ПАРАМЕТРЫ НЕ ПОВТОРЯЮТСЯ*)
     BEGIN P(B) END;
  BEGIN P(A);Q(B)
  END.













                               CTP. 35

                     

ЩИ1.700.016 ПО.04-01 35


        8.1. СТАНДАРТНЫЕ ПРОЦЕДУРЫ



       ПРЕДПОЛАГАЕТСЯ, ЧТО СТАНДАРТЫЕ ПРОЦЕДУРЫ ЗАРАНЕЕ  ОПИСАНЫ  В
  ЛЮБОЙ  РЕАЛИЗАЦИИ   ЯЗЫКА   ПАСКАЛЬ.   ЛЮБАЯ   РЕАЛИЗАЦИЯ   МОЖЕТ
  ДОПОЛНИТЕЛЬНО  ВВОДИТЬ   ТАКИЕ   ЗАРАНЕЕ   ОПИСАННЫЕ   ПРОЦЕДУРЫ.
  ПОСКОЛЬКУ  ОНИ,  КАК  И  ВСЕ  СТАНДАРТНЫЕ   ВЕЛИЧИНЫ,   СЧИТАЮТСЯ
  ОПИСАННЫМИ В ОБЛАСТИ ОПРЕДЕЛЕННОСТИ, ОХВАТЫВАЮЩЕЙ ВСЮ  ПРОГРАММУ,
  НАПИСАННУЮ НА ПАСКАЛЕ, ТО ПОЯВЛЕНИЕ В  ЭТОЙ  ПРОГРАММЕ  ОПИСАНИЙ,
  ПЕРЕОПРЕДЕЛЯЮЩИХ ЭТИ ИДЕНТИФИКАТОРЫ, НЕ ПРИВОДИТ К КОНФЛИКТАМ.

       СТАНДАРТНЫЕ ПРОЦЕДУРЫ ПЕРЕЧИСЛЕНЫ И ОБ'ЯСНЕНЫ НИЖЕ.



      8.1.1. ПРОЦЕДУРЫ РАБОТЫ С ФАЙЛАМИ



  PUT(F)
         - ПРИСОЕДИНЯЕТ ЗНАЧЕНИЕ БУФЕРНОЙ  ПЕРЕМЕННОЙ  F^  К  ФАЙЛУ
           "F". ОПРЕДЕЛЕНО ТОЛЬКО В СЛУЧАЕ, КОГДА ПЕРЕД ИСПОЛНЕНИЕМ
           ЗНАЧЕНИЕ ПРЕДИКАТА EOF(F) ЕСТЬ  TRUE;  EOF(F)  СОХРАНЯЕТ
           ЗНАЧЕНИЕ TRUE, ЗНАЧЕНИЕ ЖЕ F^ СТАНОВИТСЯ НЕОПРЕДЕЛЕННЫМ;

  GET(F)
         - СМЕЩАЕТ ТЕКУЩУЮ ПОЗИЦИЮ ФАЙЛА (ГОЛОВКУ ЧТЕНИЯ-ЗАПИСИ) НА
           СЛЕДУЮЩУЮ  КОМПОНЕНТУ  И   ПРИПИСЫВАЕТ   ЗНАЧЕНИЕ   ЭТОЙ
           КОМПОНЕНТЫ  БУФЕРНОЙ  ПЕРЕМЕННОЙ  F^.   ЕСЛИ   СЛЕДУЮЩЕЙ
           КОМПОНЕНТЫ НЕ СУЩЕСТВУЕТ, ТО ЗНАЧЕНИЕМ ЕОF(F) СТАНОВИТСЯ
           TRUE, А ЗНАЧЕНИЕ  F^  НЕ  ОПРЕДЕЛЕНО.  РЕЗУЛЬТАТ  GET(F)
           OПРЕДЕЛЕН  ТОЛЬКО   ТОГДА,   КОГДА   ПЕРЕД   ИСПОЛНЕНИЕМ
           СООТВЕТСТВУЮЩЕГО ВЫЗОВА EOF(F)=FАLSE;

  RESET(F)
         - ВОЗВРАЩАЕТ  ТЕКУЩУЮ  ПОЗИЦИЮ  ФАЙЛА  В  НАЧАЛО  ФАЙЛА  И
           ПРИПИСЫВАЕТ  БУФЕРНОЙ  ПЕРЕМЕННОЙ  F^  ЗНAЧЕНИЕ  ПЕРВОГО
           ЭЛЕМЕНТА "F". ЗНАЧЕНИЕМ EOF(F)  СТАНОВИТСЯ  FALSE,  ЕСЛИ
           "F" НЕ ПУСТ; В ПРОTИВНОМ  СЛУЧАЕ  F^  НЕ  ОПРЕДЕЛЕНО,  А
           ЗНАЧEНИЕМ EOF(F) ОСТАЕТСЯ TRUE;

  REWRITE(F)
         - УНИЧТОЖАЕТ ТЕКУЩЕЕ ЗНАЧЕНИЕ "F", ТАК ЧТО МОЖЕТ  НАЧАТЬСЯ
           ЗАПОЛНЕНИЕ НОВОГО ФАЙЛА; EOF(F) ПРИНИМАЕТ ЗНАЧЕНИЕ TRUE;

  BREAK(F)
         - ВЫЗЫВАЕТ НЕМЕДЛЕННЫЙ ВЫВОД ВОЗМОЖНО ЕЩЕ НЕПОЛНОГО БУФЕРА
           (БЛОКА) В ФАЙЛ.  ЭТО  НАДО  ИСПОЛЬЗОВАТЬ  ПРИ  РАБОТЕ  С
           ТЕРМИНАЛОМ,   НАПРИМЕР,   ДЛЯ   ВЫВОДА   ПОДСКАЗКИ   ИЛИ
           СООБЩЕНИЯ.  СЛЕДУЕТ  ОТМЕТИТЬ,  ЧТО  ДАННЫЙ  ПАСКАЛЬ  НЕ
           БУФЕРИЗУЕТ РАБОТУ С ДРАЙВЕРАМИ,О  КОТОРЫХ  ИЗВЕСТНО  ЧТО
           ОНИ ЯВЛЯЮТСЯ "ИНТЕРАКТИВНЫМИ", ТАКИМИ КАК ВЫХОДНОЙ  ФАЙЛ
           ПО УМОЛЧАНИЮ .

  PAGE(F)
         - ЗАСТАВЛЯЕТ ПРИНТЕР ПЕРЕХОДИТЬ НА НАЧАЛО  НОВОЙ  СТРАНИЦЫ
           ПЕРЕД ПЕЧАТЬЮ СЛЕДУЮЩЕЙ СТРОКИ ТЕКСТОВОГО ФАЙЛА.
                               CTP. 36

                     

ЩИ1.700.016 ПО.04-01 35


       ПРИМЕР:

         VAR F:TEXT;
         BEGIN
           REWRITE(F,'TT:');
           WRITELN(F,'ВВЕДИТЕ КОМАНДНУЮ СТРОКУ');
           BREAK(F);    (* ВЫВЕСТИ ДАННЫЕ НА ТТ: *)
         END.

  CLOSE(F)
         - ПЕРЕСЫЛАЕТ НА ВНЕШНЕЕ УСТРОЙСТВО НЕ ДО КОНЦА ЗАПОЛНЕННЫЙ
           БУФЕР, УСТРАНЯЕТ СВЯЗЬ С ВНЕШНИМ  ФАЙЛОМ  И  ОСВОБОЖДАЕТ
           БУФЕРНУЮ ПАМЯТЬ ДЛЯ ИСПОЛЬЗОВАНИЯ  ЕЕ  В  ДРУГИХ  ЦЕЛЯХ.
           ПРОЦЕДУРЫ "RESET" ИЛИ  "REWRITE"  ДОЛЖНЫ  ПРЕДШЕСТВОВАТЬ
           ВСЯКОЙ РАБОТЕ С ФАЙЛОВОЙ ПЕРЕМЕННОЙ.


       П_Р_И_М_Е_Ч_А_Н_И_Е.   ПРОЦЕДУРA   "CLOSE"   ВСЕГДА   ДОЛЖНА
  ИСПОЛЬЗОВАТЬСЯ В КОНЦЕ  РАБОТЫ  С  ФАЙЛОМ,  СОЗДАННЫМ  ПРОГРАММОЙ
  (ВЫХОДНЫМ ФАЙЛОМ), ИНАЧЕ МОЖНО ПОТЕРЯТЬ  ПОСЛЕДНИЙ  БУФЕР,КОТОРЫЙ
  НЕ БУДЕТ ЗАПИСАН В ФАЙЛ. ЗАКРЫВАНИЕ ФАЙЛОВ ДЛЯ ВВОДА НЕ  ЯВЛЯЕТСЯ
  ОБЯЗАТЕЛЬНЫМ, НО ПОЗВОЛЯЕТ ОСВОБОДИТЬ БУФЕРНУЮ ПАМЯТЬ.



      8.1.2. ДОПОЛНИТЕЛЬНЫЕ АРГУМЕНТЫ ДЛЯ "RESET" И "REWRITE"



       В ДАННОЙ РЕАЛИЗАЦИИ РАСШИРЕНЫ СТАНДАРТНЫЕ ПРОЦЕДУРЫ  "RESET"
  И "REWRITE" ТРЕМЯ ДОПОЛНИТЕЛЬНЫМИ ПАРАМЕТРАМИ ДЛЯ УКАЗАНИЯ  СВЯЗИ
  МЕЖДУ ВНУТРЕННИМИ ФАЙЛОВЫМИ  ПЕРЕМЕННЫМИ  И  ФАЙЛАМИ  НА  ВНЕШНИХ
  УСТРОЙСТВАХ

  PROCEDURE RESET(F:FILE;NAME,DEFEXT:STRING;
                  VAR LEN:INTEGER)

       ПРОЦЕДУРА RESET СВЯЗЫВАЕТ ФАЙЛОВУЮ ПЕРЕМЕННУЮ С СУЩЕСТВУЮЩИМ
  ВНЕШНИМ ФАЙЛОМ, А ТАКЖЕ УСТАНАВЛИВАЕТ УКАЗАТЕЛЬ ФАЙЛА  НА  ПЕРВЫЙ
  ЭЛЕМЕНТ  (ЗАПИСЬ).  "F"  ВСЕГДА  ДОЛЖНА  ПРИСУТСТВОВАТЬ  И   БЫТЬ
  ФАЙЛОВОЙ ПЕРЕМЕННОЙ. ИМЯ ФАЙЛА "NAME" И  РАСШИРЕНИЕ  ИМЕНИ  ФАЙЛА
  ДОЛЖНЫ ИМЕТЬ ТИП "ARRAY OF CHAR".

       ИМЯ  ФАЙЛА  ДОЛЖНО   СООТВЕТСТВОВАТЬ   ПРИНЯТОМУ   В   ОСДВК
  СТАНДАРТНОМУ ОБОЗНАЧЕНИЮ И МОЖЕТ ВКЛЮЧАТЬ ИМЯ И НОМЕР УСТРОЙСТВА,
  А ТАКЖЕ ТИП ФАЙЛА.  ЕСЛИ  ВО  ВТОРОМ  ПАРАМЕТРЕ  ОТСУТСТВУЕТ  ТИП
  ФАЙЛА,ТО ПО УМОЛЧАНИЮ БУДЕТ ИСПОЛЬЗОВАН ТИП "DAT".

       ПЕРЕМЕННАЯ "LEN" ПОЛУЧИТ ЗНАЧЕНИЕ, РАВНОЕ  ЧИСЛУ  БЛОКОВ  ПО
  512 БАЙТ В ФАЙЛЕ, ЛИБО - 1, ЕСЛИ ФАЙЛ НЕ НАЙДЕН. СЛЕДУЕТ  УЧЕСТЬ,
  ЧТО ЕСЛИ  ЭТОТ  ПАРАМЕТР  НЕ  ИСПОЛЬЗОВАН,  ТО  ОТСУТСТВИЕ  ФАЙЛА
  ПРИВЕДЕТ К ФАТАЛЬНОЙ ОШИБКЕ ПРОГРАММЫ.


  PROCEDURE REWRITE(F:FILE; NAME,DEFEXT:STRING;
                    VAR LEN:INTEGER)

       ПРОЦЕДУРА  "REWRITE"   СОЗДАЕТ   НОВЫЙ   ФАЙЛ   НА   ВНЕШНЕМ
                               CTP. 37

                     

ЩИ1.700.016 ПО.04-01 35


  УСТРОЙСТВЕ. ПАРАМЕТРЫ "NAME" И  "DEFEXT"  ИМЕЮТ  ТО  ЖЕ  ЗНАЧЕНИЕ
  (СМЫСЛ), ЧТО И ДЛЯ ПРОЦЕДУРЫ "RESET".  ПАРАМЕТР  "LEN"  УКАЗЫВАЕТ
  РАЗМЕР СОЗДАВАЕМОГО ФАЙЛА В БЛОКАХ ПО 512 БАЙТ.

       ПРИМЕР:

         VAR NAME: ARRAY[1..20] OF CHAR;
             INF,OUTF: TEXT;
             (* ОПРЕДЕЛЕНО В СИСТЕМЕ КАК "FILE OF CHAR *)
             LEN: INTEGER;
         BEGIN
             (* СВЯЗАТЬ OUTF С УСТРОЙСТВОМ ПЕЧАТИ *)
             REWRITE(OUTF,'LP:');
             REPEAT
                 WRITE('FILENAME: ');
                 (* ЗАПРОСИТЬ ИМЯ ФАЙЛА С ТЕРМИНАЛА *)
                 READLN(NAME);
                 (*СВЯЗАТЬ INF С СУЩЕСТВУЮЩИМ ФАЙЛОМ *)
                 RESET(INF,NAME,'PAS',LEN)
             (* ПОВТОРЯТЬ ПОКА ФАЙЛ НЕ БУДЕТ ОТКРЫТ *)
             UNTIL LEN<>-1;
         END.



      8.1.3. ПРОЦЕДУРА ДИНАМИЧЕСКОГО РАЗМЕЩЕНИЯ



  NEW(P)
         - РАЗМЕЩАЕТ НОВУЮ ПЕРЕМЕННУЮ V И ПРИПИСЫВАET ССЫЛКУ  НА  V
           ПЕРЕМЕННОЙ-УКАЗАТЕЛЮ P;

  DISPOSE(P)
         - ОСВОБОЖДАЕТ ПАМЯТЬ,ЗАНИМАЕМУЮ ПЕРЕМЕННОЙ P^;

       ЕСЛИ ТИП V - ЭТО ТИП ЗАПИСИ С ВАРИАНТАМИ, ТО В ВЫЗОВАХ "NEW"
  И  "DISPOSE"  ВЫДЕЛЯЕТСЯ  И  ОСВОБОЖДАЕТСЯ  МАКСИМАЛЬНАЯ  ОБЛАСТЬ
  ПАМЯТИ, НЕОБХОДИМАЯ ДЛЯ ЗАПИСИ.

  NEW(P,T1,...,TN)
         - МОЖЕТ  БЫТЬ  ИСПОЛЬЗОВАН  ДЛЯ   РАЗМЕЩЕНИЯ   КОНКРЕТНОГО
           ВАРИАНТА (В СЛУЧАЕ ЗАПИСИ С  ВАРИАНТАМИ)  СО  ЗНАЧЕНИЯМИ
           ПОЛЯ ПРИЗНАКА T1,...,TN. ЭТО НЕ ОЗНАЧАЕТ НАЗНАЧЕНИЯ ПОЛЯ
           ПРИЗНАКА.

  DISPOSE(P,T1,...,TN)
         - ОСВОБОЖДАЕТ  ПАМЯТЬ,ЗАНИМАЕМУЮ   ВАРИАНТОМ   ЗАПИСИ   СО
           ЗНАЧЕНИЯМИ  ПОЛЯ  ПРИЗНАКА  T1,...,TN.   ВЕЛИЧИНА   ПОЛЯ
           ПРИЗНАКА   ДОЛЖНА   БЫТЬ    ИДЕНТИЧНА    ТОЙ,    КОТОРАЯ
           ИСПОЛЬЗОВАЛАСЬ ДЛЯ РАЗМЕЩЕНИЯ ПЕРЕМЕННОЙ.







                               CTP. 38

                     

ЩИ1.700.016 ПО.04-01 35


      8.1.4. ФАЙЛЫ ПРЯМОГО ДОСТУПА



       ПРЕДЛАГАЕМАЯ   РЕАЛИЗАЦИЯ   ПАСКАЛЯ    СОДЕРЖИТ    НЕСКОЛЬКО
  ОПРЕДЕЛЕНИЙ  ПРОЦЕДУР,  КОТОРЫЕ   ПОСЛЕ   ТРАНСЛЯЦИИ   ВМЕСТЕ   С
  ПРОГРАММОЙ  ОБЕСПЕЧИВАЮТ  ПРЯМОЙ  ДОСТУП  К  ЭЛЕМЕНТАМ   ФАЙЛОВОЙ
  ПЕРЕМЕННОЙ.

   PROCEDURE SEEK(VAR F:RANFIL; VAR DATA:USERTYPE;
                  N:INTEGER)

       ПРОЦЕДУРА  "SEEK"  ВОЗВРАЩАЕТ  N-ЫЙ  ЭЛЕМЕНТ  ФАЙЛА  "F"   В
  ПЕРЕМЕННОЙ "DATA". УСТАНАВЛИВАЕТСЯ EOF(F), ЕСЛИ УКАЗАННЫЙ ЭЛЕМЕНТ
  НЕ СУЩЕСТВУЕТ.

   PROCEDURE DEPOSIT(VAR F:RANFIL; VAR DATA:USERTYPE;
                     N:INTEGER)

       ПРОЦЕДУРА "DEPOSIT" ЗАНОСИТ  ЗНАЧЕНИЕ  ПЕРЕМЕННОЙ  "DATA"  В
  ФАЙЛ "F" В КАЧЕСТВЕ N-ОГО ЭЛЕМЕНТА  (ЗАПИСИ).  ПРИ  НЕОБХОДИМОСТИ
  ФАЙЛ РАСШИРЯЕТСЯ.

   PROCEDURE CLOSERANDOMFILE(VAR F:RANFIL)

       ДАННАЯ ПРОЦЕДУРА ДОЛЖНА ИСПОЛЬЗОВАТЬСЯ  ДЛЯ  ЗАКРЫТИЯ  ФАЙЛА
  ПРЯМОГО ДОСТУПА (ВМЕСТО "CLOSE").

    TYPE USERTYPE=ARRAY[0..255] OF INTEGER;

    TYPE RANFIL=FILE OF USERTYPE;

       ФАЙЛ F ОТКРЫВАЕТСЯ ПРОЦЕДУРОЙ RESET,А  СОЗДАЕТСЯ  ПРОЦЕДУРОЙ
  REWRITE. ПРИ СОЗДАНИИ ФАЙЛА  НЕОБХОДИМО  ЗАПИСАТЬ  ХОТЯ  БЫ  ОДИН
  ЭЛЕМЕНТ.



        8.2. ПРОЦЕДУРЫ ВВОДА/ВЫВОДА



       СТАНДАРТНЫЙ  ПАСКАЛЬ  СОДЕРЖИТ  ОПРЕДЕЛЕНИЯ  ДВУХ   ФАЙЛОВЫХ
  ПЕРЕМЕННЫХ  "INPUT"  И  "OUTPUT",  КОТОРЫЕ  ЯВЛЯЮТСЯ  ФАЙЛАМИ  ПО
  УМОЛЧАНИЮ ДЛЯ "READ" И "WRITE".  ПОЭТОМУ  "READ(I)"  ЭКВИВАЛЕНТНО
  "READ(INPUT,I)".  В  ПАСКАЛЕ,РЕАЛИЗОВАННОМ  ДЛЯ  ДВК,  ПЕРЕМЕННЫЕ
  "INPUT" И "OUTPUT" ПРЕДВАРИТЕЛЬНО НЕ ОПРЕДЕЛЕНЫ. В КАЧЕСТВЕ ФАЙЛА
  ПО УМОЛЧАНИЮ ИСПОЛЬЗУЕТСЯ ТЕРМИНАЛ ДЛЯ ПРОЦЕДУР "READ" И "WRITE".










                               CTP. 39

                     

ЩИ1.700.016 ПО.04-01 35


      8.2.1. ПРОЦЕДУРА READ



       ДЛЯ  ПРОЦЕДУРЫ   READ   ДЕЙСТВУЮТ   СЛЕДУЮЩИЕ   ОБОЗНАЧЕНИЯ:
  F-ТЕКСТОВЫЙ ФАЙЛ;V1,...,VN-ПАРАМЕТРЫ ПРОЦЕДУРЫ.

       СТАНДАРТНАЯ  ПРОЦЕДУРА  READ  ДОПУСКАЕТ  ПРОИЗВОЛЬНОЕ  ЧИСЛО
  ПАРАМЕТРОВ,ТАК ЧТО:

  READ(F,V1,...,VN) ОЗНАЧАЕТ READ(F,V1);...;READ(F,VN)

  ПАРАМЕТРЫ МОГУТ БЫТЬ ЛИТЕРНОГО,ЦЕЛОГО,ВЕЩЕСТВЕННОГО ТИПА  И  ТИПА
  МАССИВ.В ПЕРВОМ СЛУЧАЕ СЧИТЫВАЕТСЯ ТОЛЬКО ОЧЕРЕДНАЯ ЛИТЕРА,В ДВУХ
  СЛЕДУЮЩИХ-  СЧИТЫВАЕТСЯ  ПОСЛЕДОВАТЕЛЬНОСТЬ  ЛИТЕР,ПРЕДСТАВЛЯЮЩИХ
  СОБОЙ ЦЕЛОЕ ИЛИ ВЕЩЕСТВЕННОЕ ЧИСЛО В СООТВЕТСТВИИ  С  СИНТАКСИСОМ
  ЯЗЫКА ПАСКАЛЬ (ПОСЛЕДОВАТЕЛЬНЫЕ ЧИСЛА ДОЛЖНЫ ОТДЕЛЯТЬСЯ ПРОБЕЛАМИ
  ИЛИ СИМВОЛАМИ  КОНЦА  СТРОК).  В  ПОСЛЕДНЕМ  СЛУЧАЕ  ЗНАКИ  БУДУТ
  СЧИТЫВАТЬСЯ, НАЧИНАЯ С ТЕКУЩЕГО ПОЛОЖЕНИЯ УКАЗАТЕЛЯ В ФАЙЛЕ, ПОКА
  НЕ ВСТРЕТИТСЯ ПРОБЕЛ, ЗАПЯТАЯ ИЛИ КОНЕЦ СТРОКИ. ПРИ  ЭТОМ  СТРОКА
  БУДЕТ ВЫРАВНЕНА СЛЕВА И ДОПОЛНЕНА ПРОБЕЛАМИ (ЕСЛИ  СТРОКА  МЕНЬШЕ
  МАССИВА), ИЛИ УСЕЧЕНА СПРАВА (ЕСЛИ СТРОКА БОЛЬШЕ МАССИВА).



      8.2.2. ПРОЦЕДУРА READLN



       СТАНДАРТНАЯ ПРОЦЕДУРА READLN  ПРОПУСКАЕТ  ВО  ВХОДНОМ  ФАЙЛЕ
  СИМВОЛЫ ДО ТЕХ ПОР,ПОКА НЕ ВСТРЕТИТСЯ КОНЕЦ СТРОКИ.

     READLN(F) РАБОТАЕТ ТАКЖЕ КАК:
      WHILE NOT EOLN(F) DO GET(F);
      GET(F)

  READLN(F,V1,...,VN) ОЗНАЧАЕТ READ(F,V1,...,VN);READLN(F)



      8.2.3. ПРОЦЕДУРА WRITE



       ДЛЯ  ПРОЦЕДУРЫ  WRITE   ДЕЙСТВУЮТ   СЛЕДУЮЩИЕ   ОБОЗНАЧЕНИЯ:
  F-ТЕКСТОВЫЙ  ФАЙЛ;  P1,...,PN-ПАРАМЕТРЫ  ПРОЦЕДУРЫ;  E-ВЫРАЖЕНИЕ;
  M,N-ВЫРАЖЕНИЯ ТИПА INTEGER (ФОРМАТЫ ВЫВОДА).

       СТАНДАРТНАЯ ПРОЦЕДУРА  WRITE  ДОПУСКАЕТ  ПРОИЗВОЛЬНОЕ  ЧИСЛО
  ПАРАМЕТРОВ,ТАК ЧТО:

  WRITE(F,P1,...,PN) ОЗНАЧАЕТ WRITE(F,P1);...;WRITE(F,PN)

  КАЖДЫЙ ПАРАМЕТР ПРИНИМАЕТ ОДНУ ИЗ СЛЕДУЮЩИХ ФОРМ:

       E      E:M      E:M:N

  E  МОЖЕТ  БЫТЬ  ЛИТЕРНОГО,ЦЕЛОГО,ВЕЩЕСТВЕННОГО  ИЛИ   ЛОГИЧЕСКОГО
                               CTP. 40

                     

ЩИ1.700.016 ПО.04-01 35


  ТИПА,ЛИБО    ТИПА    МАССИВ.     ЗНАЧЕНИЯ     ПРЕОБРАЗУЮТСЯ     В
  ПОСЛЕДОВАТЕЛЬНОСТЬ  ИЗ  M  ЛИТЕР.  ЕСЛИ  ВЕЛИЧИНА  E  ДЛЯ  СВОЕГО
  ПРЕДСТАВЛЕНИЯ  ТРЕБУЕТ  МЕНЬШЕ  СИМВОЛОВ,ЧЕМ   M,ТО   ДОБАВЛЯЮТСЯ
  ПРОБЕЛЫ,ТАК ЧТО ВЫВОДИТСЯ ТОЧНО M СИМВОЛОВ.  ЕСЛИ  M  МЕНЬШЕ,ЧЕМ
  НЕОБХОДИМО  ДЛЯ  ВЫВОДА  ВЕЛИЧИНЫ   E,   ТО   ВЫВОДИТСЯ   СТОЛЬКО
  СИМВОЛОВ,СКОЛЬКО ТРЕБУЕТ E ДЛЯ СВОЕГО  ПРЕДСТАВЛЕНИЯ  (M  В  ЭТОМ
  СЛУЧАЕ ИГНОРИРУЕТСЯ). N  ПРИМЕНИМО  ТОЛЬКО  К  ПАРАМЕТРАМ,ИМЕЮЩИМ
  ВЕЩЕСТВЕННОЕ  ЗНАЧЕНИЕ  И  ЗАДАЕТ  ЧИСЛО  ЦИФР,ПЕЧАТАЕМЫХ   ПОСЛЕ
  ДЕСЯТИЧНОЙ ТОЧКИ. ЕСЛИ N ОПУЩЕНО,ТО ЧИСЛО ПЕЧАТАЕТСЯ  В  ФОРМЕ  С
  ПЛАВАЮЩЕЙ ТОЧКОЙ. ЕСЛИ M ОПУЩЕНО,ТО ПО УМОЛЧАНИЮ ДЛЯ РАЗНЫХ ТИПОВ
  НАЗНАЧАЮТСЯ СЛЕДУЮЩИЕ ЗНАЧЕНИЯ M:

        ЛИТЕРНЫЙ     ----  1
        ЦЕЛЫЙ        ---- 13
        ВЕЩЕСТВЕННЫЙ ---- 13
        ЛОГИЧЕСКИЙ   ----  6

       ПРОЦЕДУРА "WRITE" БУДЕТ ВЫВОДИТЬ ЦЕЛЫЕ ЧИСЛА В  ВОСЬМЕРИЧНОМ
  ВИДЕ, ЕСЛИ ВЫРАЖЕНИЕ  ДЛЯ  ФОРМАТА  ВЫВОДА  БУДЕТ  ОТРИЦАТЕЛЬНЫМ,
  НАПРИМЕР:

         (* ВЫВЕСТИ "I" В ВОСЬМ.ВИДЕ - 5 ЗНАКОВ *)
         WRITE(I:-5);

    ПРИМЕР:

     ПУСТЬ K=135, N=4, X=72.83, B=TRUE, C='A', ТОГДА
     WRITE(K+K:N,X:12,X:6:1,"  A",C,B)
 ВЫВОДИТ ПОСЛЕДОВАТЕЛЬНОСТЬ ЛИТЕР
  270 7.2830E+01  72.8  AA  TRUE



      8.2.4. ПРОЦЕДУРА WRITELN



       СТАНДАРТНАЯ ПРОЦЕДУРА WRITELN(F) ИСПОЛЬЗУЕТСЯ,ЧТОБЫ ОКОНЧИТЬ
  ВЫХОДНУЮ СТРОКУ И НАЧАТЬ НОВУЮ. ОНА ДОБАВЛЯЕТ МАРКЕР КОНЦА СТРОКИ
  К ФАЙЛУ F.

  WRITELN(F,P1,...,PN) ОЗНАЧАЕТ WRITE(F,P1,...,PN);WRITELN(F)

       ИМЯ  ФАЙЛА  В  ПРОЦЕДУРАХ  READ,READLN,WRITE,WRITELN   МОЖНО
  ОПУСТИТЬ.ПО УМОЛЧАНИЮ В КАЧЕСТВЕ ФАЙЛА ИСПОЛЬЗУЕТСЯ ТЕРМИНАЛ.













                               CTP. 41

                     

ЩИ1.700.016 ПО.04-01 35


      8.2.5. ВВОД/ВЫВОД С ТЕРМИНАЛА



       СТАНДАРТНЫЙ ПАСКАЛЬ ТРЕБУЕТ, ЧТОБЫ ПЕРВЫЙ ЭЛЕМЕНТ ФАЙЛА  БЫЛ
  ПОЛУЧЕН  В  ПРОГРАММЕ  НЕПОСРЕДСТВЕННО  ПОСЛЕ  РАБОТЫ   ПРОЦЕДУРЫ
  "RESET"   (БУФЕРНАЯ   ПЕРЕМЕННАЯ   F^   ПОЛУЧАЕТ   ЭТО   ЗНАЧЕНИЕ
  НЕМЕДЛЕННО). ЭТО ПРИВОДИТ К СЛОЖНОСТЯМ,  ЕСЛИ  В  КАЧЕСТВЕ  ФАЙЛА
  ИСПОЛЬЗУЕТСЯ ТЕРМИНАЛ. НАПРИМЕР, ЕСЛИ ВХОДНОЙ ФАЙЛ  ПО  УМОЛЧАНИЮ
  ЯВЛЯЕТСЯ ТЕРМИНАЛОМ, ТО СТАНДАРТ ТРЕБУЕТ ВВОДА ПЕРВОГО ЗНАКА  ИЛИ
  СТРОКИ ПЕРЕД ЗАПУСКОМ ПРОГРАММЫ НА ВЫПОЛНЕНИЕ.

       В ДАННОЙ РЕАЛИЗАЦИИ ПАСКАЛЯ ИСПОЛЬЗУЕТСЯ  СЛЕДУЮЩЕЕ  РЕШЕНИЕ
  ЭТОЙ  ПРОБЛЕМЫ.   КОГДА   ВЫПОЛНЯЕТСЯ   ПРОЦЕДУРА   "RESET"   ДЛЯ
  ИНТЕРАКТИВНОГО  ТЕРМИНАЛА,  ТО   БУФЕРНАЯ   ПЕРЕМЕННАЯ   ПОЛУЧАЕТ
  ЗНАЧЕНИЕ ПРОБЕЛА И "EOLN". ПРИ ЭТОМ РЕАЛЬНОЙ  ОПЕРАЦИИ  ВВОДА  НЕ
  ПРОИСХОДИТ. КАЖДЫЙ СЛЕДУЮЩИЙ ЗАПРОС "READ" ПОСЛЕ ЭТОГО ДОЖИДАЕТСЯ
  ТРЕБУЕМЫХ ДАННЫХ.

       ЭТО ПОЗВОЛЯЕТ РЕШИТЬ БОЛЬШИНСТВО  ИЗ  ПРОБЛЕМ  С  ТЕРМИНАЛОМ
  УДОВЛЕТВОРИТЕЛЬНЫМ  ОБРАЗОМ,  НО  СЛЕДУЕТ   ПОНИМАТЬ,   ЧТО   ЭТО
  ПОРОЖДАЕТ НЕКОТОРЫЕ ДРУГИЕ ТРУДНОСТИ, НАПРИМЕР:

         VAR LINE: ARRAY[1..72] OF CHAR;
             COUNT: INTEGER;
         BEGIN
             COUNT:=0;
             WHILE NOT EOLN DO BEGIN
                 COUNT:=COUNT+1;
                 READ(LINE[COUNT])
                 END;
             READLN
         END.

       В ПРИВЕДЕННОМ ПРИМЕРЕ  ПОКАЗЫВАЕТСЯ  СТАНДАРТНАЯ  СХЕМА  ДЛЯ
  ЧТЕНИЯ СТРОКИ ЗНАКОВ С ТЕРМИНАЛА. КОГДА ЭТОТ СПОСОБ ПРИМЕНЯЕТСЯ К
  ИНТЕРАКТИВНОМУ ФАЙЛУ, ТО  НЕВОЗМОЖНО  ОТЛИЧИТЬ  ПУСТУЮ  СТРОКУ  И
  СТРОКУ, СОДЕРЖАЩУЮ ОДИН ПРОБЕЛ. ЭТО СВЯЗАНО С ТЕМ, ЧТО "EOLN"  НЕ
  МОЖЕТ БЫТЬ УСТАНОВЛЕН, ПОКА НЕ ВСТРЕТИТСЯ ЗНАК КОНЦА  СТРОКИ  ДЛЯ
  ЗАВЕРШЕНИЯ ЗАПРОСА "READ".



        8.3. КОНЕЦ ФАЙЛА



       В ОСДВК ФАЙЛ ПРЕДСТАВЛЯЕТСЯ  ПОСЛЕДОВАТЕЛЬНОСТЬЮ  БЛОКОВ  ПО
  512 БАЙТ КАЖДЫЙ. ПРИ ЭТОМ В КОНЦЕ ФАЙЛА ОТСУТСТВУЕТ ПРИЗНАК КОНЦА
  ФАЙЛА. ПОЭТОМУ ФУНКЦИЯ "EOF" НЕ  ВСЕГДА  ОБЕСПЕЧИВАЕТ  ПРАВИЛЬНУЮ
  ИНДИКАЦИЮ КОНЦА  ФАЙЛА.  РЕШИТЬ  ЭТУ  ПРОБЛЕМУ  МОЖНО,  ИСПОЛЬЗУЯ
  СЧЕТЧИК  ЗАПИСЕЙ  В  ФАЙЛЕ  ИЛИ  ПУТЕМ  ИСПОЛЬЗОВАНИЯ  СИМВОЛЬНОЙ
  ЗАПИСИ, КОТОРАЯ БУДЕТ ВЫСТУПАТЬ В КАЧЕСТВЕ ПРИЗНАКА КОНЦА.

       ДАННАЯ ПРОБЛЕМА НЕ ОТНОСИТСЯ К ТЕКСТОВЫМ ФАЙЛАМ,  КОТОРЫЕ  В
  КАЧЕСТВЕ ПРИЗНАКА КОНЦА ИСПОЛЬЗУЮТ ЗНАК <CTRL/Z>.


                               CTP. 42

                     

ЩИ1.700.016 ПО.04-01 35


                        9. ОПИСАНИЯ ФУНКЦИЙ




       ОПИСАНИЯ ФУНКЦИЙ СЛУЖАТ ДЛЯ  ОПРЕДЕЛЕНИЯ  ЧАСТЕЙ  ПРОГРАММЫ,
  ВЫЧИСЛЯЮЩИХ СКАЛЯРНОЕ  ИЛИ  УКАЗАТЕЛЬНОЕ  ЗНАЧЕНИЕ.  ОБРАЩЕНИЕ  К
  ФУНКЦИИ ОСУЩЕСТВЛЯЕТСЯ С ПОМОЩЬЮ УКАЗАТЕЛЕЙ  ФУНКЦИИ,  ЯВЛЯЮЩИХСЯ
  ЧАСТЯМИ ВЫРАЖЕНИЙ. ОПИСАНИЕ ФУНКЦИИ  СОСТОИТ  ИЗ  СЛЕДУЮЩИХ  СЕМИ
  ЧАСТЕЙ, КАЖДАЯ ИЗ КОТОРЫХ, ЗА  ИСКЛЮЧЕНИЕМ  ПЕРВОЙ  И  ПОСЛЕДНЕЙ,
  МОЖЕТ БЫТЬ ПУСТА.

  <ОПИСАНИЕ ФУНКЦИИ>::= <ЗАГОЛОВОК ФУНКЦИИ>
                      <РАЗДЕЛ МЕТОК>/
                      <РАЗДЕЛ ОПРЕДЕЛЕНИЙ КОНСТАНТ>/
                      <РАЗДЕЛ ОПРЕДЕЛЕНИЙ ТИПОВ>/
                      <РАЗДЕЛ ОПИСАНИЙ ПЕРЕМЕННЫХ>/
                      <РАЗДЕЛ ОПИСАНИЙ ПРОЦЕДУР И ФУНКЦИЙ>/
                      <РАЗДЕЛ ОПЕРАТОРОВ>

       ЗАГОЛОВОК ФУНКЦИИ ЗАДАЕТ ИДЕНТИФИКАТОР, ОБОЗНАЧАЮЩИЙ  ДАННУЮ
  ФУНКЦИЮ, ФОРМАЛЬНЫЕ ПАРАМЕТРЫ ФУНКЦИИ И ЕЕ ТИП:

  <ЗАГОЛОВОК ФУНКЦИИ>::=FUNCTION<ИДЕНТИФИКАТОР:
                         <ТИП РЕЗУЛЬТАТА>;!
                         FUNCTION<ИДЕНТИФИКАТОР>
                         (<СЕКЦИЯ ФОРМАЛЬНЫХ ПАРАМЕТРОВ>
                         (*;СЕКЦИЯ ФОРМАЛЬНЫХ ПАРАМЕТРОВ>*)):
                        :<ТИП РЕЗУЛЬТАТА>
  <ТИП РЕЗУЛЬТАТА>::=<ИДЕНТИФИКАТОР ТИПА>

       ТИП ФУНКЦИИ ДОЛЖЕН БЫТЬ СКАЛЯРНЫМ, ОТРЕЗКОМ ТИПА  ИЛИ  ТИПОМ
  УКАЗАТЕЛЯ. В ПРЕДЕЛАХ ОПИСАНИЯ ФУНКЦИИ ДОЛЖЕН СОДЕРЖАТЬСЯ ХОТЯ БЫ
  ОДИН ОПЕРАТОР ПРИСВАИВАНИЯ, ПРИСВАИВАЮЩИЙ ЗНАЧЕНИЕ ИДЕНТИФИКАТОРУ
  ФУНКЦИИ. ВХОЖДЕНИЕ ИДЕНТИФИКАТОРА ФУНКЦИИ В УКАЗАTЕЛЬ  ФУНКЦИИ  В
  ПРЕДЕЛАХ ЕЕ ОПИСАНИЯ ПОДРАЗУМЕВАЕТ  РЕКУРСИВНОЕ  ИСПОЛНЕНИЕ  ЭТОЙ
  ФУНКЦИИ.

       QЫЗОВ ФУНКЦИИ  МОЖЕТ  БЫТЬ  РАНЬШЕ  ЕЕ  ОПИСАНИЯ,ЕСЛИ  ЕСТЬ
  FORWARD ССЫЛКА. (СМ. П.8.)


   ПРИМЕРЫ:

  FUNCTION SQRT (X : REAL) : REAL;
    VAR XO,X1 : REAL;
  BEGIN X1:=X; (*X > 1, METOД НЬЮТОНА*)
    REPEAT X0:=X1; X1:=(X0 + X/X0) * 0.5
    UNTIL ABS(X1 - X0) < EPS*X1;
    SQRT:=X0
  END







                               CTP. 43

                     

ЩИ1.700.016 ПО.04-01 35


  FUNCTION MAX(A : VECTOR; N : INTEGER) : REAL;
         VAR X : REAL; I : INTEGER;
  BEGIN X :=A[1];
         FOR I :=2 TO N DO
         BEGIN (* X=MAX(A[1]...A[I-1]) *)
         IF X<A[I] THEN X := A[I]
         END;
         (* X = MAX(A[1]...A[N]) *)
         MAX:=X
  END

  FUNCTION СТЕПЕНЬ (X:REAL; Y:INTEGER) :REAL; (* Y>=0 *)
         VAR W,Z ; REAL;I : INTEGER;
  BEGIN W =: X; Z := 1; I := Y;
         WHILE I <> 0 DO
         BEGIN (* Z * W**I = X**Y *)
         IF ODD(I) THEN Z := Z*W;
         I := I DIV 2; W := SQR(W)
  END (* Z = X**Y *);
  СТЕПЕНЬ := Z
  END



        9.1. СТАНДАРТНЫЕ ФУНКЦИИ



       ПРЕДПОЛAГАЕТСЯ, ЧТО СТАНДАРТНЫЕ ФУНКЦИИ  ЗАРАНЕЕ  ОПИСАНЫ  В
  ЛЮБОЙ РЕАЛИЗАЦИИ ЯЗЫКА ПАСКАЛЬ. ЛЮБАЯ  РЕАЛИЗАЦИЯ  МОЖЕТ  ВВОДИТЬ
  ДОПОЛНИТЕЛЬНО ТАКИЕ ЗАРАНЕЕ ОПИСАННЫЕ ФУНКЦИИ.

       НИЖЕ СЛЕДУЕТ СПИСОК СТАНДАРТНЫХ ФУНКЦИЙ С ПОЯСНЕНИЯМИ.



      9.1.1. АРИФМЕТИЧЕСКИЕ ФУНКЦИИ



  ABS(X)
         - ВЫИСЛЯЕТ  АБСОЛЮТНУЮ  ВЕЛИЧИНУ  Х.  ТИП  Х  ДОЛЖЕН  БЫТЬ
           ВЕЩЕСТВЕННЫМ ИЛИ ЦЕЛЫМ, ТИП РЕЗУЛЬТАТА СОВПАДАЕТ С ТИПОМ
           Х;

  SQR(X)
         - ВЫЧИСЛЯЕТ  Х  ВО  2-Й  СТЕПЕНИ.  ТИП   Х   ДОЛЖЕН   БЫТЬ
           ВЕЩЕСТВЕННЫМ ИЛИ ЦЕЛЫМ, ТИП РЕЗУЛЬТАТА СОВПАДАЕТ С ТИПОМ
           Х;

  SIN(X)    \
  COS(X)    !
  EXP(X)    !      TИП Х ДОЛЖЕН БЫТЬ ВЕЩЕСТВЕННЫМ
  LN(X)     !      ИЛИ ЦЕЛЫМ; РЕЗУЛЬТАТ ИМЕЕТ
  SQRT(X)   !      ВЕЩЕСТВЕННЫЙ ТИП.
  ARCTAN(X) /


                               CTP. 44

                     

ЩИ1.700.016 ПО.04-01 35


  EXP10(X)  \
            !      АНАЛОГИЧНО EXP(X) И LN(X),
  LOG(X)    /      НО ПО ОСНОВАНИЮ 10;



      9.1.2. ПРЕДИКАТЫ



  ODD(X)
         - ТИП Х ДОЛЖЕН БЫТЬ ЦЕЛЫМ, РЕЗУЛЬТАТ РАВЕН TRUE  ,ЕСЛИ  X-
           ЧИСЛО НЕЧЕТНОЕ,Т.Е. "X MOD 2 = 1";

  EOF(F)
         - УКАЗЫВАЕТ, НАХОДИТСЯ ЛИ  ФАЙЛ  "F"  В  СОСТОЯНИИ  "КОНЕЦ
           ФАЙЛА".



      9.1.3. ФУНКЦИИ ПРЕОБРАЗОВАНИЯ



  TRUNC(X)
         - Х ДОЛЖЕН БЫТЬ ВЕЩЕСТВЕННОГО ТИПА,  РЕЗУЛЬТАТ  ИМЕЕТ  ТИП
           ЦЕЛЫЙ (INTEGER) И ПОЛУЧАЕТСЯ  ПРИ  ОТБРАСЫВАНИИ  ДРОБНОЙ
           ЧАСТИ X,Т.Е. ЕСЛИ Х>=0, ТО Х-1<TRUNC(X)<=X; ЕСЛИ X<0, ТО
           X+1>TRUNC(X)>=X;

  ROUND(X)
         - X ДОЛЖЕН БЫТЬ ВЕЩЕСТВЕННОГО ТИПА,РЕЗУЛЬТАТ(ЦЕЛОГО ТИПА)-
           ЦЕЛОЕ ЧИСЛО,БЛИЖАЙШЕЕ К X, Т.Е. :  ROUND(X)=TRUNC(X+0.5)
           ДЛЯ X>=0; И TRUNC(X-0.5) ДЛЯ X<0;

  ORD(X)
         - X ДОЛЖЕН БЫТЬ ЛИТЕРНОГО ТИПА, РЕЗУЛЬТАТ (ЦЕЛОГО ТИПА)  -
           ЭТО   ПОРЯДКОВЫЙ   НОМЕР    ЛИТЕРЫ    Х    В    ЗАДАННОЙ
           ПОСЛЕДОВАТЕЛЬНОСТИ  ЛИТЕР.  РЕЗУЛЬТАТ  ORD(X)  БУДЕТ   В
           ДИАПАЗОНЕ (-128..127).

  CHR(X)
         - X ДОЛЖЕН БЫТЬ ЦЕЛОГО ТИПА, РЕЗУЛЬТАТ (ЛИТЕРНОГО ТИПА)  -
           ЭТО ЛИТЕРА, ПОРЯДКОВЫЙ НОМЕР КОТОРОЙ РАВЕН Х.














                               CTP. 45

                     

ЩИ1.700.016 ПО.04-01 35


      9.1.4. ФУНКЦИЯ "TIME"



       ФУНКЦИЯ    "TIME"    ВОЗВРАЩАЕТ    ЗНАЧЕНИЕ    ТИПА    REAL,
  СООТВЕТСТВУЮЩЕЕ ВРЕМЕНИ ДНЯ В ЧАСАХ ПОСЛЕ ПОЛУНОЧИ. ТОЧНОСТЬ ЭТОЙ
  ФУНКЦИИ НЕ МЕНЕЕ ОДНОЙ СЕКУНДЫ, НАПРИМЕР:

     PROCEDURE WRITETIME;
     VAR R:REAL;
             HOURS,MINUTES:INTEGER;
             AMPM: ARRAY [1..2] OF CHAR;
     BEGIN
       R:=TIME;
       HOURS:=TRUNC(TIME);
       MINUTES:=TRUNC((R-HOURS)*60.0);
       IF HOURS > 12
             THEN AMPM:='PM'
             ELSE IF (HOURS = 12) AND (MINUTES = 0)
               THEN AMPM:='M '
               ELSE AMPM:='AM';
       WRITE('AT THE TONE THE TIME WILL BE: ');
       WRITE((HOURS+11) MOD 12 + 1 :2);
       WRITE(':', MINUTES DIV 10:1,
                  MINUTES MOD 10:1, AMPM:3);
       WRITE(CHR(7));
     END.



      9.1.5. ПРОЧИЕ СТАНДАРТНЫЕ ФУНКЦИИ



  SUCC(X)
         - Х МОЖЕТ БЫТЬ ЛЮБОГО СКАЛЯРНОГО ТИПА ИЛИ  ОТРЕЗКОМ  ТИПА;
           РЕЗУЛЬТАТ - ЭТО ЗНАЧЕНИЕ, СЛЕДУЮЩЕЕ ЗА Х  (ЕСЛИ  ТАКОВОЕ
           ИМЕЕТСЯ);

  PRED(X)
         - Х МОЖЕТ БЫТЬ ЛЮБОГО СКАЛЯРНОГО ТИПА ИЛИ  ОТРЕЗКОМ  ТИПА,
           РЕЗУЛЬТАТ - ЭТО ЗНАЧЕНИЕ,  ПРЕДШЕСТВУЮЩЕЕ  Х  (EСЛИ  ОНО
           СУЩЕСТВУЕТ).















                               CTP. 46

                     

ЩИ1.700.016 ПО.04-01 35


                           10. ПРОГРАММЫ




       ПРОГРАММА НА ЯЗЫКЕ ПАСКАЛЬ ИМЕЕТ ВИД ОПИСАНИЯ ПРОЦЕДУРЫ  БЕЗ
  ЗАГОЛОВКА.  ЕСЛИ  ЗАГОЛОВОК  ВСЕ   ЖЕ   УКАЗАН,   ТО   ОН   БУДЕТ
  РАСПЕЧАТЫВАТЬСЯ В  НАЧАЛЕ  КАЖДОЙ  СТРАНИЦЫ  ЛИСТИНГА  ПРОГРАММЫ.
  ЛЮБОЙ ПАРАМЕТР В ЗАГОЛОВКЕ ПРОГРАММЫ ИГНОРИРУЕТСЯ.

  <ПРОГРАММА> :: = <РАЗДЕЛ ОПИСАНИЙ МЕТОК>/
                   <РАЗДЕЛ ОПРЕДЕЛЕНИЙ КОНСТАНТ>/
                   <РАЗДЕЛ ОПРЕДЕЛЕНИЙ ТИПОВ>/
                   <РАЗДЕЛ ОПИСАНИЙ ПЕРЕМЕННЫХ>/
                   <РАЗДЕЛ ОПИСАНИЙ ПЕРЕМЕННЫХ И
                           ФУНКЦИЙ>/
                   <РАЗДЕЛ ОПЕРАТОРОВ>
 СЕКЦИЯ ОПИСАНИЙ
 МОЖЕТ ПОЯВЛЯТЬСЯ НЕСКОЛЬКО РАЗ В ТЕКСТЕ ПРОГРАММЫ, НО ИСПОЛЬЗОВАТЬ ИМЕНА
 (ИДЕНТИФИКАТОРЫ) МОЖНО ТОЛЬКО ПОСЛЕ ТОГО, КАК ОНИ ОПИСАНЫ.
 СУЩЕСТВУЕТ НЕСКОЛЬКО СПОСОБОВ ИСПОЛЬЗОВАТЬ ДАННУЮ ВОЗМОЖНОСТЬ.
 НАПРИМЕР,
 ИМЕТЬ ФАЙЛЫ С ОТДЕЛЬНЫМИ МОДУЛЯМИ. ПЕРЕД ТРАНСЛЯЦИЕЙ ЭТИ ФАЙЛЫ
 МОГУТ ОБ'ЕДИНЯТЬСЯ ВМЕСТЕ С ОСНОВНОЙ ПРОГРАММОЙ. ДРУГИМИ СЛОВАМИ,
 ОБЕСПЕЧИВАЮТСЯ ПРОСТЕЙШИЕ СРЕДСТВА РАБОТЫ С БИБЛИОТЕКОЙ МОДУЛЕЙ ПАСКАЛЯ
 В ИСХОДНОМ ВИДЕ.

       ПРИМЕР:

  ФАЙЛ:
         (* ОПРЕДЕЛЕНИЕ ГРАФИЧЕСКОГО МОДУЛЯ *)
         VAR ... (* ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ ФУНКЦИЙ *)
         PROCEDURE (* ОПИСАНИЕ ГРАФИЧЕСКИХ ФУНКЦИЙ *)
         PROCEDURE ...
         (* КОНЕЦ ГРАФИЧЕСКОГО МОДУЛЯ *)
  ФАЙЛ:
         (* ФАЙЛ ОСНОВНОЙ ПРОГРАММЫ *)
         VAR ... (* ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ *)
         BEGIN (* ТЕКСТ ПРОГРАММЫ *) END.



       10.1. ИСПОЛЬЗОВАНИЕ МАКРОАССЕМБЛЕРА



       ПАСКАЛЬ,РЕАЛИЗОВАННЫЙ ДЛЯ ДВК, ДАЕТ ВОЗМОЖНОСТЬ  ВКЛЮЧАТЬ  В
  ЛЮБОЕ   МЕСТО   ПРОГРАММЫ   ОТДЕЛЬНЫЕ    ФРАГМЕНТЫ    НА    ЯЗЫКЕ
  МАКРОАССЕМБЛЕР. ЧАСТИ ПРОГРАММЫ, НАПИСАННЫЕ  НА  МАКРОАССЕМБЛЕРЕ,
  МОГУТ ИСПОЛЬЗОВАТЬ ПЕРЕМЕННЫЕ ИЗ ПРОГРАММЫ НА ЯЗЫКЕ ПАСКАЛЬ, ХОТЯ
  ДЛЯ ЭТОГО  ТРЕБУЕТСЯ  НЕКОТОРОЕ  ПОНИМАНИЕ  ПРОЦЕССА  ОРГАНИЗАЦИИ
  ВЫПОЛНЕНИЯ. ДЛЯ ВКЛЮЧЕНИЯ ФРАГМЕНТА  НА  АССЕМБЛЕРЕ  ИСПОЛЬЗУЕТСЯ
  СПЕЦИАЛЬНЫЙ ВИД КОММЕНТАРИЕВ, НАПРИМЕР:





                               CTP. 47

                     

ЩИ1.700.016 ПО.04-01 35


         PROCEDURE EMTTRAP (N:INTEGER);
         BEGIN
           (*¤C                  ;НАЧАЛО ФРАГМЕНТА НА МАКРО
                 MOV N(SP),-(SP) ;ПАРАМЕТР "N" -> В СТЕК
                 EMT 53          ;ВЫЗВАТЬ ДИСПЕТЧЕР EMT
           *)
         END     (* EMTTRAP*)

       ПРИ  ИСПОЛЬЗОВАНИИ  МАКРОАССЕМБЛЕРА  СЛЕДУЕТ  ПОМНИТЬ,   ЧТО
  ОСНОВАНИЕМ СЧИСЛЕНИЯ ЧИСЛОВЫХ КОНСТАНТ ПО УМОЛЧАНИЮ ЯВЛЯЕТСЯ  10,
  А НЕ 8.



       10.2. ВНЕШНИЕ И ФОРТРАНОВСКИЕ ПОДПРОГРАММЫ (ПРОЦЕДУРЫ)



       ДАННЫЙ ПАСКАЛЬ ДОПУСКАЕТ ИСПОЛЬЗОВАНИЕ "ВНЕШНИХ" ПРОЦЕДУР  И
  ФУНКЦИЙ, КОТОРЫЕ ТРАНСЛИРУЮТСЯ ОТДЕЛЬНО  ОТ  ОСНОВНОЙ  ПРОГРАММЫ.
  ЭТО ПОЗВОЛЯЕТ ИСПОЛЬЗОВАТЬ БИБЛИОТЕКИ МОДУЛЕЙ. ОБ'ЯВЛЕНИЕ ВНЕШНЕЙ
  ПРОЦЕДУРЫ    ОСУЩЕСТВЛЯЕТСЯ    КЛЮЧЕВЫМ    СЛОВОМ     "EXTERNAL".
  ИСПОЛЬЗОВАНИЕ  КЛЮЧЕВОГО  СЛОВА  "FORTRAN"  ПРИВЕДЕТ   К   ВЫЗОВУ
  ПОДПРОГРАММЫ В СООТВЕТСТВИИ С СОГЛАШЕНИЯМИ ИСПОЛНЯЮЩЕЙ СИСТЕМЫ  С
  ЯЗЫКА ФОРТРАН/ОСДВК. СЛЕДУЕТ ОТМЕТИТЬ, ЧТО ПЕРЕДАЧА ПАРАМЕТРОВ  В
  ПОДПРОГРАММУ НА ЯЗЫКЕ ФОРТРАН ОСУЩЕСТВЛЯЕТСЯ ПО ССЫЛКЕ, А  НЕ  ПО
  ЗНАЧЕНИЮ, Т.Е. ВСЕ  ПАРАМЕТРЫ  ДОЛЖНЫ  БЫТЬ  ОБ'ЯВЛЕНЫ,  КАК  VAR
  (ПЕРЕМЕННЫЕ).

       ПРИМЕРЫ:

         PROCEDURE ERASE; EXTERNAL
         FUNCTION DIFFERENCE(VAR X,Y:REAL):REAL; FORTRAN;

