В заголовке процедуры или функции может быть задан список параметров, которые называются формальными. Название «формальные» эти параметры получили в связи с тем, что в этом списке заданы только имена для обозначения исходных данных и результатов работы процедуры, а при вызове программы на их место будут подставлены конкретные значения. Этот список указывается после имени подпрограммы и заключается в круглые скобки. Список формальных параметров, указываемых в заголовке подпрограммы, может включать в себя: – параметры-значения; – параметры-переменные, перед которыми должно стоять служебное слово var и за которыми указывается их тип; – параметры-процедуры, перед которыми должно стоять служебное слово procedure; – параметры-функции, перед которыми должно стоять служебное слово function и после которых указывается тип значения, возвращаемого функцией в основную программу; – нетипизированные параметры, перед которыми должно стоять служебное слово var, а указание типа должно отсутствовать. В списке должны быть перечислены имена формальных параметров и их типы. Имя параметра отделяется от типа двоеточием, а параметры друг от друга – точкой с запятой. Имена параметров одного типа можно объединять в подсписки, в которых имена отделяются друг от друга запятой. Примеры заголовков: procedure P(procedure В; function С : real; Q. W. R : char); procedure A: Между формальными и фактическими параметрами должно быть полное соответствие: – формальных и фактических параметров должно быть одинаковое количество; – порядок следования фактических и формальных параметров должен совпадать; – тип каждого фактического параметра должен совпадать с типом соответствующего формального параметра.
Параметры-значения Параметры-значения используются только для передачи исходных данных из основной программы в подпрограмму (процедуру или функцию). В списке формальных параметров они перечисляются через запятую с обязательным указанием их типов: procedure Abort(Msg: string): function Step(N : integer; X ; real): real: Если формальный параметр объявлен как параметр-значение, то фактическим может быть произвольное выражение. При вызове подпрограммы фактические параметры вычисляются и используются в качестве начальных значений формальных параметров, т.е. осуществляется подстановка значений. Если формальный параметр определен как параметр-значение, то перед вызовом процедуры это значение вычисляется, полученный результат помещается во временную память и передается процедуре. Даже если фактический параметр – простейшее выражение в виде константы или переменной, все равно процедуре будет передана лишь копия этой константы (переменной). В процессе выполнения подпрограммы формальные параметры могут изменяться, но это никак не отражается на соответствующих фактических параметрах-переменных, которые сохраняют те значения, которые имели до вызова подпрограммы, так как меняются не они, а их копии. Поэтому параметры-значения нельзя использовать для передачи результатов из подпрограммы в основную программу.
Параметры-переменные Параметры-переменные используются для определения результатов выполнения процедуры и в списке формальных параметров перечисляются после зарезервированного слова var с обязательным указанием типа. Каждому формальному параметру, объявленному как параметр-переменная, должен соответствовать фактический параметр в виде переменной соответствующего типа, например: procedure Example(var M,N : integer; var Y : real); Если формальный параметр определен как параметр-переменная, то при вызове процедуры передается сама переменная, а не ее копия, и изменение параметра-переменной приводит к изменению фактического параметра в вызывающей программе. Следовательно, исходные данные в процедуру из программы могут передаваться как через параметры-значения, так и через параметры-переменные, а результаты работы процедуры возвращаются в вызывающую программу только через параметры-переменные. |