пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

pogromirovanie:
» sooqa
Уася:
» History motherfuckers

Функции. Описание, вызов. Формальные и фактические параметры, их взаимодействие.

Функция

Вычисляет единственное значение.

Описание

{заголовок}

function<имя функции>(<список входных формальных параметров>):<тип результата>;

{раздел описаний локальных объектов}

<описания меток, констант, типов, переменных, процедур и

функций> <описания меток, констант, типов, переменных,

процедур и функций>

{раздел операторов}

begin

<операторы> <операторы>

<имя функции>:=<значение>

end;
Здесь <тип результата>::=<имя простого типа> <имя указателя>
Обращение к функции осуществляется с помощью указателя функции, используемого как операнд некоторого выражения. Вид указателя:

<указатель функции>::=<имя функции>(<список фактических параметров>)

Построение интерфейсов для параметров нестандартных типов

Важнейшее синтаксическое правило при описании процедур Паскаля: в спецификациях формальных параметров указываются только имена типов:

. . . <список идентификаторов> : <имя типа> . . .

Поэтому необходимо для любого параметра, не принадлежащего к стандартному типу (целому, вещественному, символьному, логическому) до описания процедуры (т.е. вне процедуры) определить тип этого параметра. По определению, этот тип по отношению к процедуре будет глобальным.
К этому же типу должны принадлежать и фактические параметры в вызове процедуры. Например, всегда необходимо определять глобальный тип для параметров – массивов (в разделе type). Если в качестве границ массива используются идентификаторы, эти идентификаторы необходимо описать в разделе const вне процедуры. По определению, это будут глобальные именованные константы.
Список фактических параметров

Формальные и фактические параметры обязательно должны принадлежать к одному типу.

Правила подстановки (соответствия фактических параметров формальным) следующие.

Фактические параметры разделяются запятыми!

Формальный параметр

Фактический параметр

параметр-переменная (var)

переменная

параметр-значение

Const, переменная, выражение

 

Передача параметров – значений и параметров – переменных

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

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

  1. фактическим параметром. Если значение фактического параметра меняется, то это измененное значение доступно в программе после завершения работы процедуры.

Поэтому выходные параметры процедуры необходимо специфицировать как параметры – переменные.

Следствие. Как var можно описывать входные массивы – параметры с целью экономии памяти (чтобы они не копировались во временную память) и времени на копирование.

  1. Если формальный параметр – параметр-значение, то соответствующий ему фактический параметр может быть : Const, переменной или выражением и при этом память выделяется и под формальный, и под фактический параметры. В момент вызова процедуры значение фактического параметра–значения пересылается в ячейку для соответствующего формального (локальную переменную) и на этом связь обрывается. Дальше процедура работает с этой переменной. Можно сказать, что параметр – значение локализуется в теле процедуры. По завершении выполнения процедуры значение этой переменной недоступно. Соответствующий фактический параметр не меняется.

Обычно входные параметры процедуры делают параметрами –значениями.

Связь между процедурой и основной программой

  1. С помощью механизма параметров. Там где возможно передавать результаты через фактические параметры-переменные;
  2. С помощью глобальных переменных.

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

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

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

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

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

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

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

Выбор имен формальных параметров

Имена формальных параметров всегда должны выбираться так, чтобы в итоге наглядно прослеживалось соответствие формальных и фактических параметров при вызове. Сделать это можно по-разному.

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

Например, в задаче обрабатывается массив a из n элементов (фактические параметры). Соответствующие формальные параметры можно назвать a1 и n1. В частном случае можно просто брать одни и те же имена.

То же справедливо, если процедура вызывается несколько раз с одними и теми же переменными – фактическими параметрами

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

Одна и та же процедура обрабатывает три разных массива: a из na элементов, b из nb элементов и c из nc элементов. Чтобы массив – формальный параметр не ассоциировался ни с каким из конкретных массивов, но в имени отображалось, что речь идет о массиве, он назван mas; число элементов названо n.

Хорошим вариантом именования представляется и такой:
массивы в задаче – a1, a2, a3 соответственно из n1, n2 и n3 элементов;
формальные параметры процедуры – a и n.


27.01.2014; 07:21
хиты: 1833
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь