Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Процедурные типы. Параметры-функции и параметры-процедуры

Читайте также:
  1. Кратко охарактеризуем эти типы.
  2. На хорошей целинной почве урожай может лимитировать только климат, но не особенности происхождения или типы.
  3. ПРОЦЕДУРНЫЕ ТЕХНОЛОГИИ "ПАБЛИК РИЛЕЙШНЗ". МЕДИАЦИЯ
  4. Системы разграничения доступа в помещениях. Их типы.
  5. Современное понятие руководителя и его типы.
  6. СОЦИАЛЬНО-ИСТОРИЧЕСКИЕ ПСИХОТИПЫ.

Для объявления процедурного типа используется заголовок процедуры (функции), в котором опускается ее имя, например:

Type Prod = Procedure (a, b, c: Real; var d: Real);

Proc2 = Procedure (var a, b);

РгосЗ = Procedure;

Func1 = Function: String;

Func2 = Function (var s: String): Real;

Как видно из приведенных примеров, существует два процедурных типа: тип-процедура и тип-функция.

Пример 5.4 иллюстрирует механизм передачи процедур в качестве фактических параметров вызова. Программа выводит на экран таблицу двух функций:

sin1(х) = (sin(x) + 1) * ехр(-х)

cos1(x) = (cos(x) + 1) * exp(-x).

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

 

Пример 5.4

Uses CRT;

type

Func = Function (x: Real): Real;

{----------------}

Procedure PrintFunc (XPos: Byte; F:Func);

{Осуществляет печать функции F. (XPos - горизонтальная позиция начала вывода) }

const

np = 20; {Количество вычислений функций}

var

х: Real; i: Integer;

begin {PrintFunc}

for i:= 1 to np do

begin

x:= i * (2 * pi / np);

GotoXY (XPos, WhereY);

WriteLn (x:5:3, F(x):18:5)

end

end; {PrintFunc}

{-----------------}

Function Sin1(x: Real): Real;

begin

sinl:= (sin(x) + 1) * exp(-x)

end;

Function Cos1(x: Real): Real;

begin

cosl:= (cos(x) + 1) * exp(-x)

end;

{---------------}

begin {основная программа}

ClrScr; {Очищаем экран}

PrintFunc (1, sin1); GotoXY (1,1); {Переводим курсор в левый верхний угол}

PrintFunc (40, cos1)

end.

Стандартные процедуры (функции) Турбо Паскаля не могут передаваться рассмотренным способом.

В программе могут быть объявлены переменные процедурных типов, например, так:

var

p1: Proc1;

f1, f2: Func2;

р: array [1..N] of Proc1;

Переменным процедурных типов допускается присваивать в качестве значений имена соответствующих подпрограмм. После такого присваивания имя переменной становится синонимом имени подпрограммы, например:

Type Proc = Procedure (n: word; var a: Byte);

Var ProcVar: Proc; x, у: Byte;

Procedure Procl(x: word; var y: Byte); far;

begin

if x > 255 then у:= x mod 255

else у:= Byte(x)

end;

begin {Главная программа}

ProcVar:= Proc1;

for x:= 150 to 180 do

begin

ProcVar (x + 100, y);

Write (y:4)

end

end.

Разумеется, такого рода присваивания допустимы и для параметров-функций, например:

Type FuncType = Function (i: Integer): Integer;

Var VarFunc: FuncType;

i: Integer;

Function MyFunc (count: Integer): Integer; far;

begin

.......

end; {MyFunc}

begin {Основная программа}

.......

i:= MyFunc(1); {Обычное использование результата функции}

.......

VarFunc:= MyFunc;

{Присваивание переменной процедурного типа имени функции MyFunc}

.......

end.

 

Отметим, что присваивание VarFunc:= MyFunc(1);

будет недопустимым, так как слева и справа от знака присваивания используются несовместимые типы: слева - процедурный тип, а справа - INTEGER; имя функции со списком фактических параметров MyFunc(1) трактуется Турбо Паскалем как обращение к значению функции, в то время как имя функции без списка параметров рассматривается как имя функции.

В отличие от стандартного Паскаля, в Турбо Паскале разрешается использовать в передаваемой процедуре (функции) любые типы параметров: параметры-значения, параметры-переменные, параметры-константы (в стандартном Паскале только параметры-значения).


Дата добавления: 2015-07-26; просмотров: 63 | Нарушение авторских прав


Читайте в этой же книге: Общие сведения о подпрограммах | Заголовок | Параметры | Рекурсия и опережающее описание | Определить значения переменных X и Y, которые будут выданы на экран в результате |
<== предыдущая страница | следующая страница ==>
Параметры-массивы и параметры-строки| Нетипизированные параметры-переменные

mybiblioteka.su - 2015-2024 год. (0.007 сек.)