Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

infm08

.pdf
Скачиваний:
12
Добавлен:
05.06.2015
Размер:
155.52 Кб
Скачать

«Информатика» для студентов групп Ф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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]