infm08
.pdf«Информатика» для студентов групп Ф1-ХХ
Методические указания
Лабораторная работа 8
Процедуры и функции. Работа с параметрами.
Механизм передачи параметров
Параметры и способы их передачи
Подытожим правила работы с параметрами.
Формальные параметры – это параметры, которые описываются в заголовке подпрограммы. Фактические параметры – это параметры, которые передаются подпрограмме при ее вызове.
По умолчанию параметры передаются в подпрограмму по значению (параметры-значения). Подпрограмма работает с копией фактических параметров, не изменяя их самих.
При указании в заголовке подпрограммы перед описанием параметра ключевого слова var (параметры-переменные), передается адрес фактического параметра в памяти. При этом изменение формальных параметров приводит к изменению фактических.
Например, рассмотрим фрагмент программы:
procedure summ(u,v:integer; var w:longint; x,y:real;); begin
... |
u,v,w,x,y – формальные параметры |
||
end; |
|||
процедуры summ |
|
||
const alpha=1.23; |
u,v,x,y – параметры-значения |
|
|
var a :integer; |
w – параметр-переменная |
||
b :byte; |
|
|
|
c :longint; |
фактические параметры, |
|
|
d :real; |
|
||
которые передаются |
|
||
e :longint; |
в процедуру summ |
переменные |
|
begin |
|
|
|
... |
|
константы |
|
summ(a, b, c, d, e); |
|
|
|
... |
|
выражения |
summ(10, a+2*b, e, alpha, 0.5+a/3-sin(d));
... end.
При этом выполняются требования:
количество формальных и фактических параметров одинаково;
порядокследованияформальныхифактическихпараметроводини тотже;
Впримере: при первом вызове процедуры a соответствует u,
b – v, c – w, d – x, e – y.
тип фактического параметра должен быть совместим с типом соответствующего формального параметра-значения;
1
Параметры, соответствующие u и v, могут быть описаны как
переменные типов byte, shortint, integer, а также как
константы этих же типов или как выражения, возвращающие результаты указанных типов. А для параметров x и y то же самое справедливо для типов single, real или любого из целочисленных.
тип фактического параметра должен совпадать с типом соответствующего формального параметра-переменной, причем
фактического параметр – это обязательно переменная.
В примере: w – параметр-переменная, поэтому соответствующий ей фактический параметр должен иметь тип longint и не может быть константой или выражением.
Область видимости и время жизни
Область видимости
Областью видимости (или областью действия) идентификатора
(переменной, константы, процедуры, функции и др.) называется часть программы, где он может быть использован. Область видимости идентификаторов определяется местом их объявления.
Все идентификаторы, которые описываются в подпрограмме, являются локальными, т.е. доступны только в пределах этой подпрограммы и не доступны из вызывающей программы.
Идентификаторы, описанные в программе, являются глобальными. Если они описаны перед объявлением процедур и функций, то ими можно пользоваться в данных процедурах и функциях.
Подпрограмма может содержать описание внутренних процедур и функций, причем допускается любой уровень вложенности. Тогда идентификаторы, описанные в вызывающей подпрограмме, являются глобальными по отношению к вызываемой подпрограмме. Поэтому понятия «глобальный» и «локальный» относительны для каждой процедуры и функции.
Пример:
|
|
|
|
|
||||
program |
Scope; |
|
|
|
||||
var |
|
a0 |
:integer; |
|
|
|
||
|
|
procedure p1; |
|
|
|
|||
|
|
var |
a1 |
:integer; |
|
|
|
|
|
|
|
procedure p2; |
|
|
|
||
|
|
|
var |
a2, b2 :integer; |
|
|
||
|
|
|
begin |
|
|
|
|
|
|
|
|
|
... { доступны: a0,a1 – глобальные} |
|
|
||
|
|
|
|
... { |
a2,b2 - локальные } |
|
|
|
|
|
|
end; |
|
|
|
|
|
|
|
var |
b1 |
:integer; |
|
|
|
|
|
|
begin |
|
|
a0 – глобальная} |
|
|
|
|
|
|
... { доступны: |
|
|
|||
|
|
... { |
|
a1,b1 – локальные } |
|
|
||
var |
|
end; |
|
|
|
|
|
|
|
|
b0 |
:integer; |
|
|
|
begin
... { доступны только a0,b0} end.
2
Совпадение имен
В случае совпадения имен локального и глобального идентификаторов,
видимым будет только локальный идентификатор, а глобальный
недоступен.
То есть действие внешних идентификаторов отменяется. Действуют только локальные идентификаторы с тем же именем, независимо от того, совпадают они по типу, или нет.
Пример:
program EqualNames; var a :integer;
procedure p1; var a :real;
procedure p2; var a :char; begin
... { a доступна как char } end;
begin
... { a доступна как real } end;
begin
... { a доступна как integer } end.
Время жизни
Локальные данные создаются при вызове подпрограммы, а существуют только во время ее выполнения. Выделение памяти для локальных данных происходит в начале выполнения подпрограммы, а освобождение этой памяти
– как только выполнение подпрограммы заканчивается.
После завершения подпрограммы все изменения значений локальных данных, сделанные в ходе ее работы, исчезнут вместе с освобождением памяти.
Рекомендации по разработке
Советы разработчику
При работе с подпрограммами нужно стараться:
сокращать количество глобальных переменных до минимума и держать каждую из них под постоянным контролем;
все рабочие и промежуточные переменные описывать как локальные (при этом желательно, чтобы имена локальных и глобальных переменных не совпадали);
достигать автономности подпрограмм – процедуры и функции не должны использовать глобальные переменные, а обмениваться данными с основной программой нужно только через параметры;
3
описывать входные параметра подпрограммы как параметры-значения, а возвращаемые (выходные) – как параметры-переменные;
по возможности избегать вложенных процедур и функций.
Содержание |
|
Процедуры и функции. Работа с параметрами. ...................... |
1 |
Механизм передачи параметров ............................................................... |
1 |
Параметры и способы их передачи............................................................... |
1 |
Область видимости и время жизни.......................................................... |
2 |
Область видимости.......................................................................................... |
2 |
Совпадение имен................................................................................................. |
3 |
Время жизни......................................................................................................... |
3 |
Рекомендации по разработке..................................................................... |
3 |
Советы разработчику...................................................................................... |
3 |
4