"Программы без ошибок можно написать
двумя способами, но работает — третий"
Алан Джей Перлис

Структура программы в Pascal

Любая программа, написанная на языке Pascal состоит из заголовка программы и некоторого блока. Блок содержит раздел описаний, в котором определяются все локальные по отношению к данной программе объекты, и раздел операторов. Он задает действия, которые необходимо выполнять, над этими объектами.

program имя программы; {заголовок программы}
uses {раздел подключения модулей (библиотек)}
Label ..., ..., ...; {раздел описания меток}
Const ...; ...; {раздел определения констант}
Type <имя> = <значение>; {раздел описания типов}
Var <список>:<тип>; {раздел описания переменных}
Function ...; {раздел описания функций}
Procedure ...; {раздел описания процедур}
begin  {раздел операторов}
	......;
	......;
end.

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

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

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

andendnilset
arrayfilenotthen
beginforofto
casefunctionortype
constgotopackeduntil
divifprocedurevar
doinprogramwhile
downtolabelrecordwith
elsemodrepeat

Заголовок носит чисто информативный характер и никак не влияет на программу. Программу можно написать и не используя его. После имени программы в ранних редакциях языка указывались круглые скобки и в них давались имена входных и выходных файлов задачи. В последних версиях языка 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;

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