Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Понятие процедуры и функции.Содержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте
Для организации подпрограмм используются 2 типа подпрограмм: процедуры и функции.
Функция – подпрограмма, в которой выполняется некоторый набор действий, в результате чего имя функции получает некоторое единственное значение, передаваемое в вызываемую подпрограмму, при этом управление при выходе из функции возвращается в точку ее вызова.
Процедура – подпрограмма, в которой производится некоторый набор действий, при этом имени процедуры ничего не присваивается: процедура не имеет возвращаемого значения. Результаты в вызывающую программу передаются через механизм параметров или глобальные переменные. Управление возвращается за точку вызова процедуры.
Локальные const, var, type, label – описательная часть.
Сравнение процедур и функций. - Функция обязательно имеет тип возвращаемого значения. Процедура возвращаемого значения не имеет. - Внутри тела функции – обязательно присвоение имени значения. - Процедура вызывается отдельно с помощью оператора вызова с передачей параметров, функция – вызывается в операторе присваивания. - Функция всегда возвращает хотя бы 1 результат; процедура не возвращает ничего.
Модель дальнего вызова подпрограмм. Спецификатор far, объявленный около имени процедуры, включает директиву дальнего вызова. В данном режиме компилятор определяет модель памяти, для которой любые указатели воспринимаются как дальние, то есть, данные могут располагаться в сегменте, отличном от сегмента программы.
Предварительное описание подпрограмм. В ряде случаев необходимо выполнять предварительные описания процедур или функций. Например, пусть существует процедура a, которая в ходе своей работы выполняет обращение к процедуре b. Следовательно, процедура b должна быть объявлена и известна компилятору до момента вызова (т.е. выше процедуры a).
Допустим, процедура b в ходе своей работы вызывает процедуру a. Для разрешения этого выполняют предварительное объявление. Оно представляет собой заголовок процедуры или функции без указания её тела с обязательной директивой forward. Эта директива указывает компилятору на то, что тело подпрограммы будет описано ниже с возможным досрочным вызовом.
Внешнее описание подпрограмм. В процессе накопления опыта программирования может быть создан набор подпрограмм, удобных для дальнейшего использования. Обычно такие функции объединяют в библиотеки. Библиотека представляет собой откомпилированный файл, не являющийся программой.
В таком случае объектный код содержится в некотором *.obj-файле, а само подключение производится директивой {$L имя файла}. После описания заголовка подпрограммы из *.obj-файла необходимо задать служебное слово external. Это укажет компилятору, что вызываемую подпрограмму с данным именем следует искать в одном из подключенных объектных файлов.
Механизм параметров. Формальные и фактические параметры. Параметры значения, переменные, константы, нетипизированные параметры.
Организация обмена данными происходит с помощью механизма параметров.
Все данные можно разбить на 4 основных класса: - значения - ссылки - константы - нетипизированные параметры
При организации вызова подпрограмм в оперативной памяти в специальной области, называемой областью рекурсивного стека, создается копия рабочих полей подпрограммы, содержащая всю локальную для этой подпрограммы информацию, необходимую для ее выполнения. Рекурсивный стек состоит из страниц и заполняется по мере вызова подпрограмм.
1 – указатель связи (адрес вызываемой подпрограммы) 2 – локальные переменные, объявленные в описательной части подпрограммы 3 – адрес возврата (куда будет передано управление) 4 – параметры из заголовка вызываемой подпрограммы, при этом список записывается в страницу стека в прямом порядке 5 – возвращаемое значение, если таковое имеется.
После завершения подпрограммы страница стека полностью удаляется.
Формальные и фактические параметры.
Обмен информацией между вызываемой и вызывающей подпрограммой осуществляется с помощью механизма передачи параметров. Переменные, указанные в заголовке подпрограммы называют формальными параметрами. Эти переменные используются только внутри подпрограммы.
Переменные, указанные в строке вызова подпрограммы называются фактическими параметрами. Их значение зависит от механизма передачи параметра. Для вызываемой подпрограммы данные переменные являются глобальными.
Между фактическими и формальными параметрами устанавливается взаимооднозначное соответствие. Количество, типы и порядок следования параметров должны совпадать.
Параметры значения: используются для передачи данных в подпрограмму, при этом создается копия передаваемого значения. Изменения таких параметров не видны на внешнем уровне. Тип формального и фактического параметра должен быть совместим по присваиванию.
Если в вызывающей программе описаны переменные X: Integer, C: Byte; Y: Longint;, то синтаксически правильными вызовами P будут P(X), P(C), P(Y), P(200).
Основной недостаток – временные затраты, необходимые для создания копии передаваемого параметра, затрата памяти в стеке и его переполнение.
Параметры ссылки (параметры-переменные): используются для организации передачи результатов работы подпрограммы через параметры, при этом передается адрес параметра без создания его копии. Все изменения, производимые с параметром, передаваемым по ссылке, видны после вызова подпрограммы.
Параметры-константы так же, как и параметры-переменные, позволяют передавать в подпрограмму данные по ссылке, но в отличие от параметров-переменных модификация переданных значений внутри подпрограммы невозможна и эта ситуация будет отслеживаться компилятором. Параметры-константы используются для передачи в подпрограмму больших объемов данных с целью экономии динамической памяти.
Такие параметры передаются с указанием ключевого слова const и приводят в текущую область стека адрес передаваемого значения.
Нетипизированные параметры: В ряде случаев необходимо передавать параметры, тип которых в момент описания функциинеизвестен. Такие параметры называют нетипизированными, при этом тип формального параметра в заголовке функции не указывается, а производится подстановка типа фактического параметра.
Замечание: при работе с нетипизированными параметрами следует учитывать, что в качестве нетипизированных параметров могут использоваться только параметры-переменные. Для использования нетипизированных параметров необходимо выполнять приведение типов. Данное приведение должно быть явным. Явное приведение - указание имени типа перед именем переменной.
Процедурные типы. Параметры-функции и параметры-процедуры.
Передаваемым в подпрограмму параметром может также быть процедура или функция (указатель на нее), т.е. параметр процедурного типа.
Для параметров-функций и параметров-процедур существуют следующие правила: подпрограммы должны иметь ключевое слово far; они не должны являться стандартными подпрограммами; не должны объявляться внутри других подпрограмм; не должны иметь директив inline или interrupt.
Назначение процедурных типов состоит в том, чтобы дать программисту гибкое средство для передачи процедур или функций в качестве фактических параметров. Для объявления процедурного типа используется заголовок процедуры или функции без указания её имени с определением набора параметров, а для функции - возвращаемого значения.
Пример: Type F1 = procedure; F2 = function (X: Integer; var S: String): Boolean;
function F2(X: Integer; var S: String): Boolean; far; Begin
end;
procedure F(Func: F2); Begin
end;
|
||
|
Последнее изменение этой страницы: 2016-08-26; просмотров: 4471; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.008 с.) |