Читайте также: |
|
Имена подпрограмм могут выступать в роли аргументов для других подпрограмм.
Описание
В разделе type процедурный тип данных задается одним из следующих способов:
<имя_типа> = function[(<список_параметров>)]:<тип_результата>;или
<имя_типа> = procedure[(<список_параметров>)];Например:
type func = function(a,b:integer):integer;Аргументы
Аргументами, которые можно передать в параметр процедурного типа, могут быть только подпрограммы первого уровня вложенности, чье объявление полностью соответствует этому типу. Кроме того, объявления подпрограмм, которые могут стать аргументами, необходимо снабдить ключевым словом far, означающим, что программа будет использовать не только основной сегмент данных.
Например, для параметра, имеющего описанный выше тип func, аргументами могут послужить такие функции:
function min(a,b: integer): integer; far; begin if a>b then min:= b else min:= a end;и
function max(a,b: integer): integer; far; begin if a<b then max:= b else max:= a end;Вызов
Приведем пример подпрограммы, имеющей параметр процедурного типа:
procedure count(i,j:integer; f:func);var c: integer;begin... c:= f(i,j);...end;Теперь, если будет осуществлен вызов count(x,y,min), то в локальную переменную с запишется минимум из x и y. Если же вызвана будет count(x,y,max), то в локальную переменную с запишется максимум из x и y.
9. Лекция: Рекурсивные подпрограммы
Динамические структуры данных
Динамические структуры данных служат полезным дополнением к стандартным структурам, уже определенным в языке Pascal. Динамическими они называются потому, что их элементы создаются и уничтожаются "на ходу" - в процессе работы программы.
Стек
Стеком называется динамическая структура данных, у которой в каждый момент времени доступен только верхний (последний) элемент. Лучше всего понятие стека можно проиллюстрировать примером стопки книг: в стопку можно добавить еще одну книжку, положив ее сверху; из стопки можно взять, не разрушив ее, только верхнюю книгу. А для того, чтобы достать книжку из середины стопки, необходимо сначала убрать по одной все лежащие выше нее.
Последовательность обработки элементов стека хорошо отражают аббревиатуры LIFO (L ast I n F irst O ut - "последним вошел, первым вышел") и FILO (F irst I n L ast O ut - "первым вошел, последним вышел").
Реализовать стек можно любым удобным для программиста способом: например, массивом. Тогда началом стека (его "верхним" элементом) будет последний компонент массива, а освобождение стека будет происходить в направлении от конца массива к его началу. При такой реализации нет необходимости в постоянном перемещении компонент массива.
Впрочем, наиболее эффективной все равно будет реализация при помощи односвязного линейного списка, о котором пойдет речь в следующей лекции.
Дата добавления: 2015-07-07; просмотров: 95 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Совмещение в памяти | | | Операции |