Процедуры Пример: Пусть требуется вычислить такое выражение
Описание процедуры procedure SUM(H,K: integer; var p,q: integer); var i: integer; begin p:=0; q:=1; for i:=H to K do begin p:=p*i+q; q:=q*i end end;
Обращение к процедуре SUM(10,80,a,b);{a/b=1/ /80} SUM(m,2*m,c,d); {c/d=1/m+...+1/(2m)} SUM(1,m,e,f); {e/f= /m} r:=a*c*e; s:=b*d*f; Назначение процедур – сократить текст программ за счет отказа от повторного выписывания одинаковых действий. Поэтому процедуру имеет смысл использовать, если в программе хотя бы дважды приходится решать одну и ту же подзадачу, либо,если подобную подзадачу необходимо решать в других задач, куда можно переместить описание процедуры.
Формальное описание процедур раздел процедур и функций описание процедуры описание функции ; ::= ; заголовок процедуры список формальных параметров имя ( procedure )
Виды процедур Процедуры без параметров: Предположим, что в программе несколько раз встречается оператор writeln('Вы ошиблись! Повторите ввод') Описав процедуру: procedure повт; begin writeln('Вы ошиблись! Повторите ввод') end; можно сократить текст программы, указывая в нужных местах лишь короткие обращением к этой процедуре:... повт;...; повт;... Процедуры с параметрами: 1) Имя параметра. Каждому формальному параметру надо дать имя, чтобы на него можно было ссылаться в теле процедуры. Какое это имя? Любое, лишь бы имена разных параметров отличались друг от друга. 2) Тип параметра. При описании формального параметра надо указать его тип - за его именем после двоеточия. Тип формального параметра обязательно указывается только своим именем.
3) Параметры-значения и параметры-переменные. SUM H K p q Если в списке формальных параметров перед параметром стоит служебное слово var var x:T - параметр-переменная, если оно отсутствует x:T - параметр-значение Сокращения в списке формальных параметров procedure P(a:char; b:char; var c:real; var d:real; e:real; f:char); procedure P(a,b:char; var c,d:real; e:real; f:char);
список формальных параметров секция формальных параметров ; секция формальных параметров var, : имя типа имя
ПРАВИЛО ЛОКАЛИЗАЦИИ y, z A x B D y C y B вложен в A (A объемлет B) B и C - независимые блоки Область видимости имени (или объекта с этим именем) – это тот участок программы, где это имя существует, где им можно пользоваться. Вне этой области имя недоступно, оно не существует
Формулировка правила локализации 1) Имя, описанное в блоке, существует только в этом блоке и не существует вне этого блока. 2) В каждом блоке каждое имя может быть описано только раз. 3) В каждой точке программы всегда действует описание имени из ближайшего объемлющего блока. Если объединить три указанных утверждения вместе, то получится следующая формулировка правила локализации: Областью видимости имени является весь блок, в котором это имя описано, за исключением тех вложенных блоков, где описано такое же имя. Глобальные и локальные имена процедуры локальные: имена формальных параметров и вспомогательных объектов глобальные: стандартные имена и имена из программы
Оператор процедуры оператор процедуры имя процедуры () фактический параметр, ::= | | | 1) В операторе процедуры фактические параметры отделяются друг от друга запятыми, тогда как в заголовке процедуры формальные параметры отделяются точками с запятой. 2) Число фактических параметров должно равняться числу формальных параметров. 3) Порядок фактических параметров должен соответствовать порядку следования формальных параметров. 4) Типы фактических и формальных параметров должны совпадать. 5) Что можно указывать в качестве фактического параметра? фактический параметр параметр-значение выражение параметр-переменная переменная