Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Параметры-Процедуры И Параметры-ФункцииСодержание книги
Поиск на нашем сайте Турбо Паскаль позволяет рассматривать функции и процедуры как объекты, которые можно присвоить переменным и которые могут выступать в качестве параметров. Как только процедурный тип определен, можно объявлять переменные этого типа. Такие переменные называются процедурными переменными. Они могут быть использованы в качестве формальных параметров при вызове процедур и функций. Подобно тому, как целочисленной переменной можно присвоить целочисленное значение, процедурной переменной можно присвоить процедурное значение. Как и во всех других операциях присваивания, переменная в левой части и переменная в правой части оператора присваивания должны быть совместимыми по присваиванию. для того чтобы считаться совместимыми по присваиванию, процедурные типы должны иметь одинаковое число параметров, параметры в соответствующих позициях должны быть тождественных типов; наконец, типы результатов функций должны быть идентичны. Процедуры и функции должны быть объявлены с директивой Far (использование дальнего типа вызова подпрограмм) и откомпилированы в состоянии {$F+}. А также они не должны быть: стандартной подпрограммой; вложенной подпрограммой; Inline процедурой или функцией (п/программы, записанные в машинных кодах); Interrupt процедурой или функцией (п/программы обработки прерываний). При использовании параметров-процедур или параметров-функций в списке перед соответствующими формальными параметрами указывается зарезервированное слово Procedure или Function. Например, Procedure Exampl(k,l: integer; Var M: real; Procedure Prob; Function Step: real); В списке формальных параметров процедуры Exampl: k, l – параметры-значения; M – параметр-переменная; Prob – параметр-процедура; Step – параметр-функция. При вызове подпрограммы на место формальных параметров-процедур и параметров-функций осуществляется подстановка соответствующих фактических процедур или функций. Параметры процедурного типа особенно полезны в ситуациях, когда над множеством процедур или функций выполняются общие действия. Например, посмотрите программу, которая с помощью одной и той же процедуры печати таблицы выводит на экран три таблицы арифметических функций (сложения, умножения и произведения суммы на разность чисел), каждая из которых выполняется отдельной функцией. Program ProcType; Type Func=Function(x, y: 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, y:integer): integer; Begin Funny:= (x+y)*(x-y); End; {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} {$F-}; Procedure Tab(w,h: integer; Operation: Func); Var x, y: integer; Begin for y:= 1 to w do begin for x:= 1 to w do write(Operation(x,y):5); writeln; end; End; {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} Begin Tab(10,10,Add); Tab(10,10,Mult); Tab(10,10,Funny); End. В данной программе процедура Tab представляет собой общее действие, выполняемое над параметрами-функциями Add, Mult, Funny. После запуска программы сначала вызывается процедура Tab для фактических параметров 10, 10 и Add, в результате чего формальным параметрам х и y присваиваются значения чисел 10 и 10, а формальному параметру Operation процедурного типа Func присваивается имя фактической функции Add. В результате этого на экран будет выведена таблица сложения от 1 до 10. Затем процедура Tab вызывается к исполнению для фактических параметров 10, 10 и параметра-функции Mult, в результате этого на экран будет выведена таблица умножения от 1 до 10. Аналогично вызов процедуры Tab с параметрами 10, 10 и Funny даст в результате на экране таблицу произведения суммы на разность чисел от1 до 10. Задание. Введите текст этой программы, запишите полученный файл на диск и откомпилируйте его. после того как компиляция выполнится успешно, исполните программу в пошаговом режиме с заходом в процедуры и пронаблюдайте за вызовом функций вычисления суммы, произведения двух чисел или произведения их суммы и разности. Обратите внимание на исполнение оператора write(Operation(x,y):5), как в зависимости от фактического значения параметра-функции Operation процедурного типа Func осуществляется вызов различных функций Add, Mult или Funny. Попробуйте удалить строку с директивой компилятору об использовании дальнего типа вызова или возьмите в фигурные скобки описание процедурного типа Func и пронаблюдайте за результатом. В случае появления ошибок нажатием клавиши F1 получите справку о причинах ошибки и рекомендацию на коррекцию.
|
||
|
Последнее изменение этой страницы: 2016-12-30; просмотров: 297; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.005 с.) |