Содержание

Введение

Данное руководство посвящено используемому в Borland Pascal with Objects языку Паскаль. Оно

мые библиотеки.

Примечания: Обзор всего набора документации по Borland Pascal вы можете найти во введении к «Руководству пользователя».

Если вы

  1. хотите узнать, как установить Borland Pascal в системе;
  2. использовали Turbo Pascal или Turbo Pascal for Windows ранее и хотите узнать, что нового в этой версии;
  3. не знакомы с интерактивной интегрированной средой разработки программ (IDE) фирмы Borland;
  4. хотите познакомиться с введением в объектно-ориентирован-

ное программирование;

  1. не имеете опыта программирование на Паскале в Windows;
  2. хотите познакомиться с ObjectWindows;

то прочитайте «Руководство пользователя».

Чтобы найти справочные материалы по следующим темам:

  1. библиотеки исполняющей системы;
  2. директивы компилятора;
  3. сообщения об ошибках;
  4. работа с редактором;

прочтите «Справочное руководство программиста».

О чем рассказывается в данном руководстве

Данное руководство разбито на четыре части: грамматика языка, библиотеки, вопросы продвинутого программирования и использование с Borland Pascal языка ассемблера.

В Части I «Язык Borland Pascal» определяется язык Borland Pascal. Сначала вы познакомитесь с общей структурой программы Borland Pascal, затем о каждом элементе программы будет рассказано более подробно.

Часть II «Библиотеки исполняющей системы» содержит информацию о стандартных модулях, образующих библиотеку исполняющей системы, и о том, как их использовать. Здесь рассказывается также, как писать программы для защищенного режима DOS.

В Части III «В среде Borland Pascal» дается техническая информация для продвинутых пользователей. Здесь рассказывается:

  1. об использовании памяти в Borland Pascal;
  2. о том, как в Borland Pascal реализовано управление программой;
  3. о деталях по вводу и выводу;
  4. об оптимизации вашего кода.

В Части IV «Использование Borland Pascal с языком ассемблера» поясняется, как использовать встроенный ассемблер и как компоновать ваши программы Паскаля с кодом Турбо Ассемблера.

Часть I. Язык Borland Pascal

Глава 1. Что такое программа Borland Pascal?

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

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

Программа Borland Pascal

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

program Privet;
begin
  Writeln('Добро пожаловать в Borland Pascal');
end.

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

Процедуры и функции

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

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

   -----------------------------------------------------------
   ¦ Процедура или функция                                    ¦
   ¦---------------------------------------------------------¦
   ¦¦ Заголовок процедуры или функции                        ¦¦
   ¦L---------------------------------------------------------¦
   ¦---------------------------------------------------------¦
   ¦¦ Блок процедуры или функциями                           ¦¦
   ¦¦ begin                                                  ¦¦
   ¦¦-------------------------------------------------------¦¦
   ¦¦¦ Логика                                               ¦¦¦
   ¦¦L-------------------------------------------------------¦¦
   ¦¦ end;                                                   ¦¦
   ¦L---------------------------------------------------------¦
   L-----------------------------------------------------------

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

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

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

function GetNumber: Real;
var
   Responce: Real;
begin
   Write('Введите число: ');
   Readln(Response);
   GetNumber := Response;
end;

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

    -----------------------------------------------------------
   ¦ Процедура или функция                                    ¦
   ¦---------------------------------------------------------¦
   ¦¦ Заголовок процедуры или функции                        ¦¦
   ¦L---------------------------------------------------------¦
   ¦---------------------------------------------------------¦
   ¦¦ Блок процедуры или функциями                           ¦¦
   ¦¦-------------------------------------------------------¦¦
   ¦¦¦ Процедуры или функции (0 или более)                  ¦¦¦
   ¦¦L-------------------------------------------------------¦¦
   ¦¦ begin                                                  ¦¦
   ¦¦-------------------------------------------------------¦¦
   ¦¦¦ Логика                                               ¦¦¦
   ¦¦L-------------------------------------------------------¦¦
   ¦¦ end;                                                   ¦¦
   ¦L---------------------------------------------------------¦
   L-----------------------------------------------------------

Рис. 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 или более)                                ¦¦¦
   ¦¦L-------------------------------------------------------¦¦
   ¦L---------------------------------------------------------¦
   L-----------------------------------------------------------
 Рис. 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:

   -----------------------------------------------------------
   ¦ Программа на Паскале                                     ¦
   ¦---------------------------------------------------------¦
   ¦¦ Заголовок программы                                    ¦¦
   ¦L---------------------------------------------------------¦
   ¦---------------------------------------------------------¦
   ¦¦ Необязательные операторы uses                          ¦¦
   ¦L---------------------------------------------------------¦
   ¦---------------------------------------------------------¦
   ¦¦ Основной блок программы                                ¦¦
   ¦¦-------------------------------------------------------¦¦
   ¦¦¦ Описания                                             ¦¦¦
   ¦¦L-------------------------------------------------------¦¦
   ¦¦-------------------------------------------------------¦¦
   ¦¦¦ Процедуры или функции (0 или более)                  ¦¦¦
   ¦¦¦-----------------------------------------------------¦¦¦
   ¦¦¦¦ Описания                                           ¦¦¦¦
   ¦¦¦L-----------------------------------------------------¦¦¦
   ¦¦¦ begin                                                ¦¦¦
   ¦¦¦    -------------------------------------------------¦¦¦
   ¦¦¦    ¦ Операторы (1 или более)                        ¦¦¦¦
   ¦¦¦    L-------------------------------------------------¦¦¦
   ¦¦¦ end;                                                 ¦¦¦
   ¦¦L-------------------------------------------------------¦¦
   ¦¦ begin                                                  ¦¦
   ¦¦  -----------------------------------------------------¦¦
   ¦¦  ¦ Операторы (1 или более)                            ¦¦¦
   ¦¦  ¦---------------------------------------------------¦¦¦
   ¦¦  ¦¦ Выражения (1 или более)                          ¦¦¦¦
   ¦¦  ¦¦-------------------------------------------------¦¦¦¦
   ¦¦  ¦¦¦ Лексемы (1 или более)                          ¦¦¦¦¦
   ¦¦  ¦¦L-------------------------------------------------¦¦¦¦
   ¦¦  ¦L---------------------------------------------------¦¦¦
   ¦¦  L-----------------------------------------------------¦¦
   ¦¦ end.                                                   ¦¦
   ¦L---------------------------------------------------------¦
   L-----------------------------------------------------------
 Рис. 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, вы встретите синтаксические диаграммы, например:

                        ----       ---------------     ----
  константа-массив  --->¦ ( +---->¦типизированная+--T->¦ ) +-->
                        L----  ^  ¦  константа   ¦  ¦  L----
                               ¦  L---------------  ¦
                               ¦      ----          ¦
                               L------+ , ¦<---------
                                      L----

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

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