Структура программы в Pascal
Любая программа, написанная на языке Pascal состоит из заголовка программы и некоторого блока. Блок содержит раздел описаний, в котором определяются все локальные по отношению к данной программе объекты, и раздел операторов. Он задает действия, которые необходимо выполнять, над этими объектами.
program имя программы; {заголовок программы}
uses {раздел подключения модулей (библиотек)}
Label ..., ..., ...; {раздел описания меток}
Const ...; ...; {раздел определения констант}
Type <имя> = <значение>; {раздел описания типов}
Var <список>:<тип>; {раздел описания переменных}
Function ...; {раздел описания функций}
Procedure ...; {раздел описания процедур}
begin {раздел операторов}
......;
......;
end.
Заголовок программы
В заголовке программе дается некоторое имя. Обычно стараются выбирать имя, отражающее основную функцию, выполняемую программой. Заголовок всегда начинается со служебного слова program
, после которого через пробел пишется имя программы. Оно может состоять из символов английского алфавита, цифр и знака подчеркивания. Имя программы всегда должно начинаться с буквы.
В имени программы нельзя использовать какие-либо предописанные имена (зарезервированные слова). Они используются в программе только в том значении, которое зафиксировано для них разработчиками языка Pascal. Ниже приведен список таких слов.
and | end | nil | set |
array | file | not | then |
begin | for | of | to |
case | function | or | type |
const | goto | packed | until |
div | if | procedure | var |
do | in | program | while |
downto | label | record | with |
else | mod | repeat |
Заголовок носит чисто информативный характер и никак не влияет на программу. Программу можно написать и не используя его. После имени программы в ранних редакциях языка указывались круглые скобки и в них давались имена входных и выходных файлов задачи. В последних версиях языка Pascal имена входных и выходных файлов в заголовке программы отсутствуют.
Пример правильного написания заголовка:
program Perimetr;
program Phone37;
program one_two_3;
Пример неправильного написания заголовка:
program 9zet;
program Samara-63;
program repeat;
Label - раздел описания меток
Любой оператор программы можно маркировать, поставив перед ним через двоеточие метку, тем самым появляется возможность ссылаться на эту метку при помощи оператора перехода goto
. Однако такая метка, прежде чем она будет использована, должна быть описана в разделе описания меток. Этот раздел начинается со слова Label
.
Имя метки может включать в себя буквы английского алфавита, цифры и знак подчеркивания. При этом, в отличии от имени программы метка может начинаться с цифры, да и вообще состоять только из цифр, но это число должно представлять собой целое число без знака, лежащее в диапазоне от 0 до 9999.
Пример правильного написания меток:
label 13, 00100, 99, qwerty, x_y;
Раз уж разговор зашел про метки, то нужно сказать, что использование меток и оператора перехода goto не желательно при написании программы на Pascal. Применять его стоит только в необычных, исключительных ситуациях, когда приходится нарушать естественную структуру алгоритма. Частое появление в программе на Pascal оператора перехода свидетельствует о том, что программист еще не научился думать на Pascal.
Этот раздел необязателен, если у вас в программе не используются метки.
Const - раздел определения констант
Константы - это величины, которые не меняют своих значений в процессе выполнения программы. Допустим, в вашей программе часто приходится оперировать с числом 3,14 (число Пи). Чтобы каждый раз не вводить это число, мы определяем константу с именем Pi и в вычисления уже подставляем ее.
Использование имен констант делает программу более "читаемой" и способствует улучшению ее документируемости. Кроме того, это позволяет программисту сгруппировать в начале программы величины, зависящие от машины или характерные для данного примера: здесь они более заметны и их легче изменить. Тем самым улучшается переносимость программ и их модульность.
Начинается данный раздел со служебного слова Const
. Далее идут описания констант, каждое из которых начинается с имени константы, затем идет символ =
(равенство), после чего пишется константа или выражение, составленное из констант. Завершается каждое описание точкой с запятой.
Const <имя> = <константа или выражение>;
Константа может иметь только предопределенный (стандартный) тип данных. Тип присваивается константе по внешнему виду значения и в соответствии с этим типом отводится память для хранения значения константы.
В качестве расширения стандартного Паскаля разрешено использовать выражения, составленные из ранее определенных констант и некоторых стандартных функций: Abs, Chr, Hi, Length, Lo, Odd, Ord, Pred, Prt, Round, SizeOf, Succ, Swap, Trunc
. Константные выражения вычисляются компилятором без выполнения программы на этапе ее создания. Пример:
const
Avogadro = 6.023Е23;
PageLength = 60;
MyMove = True;
stroka = 'abcdefg';
Min = 0;
Max = 250;
Centr = (Max-Min) div 2;
Beta = Chr(225);
NumChars = Ord('2') - Ord('A')+l;
Этот раздел также необязателен, если у вас в программе не используются константы.
Type - раздел описания типов
Помимо стандартных типов данных в Pascal (Real, Integer, Boolean, Char) пользователь может задать новые типы. Структура раздела описания типов имеет вид:
Type
<имя 1=""> = <значение 1="">;
<имя 2=""> = <значение 2="">;
…
<имя l=""> = <значение l="">;
Имя типа представляет собой идентификатор, который может употребляться в других типах, описанных вслед за данным типом. Вообще, новые типы можно определять и в разделе переменных Var, поэтому можно обойтись без этого раздела. Приведу несколько примеров описания типов:
Type
Year = 1800.. 2015; {Интервальный тип}
Alfavit = ('А', 'B, 'C', 'T, 'L'); {Перечисляемый тип}
Matrica = array[1..12, 'А'.. 'Z'] of real; {Регулярный тип}
Var - раздел описания переменных
Этот раздел является обязательным. Переменные отличаются от констант тем, что им можно присваивать новые значения при исполнении программы. Любая переменная, которая будет использована в программе должна быть описана. Что включает в себя описание переменной? Это значит, что переменной должен быть присвоен какой-либо тип данных, который характеризует множество значений, которые может принимать объект; множество операций, которые могут применяться к объекту; размер памяти, занимаемый объектом.
Начинается этот раздел с предописанного слова var
. Следом идут описания переменных, каждое из которых начинается со списка имен переменных, разделяемых запятыми, затем идет символ : (двоеточие), затем указывается тип этих переменных. Завершается каждое описание точкой с запятой.
Структура раздела имеет вид:
Var
<список 1="">:<тип 1="">;
<список 2="">:<тип 2="">;
…
<список n="">:<тип n="">;
Тип переменных представляет собой имя (идентификатор), описанный в разделе TYPE при явном описании типа, или собственно описание типа в случае его неявного задания. Примеры описания переменных:
Var
Year: 1800.. 2000; {неявное описание типов }
А, В, C: Real; {описание переменных стандартных типов}
Istina: Boolean; {описание переменных стандартных типов}
Stroka: Char; {описание переменных стандартных типов}
I, J, К: Integer; {описание переменных стандартных типов}
Function, Procedure - раздел описаний процедур и функций
В разделе Function и Procedure описываются пользовательские процедуры и функции, если таковые имеются. Если их нет, то этот раздел не обязателен в программе.
Процедура представляет собою подпрограмму и активируется (начинает выполняться) через оператор процедуры. Функция - это тоже подпрограмма, но она выдает некоторое значение - результат и поэтому используется, как компонента выражения.
Структура раздела имеет вид:
Procedure <имя> (<параметры>); {заголовок процедуры}
<разделы> {тело процедуры }
Begin
<раздел>
End;
Function <имя>(<параметры>): <тип>; { заголовок }
<разделы> {тело функции}
Begin
<раздел>
End;
Структура процедур и функций та же самая, что и у основной программы. Отличие описаний состоит в том, что идентификаторы констант, переменных, процедур и функций, описанных в соответствующих разделах описаний пользовательских процедур и функций, распространяются только на блоки, где они описаны и на блоки внутренние по отношению к ним. На внешние блоки, в том числе на тело основной программы, они не распространяются.