Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
програмирование 49-54.docx
Скачиваний:
6
Добавлен:
01.05.2025
Размер:
561.12 Кб
Скачать

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

Обмен данными между основной программой и подпрограммой реализован в механизме входных и выходных параметров.

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

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

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

При вызове процедуры или функции транслятор выполняет следующие операции:

1. В теле основной программы вычисляются выражения, стоящие на месте фактических параметров.

2. В оперативной памяти выделяется место под формальные параметры в соответствии с их типами.

3. Выполняется проверка соответствия типов формальных и фактических параметров. При несоответствии типов происходит ошибка трансляции.

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

Объявление процедуры в языке Pascal имеет следующий синтаксис:

procedure имя(список_параметров);

{Раздел описаний}

begin

операторы;

end;

Первая строка называется заголовком процедуры, операторы между операторными скобками begin и end называются телом процедуры.

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

1. Параметры-значения. Описываются обычным образом:

список_переменных:тип;,

например, a,b:integer;, c:real:=7.35;

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

2. Параметры-переменные. При описании должны предваряться зарезервированным словом Var или Const, например

Var a,b:integer; Const c:real:=7.35;.

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

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

Если формальный параметр является параметром-переменной, то говорят, что он передается по ссылке.

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

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

procedure MyProc(a:integer; flag:boolean; d,e:char);.

Если в качестве формальных параметров используются структурированные данные, то первоначально необходимо объявить пользовательский тип данных, соответствующий структурному типу, например:

type

MyType=array [1..10] of integer;

procedure MyProc(a:integer; massiv:MyType; d,e:char);

Подпрограмма-функция описывается аналогично процедуре, за исключением того, что вместо слова procedure используется function и указывается тип возвращаемого результата. Синтаксис объявления функции:

function имя(список_параметров):тип_значения;

{Раздел описаний}

begin

операторы;

end;

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

В PascalABC.NET определена специальная переменная Result, в которую заносится возвращаемое функцией значение. В отличие от идентификатора функции, переменную Result можно использовать в выражениях.

Если внутри тела функции не присвоить идентификатору функции или переменной Result какого-либо значения, то результатфункции считается неопределенным.Раздел описаний процедур и функций может содержать блоки,аналогичные блокам раздела описаний основной программы: Label,Const, Var, Type, а так же вложенные процедуры и функции. Переменные, объявляемые в разделе описаний подпрограммы, являются для нее локальными. При вызове процедуры или функции фактические аргументы перечисляются через символ , (запятая).Если в программе описаны несколько процедур и/или функций,то в каждой из последующих можно обращаться в предыдущем.