Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
infa.docx
Скачиваний:
0
Добавлен:
25.09.2019
Размер:
99.7 Кб
Скачать

Вопрос6.

Параметры-значения используются только для передачи исходных данных в подпрограмму. По умолчанию параметры процедур и функций

считаются переданными по значению.

В данном случае подпрограмме передается только значение параметра, которое помещается в специально созданную переменную. Таким образом, при работе с формальным параметром используется копия фактического параметра. Значения формальных параметров может изменяться в подпрограмме, но на значениях фактических параметров это не отражается.

Пример:

procedure summ(x, y :integer; s :longint);

begin

s := x + y;

writeln('Сумма = ', s); {на экран будет выведено значение суммы}

end;

var a, b :integer;

c :longint;

begin

c := 0;

write('Введите a:'); Readln(a);

write('Введите b:'); Readln(b);

summ(a,b,c);

writeln('Сумма = ',c); {

на экран будет выведено:

Сумма = 0}

end.

Параметры-переменные используются для передачи данных в подпрограмму и возврата результатов работы. В списке формальных параметров перед ними ставится ключевое слово var.

Каждому формальному параметру-переменной должен соответствовать фактический параметр обязательно в виде переменной

При работе с формальным параметром используется память фактического параметра. Поэтому изменение значений формальных параметров приводит к изменению значений фактических параметров.

Тот же пример (в заголовке функции добавлено ключевое слово var):

procedure summ(x, y :integer; var s :longint);

begin

s := x + y;

end;

var a, b :integer;

c :longint;

begin

c := 0;

write('Введите a:'); Readln(a);

write('Введите b:'); Readln(b);

summ(a,b,c);

writeln('Сумма = ',c); {на экран будет выведено значение суммы}

end.

Вопрос 7

Областью видимости идентификатора (переменной, константы, процедуры, функции и др.) называется часть программы, где он может быть использован. Область видимости идентификаторов определяется местом их объявления. Все идентификаторы, которые описываются в подпрограмме, являются

локальными. Идентификаторы, описанные в программе, являются глобальными. Если

они описаны перед объявлением процедур и функций, то ими можно пользоваться в данных процедурах и функциях. Подпрограмма может содержать описание внутренних процедур и

функций, причем допускается любой уровень вложенности. Тогда идентификаторы, описанные в вызывающей подпрограмме, являются

глобальными по отношению к вызываемой подпрограмме. Поэтому понятия «глобальный» и «локальный» относительны для каждой процедуры и функции.

Пример:

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 – локальные}

end;

var b0 :integer;

begin

... {доступны только a0,b0}

end.

В случае совпадения имен локального и глобального идентификаторов, видимым будет только локальный идентификатор, а глобальный недоступен. То есть действие внешних идентификаторов отменяется. Действуют только локальные идентификаторы с тем же именем, независимо от того, совпадают они по типу, или нет.

Пример:

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.

Локальные данные создаются при вызове подпрограммы, а существуют только во время ее выполнения. Выделение памяти для локальных данных происходит в начале выполнения подпрограммы, а освобождение этой памяти

– как только выполнение подпрограммы заканчивается. После завершения подпрограммы все изменения значений локальных данных, сделанные в ходе ее работы, исчезнут вместе с освобождением памяти.

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