Следующие несколько  глав посвящены формальному определению языка Borland Pascal.  В каждой главе обсуждается один из элементов Borland  Pascal.  Совместно  эти  элементы образуют программу  Borland Pascal.

Однако, изучая части,  трудно понять целое.  В данной главе  дается общий  обзор  программы  Borland Pascal,  опуская детали.  Здесь приводится краткое описание каждого элемента  программы,  а  затем показывается,  как все это компонуется вместе.  Подробности  элементов языка освещаются  главах 2 - 11.

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

program Privet;

begin

  Writeln('Добро пожаловать в Borland Pascal');

end.

Первая строка  - это  заголовок программы,  который именует  данную программу.  Остальная часть программы - это исходный  код,  который начинается ключевым словом begin и заканчивается end. Хотя данная конкретная программа содержит только  одну  строку, их  может быть  много.  В любой программе Borland Pascal все действия  выполняются между begin и end.

Код между  последними операторами begin и end программы управляет логикой программы. В очень простой программе в этой секции кода может содержаться все,  что вам нужно. В более крупных и  сложных программах размещение в этой  секции  всего  программного  кода может затруднить чтение и понимание программы.  К тому же ее  будет труднее разрабатывать.

Процедуры и функции позволяют разделить логику программы  на  более мелкие и управляемые фрагменты и аналогичны подпрограммам в  других языках.  Как и в основном блоке программы,  все действия в  процедурах  и функциях заключаются в begin и end.  Каждый из этих  сегментов кода выполняет конкретную задачу.

ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї

і Процедура или функция   і

іЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДїі

іі Заголовок процедуры или функции   іі

іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі

іЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДїі

іі Блок процедуры или функциями   іі

іі begin іі

ііЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДїіі

ііі Логика ііі

ііАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩіі

іі end;   іі

іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі

АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

Рис. 1.1 Диаграмма процедуры или функции.

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

Приведем пример функции. Следующая функция GetNumber получает число от пользователя:

function GetNumber: Real;

var

    Responce: Real;

begin

Write('Введите число: ');

Readln(Response);

GetNumber := Response;

end;

Процедура или функция должна содержаться в  программе  перед  секцией основного кода. В основном коде она может затем использоваться (вызываться).

ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї

і Процедура или функция   і

іЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДїі

іі Заголовок процедуры или функции   іі

іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі

іЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДїі

іі Блок процедуры или функциями   іі

ііЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДїіі

ііі Процедуры или функции (0 или более)   ііі

    ііАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩіі

іі begin іі

ііЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДїіі

ііі Логика  ііі

ііАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩіі

іі end;   іі

іАДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі

АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

Рис. 1.2 Простая программа на Паскале.

В следующем примере дается набросок программы, в которой используется функция GetNumber.  Программист разделил логику  программы на три задачи:

1. Получение числа от пользователя.

2. Выполнение с этим числом необходимых вычислений.

3. Печать отчета.

Основная логика  программы   заключена  в последнем  блоке  begin..end.

Program Report;

var

  A: Real;

{ другие описания }

.

.

.

  function GetNumber: Real;

   var

  Responce: Real;

   begin

   Write('Введите число: ');

   Readln(Response);

  GetNumber := Response;

   end;

 

   procedure Calculate(X: Real);

  .

  .

  .

  procedure PrintReport;

  .

  .

  .

begin

  A: = GetNumber;

   Calculate(A);

  PrintReport;

end.

Основная логика  программы достаточно проста для понимания. Все детали убраны в тела процедур и функций. Использование процедур и функций позволяет вам рассматривать программу более удобным  и модульным способом.

Исходный код  между begin и end содержит операторы,  которые описывают выполняемые программой действия.  Это называются операторной частью программы. Приведем примеры операторов:

A := B + C; { присвоить значение }

Calculate(Length, Height); { активизировать процедуру }

if X < 2 then  { оператор условия }

  Answer := X * Y;

begin { составной оператор }

   X := 3;

  Y := 4;

  Z := 5;

end;

 

while not EOF(InFile) do   { оператор цикла }

begin

ReadLn(InFile, Line);

Process(Line);

end;

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

 

Оператор Паскаля состоит из выражений.  Выражения оператора  могут состоять  из операндов и операций.  Обычно в выражениях выполняется сравнение либо арифметические, логические или булевские  операции.

Выражения Паскаля могут состоять из более простых выражений.  О комбинации операндов и операций вы можете прочитать в Главе  6.  Они могут  быть  достаточно сложными.  Приведем некоторые примеры  выражений:

X + Y

    Done <> Error

I <= Length

-X

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

function { зарезервированное слово }

