Структура процедуры аналогична структуре программы.
Заголовок процедуры начинается с зарезервированного слова procedure, за которым следуют имя процедуры и список формальных параметров, заключённый в круглые скобки. Список может отсутствовать, т.к. не является обязательным. Параметры, перечисленные в заголовке подпрограммы, называют формальными, потому что они не существуют в программе как перечисленные в ней обычные переменные и константы. Формальные параметры существуют внутри подпрограммы и получают значения фактических параметров из программы, причём имена фактических и формальных параметров могут не совпадать.
Затем следует раздел описаний, ничем не отличающийся от аналогичного раздела основной программы и состоящий из разделов объявлений меток, констант, типов, переменных, процедур и функций.
За разделом описаний следует раздел операторов, заключённый в операторные скобкиbeginи end, причём послеend ставят точку с запятой в отличие от основной программы.
Любая процедура в разделе операторов может содержать несколько операторов и несколько результатов своего выполнения.
Вызывают процедуру по её имени с указанием фактических параметров вместо формальных. Фактическими параметрами могут быть константы, переменные и выражения. С помощью формальных и фактических параметров данные передают из процедуры в программу и наоборот. Каждый формальный параметр указывают вместе со своим типом. Соответствующий ему фактический параметр указывают без типа. Между формальными и фактическими параметрами должно быть соответствие по количеству, типу и порядку следования. При этом значения фактических параметров, передаваемых в процедуру, должны быть получены до вызова процедуры.
Если несколько формальных параметров имеют одинаковый тип, то их можно объединить в список, то есть перечислить имена параметров через запятую, а затем после двоеточия указать их тип.
Среди формальных параметров различают параметры–значения и параметры–переменные.
Параметры–значения выполняют функции входных параметров процедуры. Они могут получать значения фактических параметров, но не могут передавать свои значения фактическим параметрам, т.е. не могут изменять значения фактических параметров.
Для выделения параметров-переменных перед ними в перечислении формальных параметров ставят зарезервированное словоvar. Параметры-переменные выполняют функции как входных, так и выходных параметров процедуры. Они могут получать значения фактических параметров, изменять их в процедуре в процессе вычислений, тем самым присваивая новые значения фактическим параметрам, и возвращать их в основную программу.
В тех случаях, когда в процедуре и основной программе используют одни и те же имена переменных (параметров), то процедуру можно организовать без параметров, так как процедура всегда связана с основной программой посредством глобальных переменных.
Описание заголовка процедуры может иметь несколько разновидностей:
а) без списка формальных параметров и
б) со списком формальных параметров.
В списке формальных параметров подпрограмм допустимы следующие способы задания параметров:
1) параметры, перед которыми отсутствует служебное слово var и за которыми следует идентификатор типа,
2) параметры, перед которыми стоит служебное слово var и за которыми следует тип,
3) параметры, перед которыми стоит служебное слово var, но не имеющие типа вслед за ними,
Эти способы задания формальных параметров отражают три различных способа передачи параметров. Первый способ называют передачей параметров по значению, второй – передачей параметров по ссылке, третий – передачей нетипизированных параметров по ссылке. Одна подпрограмма может получать различные параметры всеми способами одновременно.
А. Заголовок процедуры без списка формальных параметров состоит только из зарезервированного слова procedure и имени процедуры:
procedure имя_процедуры;
и описывает процедуру без параметров.
В этом случае процедура осуществляет выполнение предусмотренных в ней операторов, используя константы, переменные и другие идентификаторы, объявленные в основной программе. Раздел описаний в такой процедуре может отсутствовать.