![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Параметры-переменные
Заголовок процедуры с описанными параметрами-переменными имеет такой вид: procedure MyProc (var Parl, Раг2: Typel; var РагЗ, Раг4: Туре2); Механизм работы параметров-переменных упрощенно можно представить такой схемой: В качестве фактического параметра-переменной могут использоваться переменные любых типов, включая файловые и опирающиеся на файловый, но зато использование констант не допускается. Параметры-процедуры и параметры-функции. В качестве расширения стандартного Паскаля, Турбо Паскаль позволяет рассматривать процедуры и функции как, объекты, которые можно присвоить переменным и которые могут выступать в качестве параметров; процедурные типы делают это возможным. Как только процедурный тип определен, можно объявлять переменные этого типа. Такие переменные называются процедурными переменными. Они могут быть использованы в качестве формальных параметров при вызове процедур и функций. Подобно тому, как целочисленной переменной можно присвоить целочисленное значение, процедурной переменной можно присвоить процедурное значение. Такое значение может, конечно, быть и другой процедурной переменной, но может также быть идентификатором процедуры или функции. В этой ситуации объявление процедуры или функции можно рассматривать как особый вид объявления константы, значением которой является процедура или функция. Как и во всех других операциях присваивания, переменная в левой части и переменная в правой части оператора присваивания должны быть совместимыми по присваиванию. Для того чтобы считаться совместимыми по присваиванию, процедурные типы должны иметь одинаковое число параметров, параметры в соответствующих позициях должны быть тождественных типов; наконец, типы результатов функций должны быть идентичны. Дополнительно к совместимости типов процедура или функция должны удовлетворять следующим требованиям, если они присваиваются процедурной переменной.
ü стандартной процедурой или функцией; ü вложенной процедурой или функцией; ü inline процедурой или функцией; ü interrupt процедурой или функцией. При использовании параметров-процедур или параметров-функций в списке перед соответствующими формальными параметрами указывается зарезервированное слово procedure или function, например: procedure Exampl (К, L: integer; var M: real; procedure Prob; function Step: real); В списке формальных параметров процедуры Exampl: К, L — параметры-значения; М — параметр-переменная; Prob — параметр-процедура; Step — параметр-функция, результатом выполнения которой будет значение вещественного типа. При вызове подпрограммы на место формальных параметров-процедур и параметров-функций осуществляется подстановка имен соответствующих фактических процедур или функций. При этом, если процедуры и функции, фигурирующие в качестве фактических параметров, имеют, в свою очередь, параметры, они могут быть только параметрами-значениями. Параметры процедурного типа особенно полезны в ситуациях, когда над множеством процедур или функций выполняются общие действия. Примером использования параметров-функций может служить программа, которая с помощью одной и той же процедуры печати таблицы выводит на экран три таблицы арифметических функций (сложения, умножения и произведения суммы на разность чисел), каждая из которых выполняется отдельной функцией, program Demo_Tabl; (Описание процедурного типа Func — целой функции двух аргументов целого типа} Type Func = function(X, X: integer): integer; {$F+} {Директива компилятору на использование дальнего типа вызова подпрограмм} {Описание функции сложения двух целых чисел} function Add(X, Y: integer): integer; Begin Add: =X +Y; end; {Описание функции умножения двух целых чисел) function Mult(X, Y: integer): integer; Begin Mult: =X*Y; end; {Описание функции умножения суммы на разность двух целых чисел) function Funny(X, У: integer): integer; Begin Funny: = (X+Y) * (X-Y), • end; {$F-} {Описание процедуры вывода на экран таблицы для двух чисел от 1 до 10, вид арифметической операции задается значением параметра-функции Operation) procedure Type_Tabl(W, H: integer; Operation': Func); Var X, Y: integer; Begin for Y: =l to H do Begin for X: =l to W do Write(Operation(X, Y): 5); Writeln; end; end; Begin {Начало главной программы) Туре_Таbl(10, 10, Add); {Вызов процедуры для печати таблицы сложения } Туре_Таbl(10, 10, Mult); {Вызов процедуры для печати таблицы умножения) Туре_Таbl(10, 10, Funny); {Вызов процедуры для печати таблицы произведений суммы чисел от 1 до 10 на их разность) End. Примечание. {SF+} — указание (директива) компилятору Турбо Паскаль на использование дальнего (for) типа вызова для корректной обработки вызова процедуры ТуреТаbl параметрами-функциями. В данной программе процедура ТуреТаbl представляет собой общее действие, выполняемое над параметрами-функциями Add, Mult, Funny. После запуска программы сначала вызывается процедура ТуреТаbl для фактических параметров 10, 10 и Add, в результате чего формальным параметрам X и Y присваиваются значения чисел 10 и 10, а формальному параметру Operation процедурного типа Func присваивается имя фактической функции Add. В результате этого на экран будет выведена таблица сложения от 1 до 10. Затем процедура ТуреТаbl вызывается к исполнению для фактических параметров 10, 10 и'параметра-функции Mult, в результате чего на экран будет выведена таблица умножения от 1 до 10. Аналогично вызов процедуры Туре_Таbl с параметрами 10, 10 и Funny даст в результате на экране таблицу произведения суммы на разность чисел от 1 до 10. ОБЛАСТЬ ДЕЙСТВИЯ (СФЕРА ВИДИМОСТИ)
|