(  { специальный символ }

:= { специальный символ }

Calculate   { идентификатор процедуры }

9  { число }

Приведем пример, из которого вы можете видеть, что операторы  состоят из выражений, которые в свою очередь состоят из лексем.

ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї

і Операторы (1 или более) і

іЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДїі

іі Выражения (1 или более)  іі

ііЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДїіі

ііі Лексемы (1 или более)  ііі

ііАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩіі

іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі

АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

Рис. 1.3 Диаграмма оператора.

Переменная может содержать изменяемое значение. Каждая переменная должна иметь тип. Тип переменной определяет множество значений, которые может иметь переменная.

Например, в  следующей программе описываются переменные X и  Y, имеющие тип Integer.  Таким образом,  X и  Y  могут содержать  только целые значения (числа).  Если в вашей программе предпринимается попытка присвоить этим переменным значения  другого  типа,  Borland Pascal сообщает об ошибке.

program Example;

 

const

A = 12;  { константа A не изменяет значения }

B: Integer = 23;  { типизированная константа B получает

   начальное значение }

var

   X, Y: Integer;  { переменные X и Y имеют тип Integer }

   J: Real;  { переменная J имеет тип Real }

begin

   X := 7;   { переменной X присваивается значение }

   Y := 7;   { переменной Y присваивается значение }

   X := Y + Y;  { значение переменной X изменяется }

   J := 0.075;  { переменной J присваивается значение

   с плавающей точкой }

end.

В этой простой и не очень полезной программе X первоначально  присваивается значение 7; двумя операторами ниже ей присваивается  новое значение:  Y + Y. Как можно видеть, значение переменной может изменяться.

A - это константа. Программа назначает ей значение 12, и это  значение изменяться  не может  - в ходе выполнения программы оно  остается постоянным.

B представляет собой типизированную константу. Ей присваивается значение при описании,  но дается также тип Integer. Типизированую константу можно рассматривать как переменную с  начальным  значением. Позднее программа может изменить первоначальное значение B на какое-то другое значение.

Если вы вернетесь обратно к приведенному в начале главы примеру кода,  то увидите, что функция GetNumber имеет раздел описаний, в котором описывается переменная.  Процедуры и функции могут  содержать разделы описаний также как программы и модули.

Теперь, когда  вы познакомились  с  основными компонентами  программы Borland Pascal, давайте посмотрим, как все это работает  вместе. Приведем диаграмму программы Borland Pascal:

ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї

і Программа на Паскале і

іЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДїі

іі Заголовок программы   іі

іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі

іЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДїі

іі Необязательные операторы uses  іі

іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі

іЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДїі

іі Основной блок программы  іі

ііЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДїіі

ііі Описания  ііі

ііАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩіі

ііЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДїіі

ііі Процедуры или функции (0 или более)   ііі

іііЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДїііі

іііі Описанияіііі

іііАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩііі

ііі begin  ііі

   іііЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДїііі

ііі і Операторы (1 или более)   іііі

ііі АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩііі

ііі end;    ііі

ііАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩіі

іі begin іі

іі  ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДїіі

іі  і Операторы (1 или более) ііі

іі  іЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДїііі

іі  іі Выражения (1 или более)  іііі

іі  ііЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДїіііі

іі  ііі Лексемы (1 или более)  ііііі

іі  ііАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩіііі

іі  іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩііі

іі  АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩіі

іі end.   іі

іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі

АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

Рис. 1.4 Расширенная диаграмма программы на Паскале.

Программу на Паскале составляют заголовок программы,  необязательный оператор uses (о нем будет рассказано позднее) и основной блок программы.  В основном блоке могут присутствовать  более  мелкие блоки  процедур и функций.  Хотя на диаграмме это не показано, процедуры им функции могут быть вложенными в другие  процедуры или функции.  Другими словами,  блоки могут содержать другие  блоки.

В сочетании с другими лексемами и  пробелами  лексемы  могут  образовывать выражения,  формирующие оператор.  Операторы, в свою  очередь, в сочетании с разделом описаний образуют блоки  основной

  программы или блок в процедуре или функции.

Программа Borland Pascal может  использовать  блоки кода  в  программных модулях.  Модуль (unit)  можно рассматривать как мини-программу, которую может использовать ваша прикладная программа. Как и программа, он имеет заголовок (который называется заголовком модуля) и основной блок, ограниченный begin и end.

 

Основной блок любой программы Borland Pascal может  включать  в себя  строку, позволяющую программе использовать один или более  модулей. Например, если вы пишете программу DOS с именем Colors и хотите изменять  цвета выводимого на экран текста,  то ваша программа может  использовать стандартный  модуль  Crt,  являющийся  частью библиотеки исполняющей системы Borland Pascal

program Colors;

uses Crt;

begin

.

.

.

end.

Строка uses Crt сообщает Borland Pascal,  что нужно включить  модуль Crt в выполняемую программу.  Кроме всего прочего,  модуль  Crt содержит  весь  необходимый  код для изменения цвета в вашей  программе. Путем простого включения uses Crt ваша программа может  использовать весь код,  содержащийся в модуле Crt. Поэтому оператор uses называют также оператором использования.  Если бы вы поместили весь код,  необходимый для реализации функциональных возможностей Crt, в свою программу, это потребовало бы огромных усилий и отвлекло бы вас от основной цели программы.

Библиотеки исполняющей системы Borland Pascal включают в себя несколько модулей, которые вы найдете весьма полезными. Например, благодаря  использованию модулей Dos или WinDos,  ваша программа может получить доступ к нескольким подпрограммам операционной системы и подпрограммам работы с файлами.

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

При изучении  глав 2  -  11,  где определяется язык Borland  Pascal, вы встретите синтаксические диаграммы, например:

ЪДДДї  ЪДДДДДДДДДДДДДДї  ЪДДДї

   константа-массив  ДДД>і ( ГДДДД>ітипизированнаяГДДВД>і ) ГДД>

    АДДДЩ ^  і  константа   і  і АДДДЩ

 і  АДДДДДДДДДДДДДДЩ  і

 і   ЪДДДї   і

 АДДДДДДґ , і<ДДДДДДДДЩ

   АДДДЩ

Чтобы прочитать  диаграмму, следуйте  по  стрелкам.  Часто  встречаются альтернативные пути:  путь, начинающийся слева и заканчивающийся стрелкой справа,  является допустимым. Путь пересекает блоки, содержащие имена элементов, используемых для построения этой части синтаксиса.

Имена в  прямоугольных рамках с текстом должны быть заменены  действительными конструкциями.  Некоторые рамки содержат зарезервированные слова, знаки операций и знаки пунктуации, то есть фактические термы,  используемые в программе.  Имена в блоках -  это  конструкции  языка.  Имена,  написанные по-английски  (например,  procedure),  представляю собой зарезервированные слова и операции  Borland Pascal.