28618

Процедурные типы

Доклад

Информатика, кибернетика и программирование

Для объявления процедурного типа используется заголовок процедуры функции в котором опускается ее имя например: 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; Как видно из приведенных примеров существует два процедурных типа: типпроцедура и типфункция. Вычисление и печать значений этих функций реализуются в процедуре PRINTFUNC которой в качестве параметров передаются номер позиции N на экране куда будет...

Русский

2013-08-20

15.45 KB

0 чел.

Процедурные типы - это нововведение фирмы Borland (в стандартном Паскале таких типов нет). Основное назначение этих типов - дать программисту гибкие средства передачи функций и процедур в качестве фактических параметров обращения к другим процедурам и функциям. 
Для объявления процедурного типа используется заголовок процедуры (функции), в котором опускается ее имя, например: 

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; 


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

sin1(х) = (sin(x) + 1) * ехр(-х) 
cos1(x) = (cos(x) + 1) * exp(-x). 


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

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 Sin1fx: Real): Real; far; 
begin 
sinl := (sin(x) + 1) * exp(-x) 
end; 
Function Cos1(x: Real): Real; far; 
begin 
cosl := (cos(x) + 1) * exp(-x) 
end; 
{---------------} 
begin {основная программа} 
ClrScr; {Очищаем экран} 
PrintFunc (1, sin1); GotoXY (1,1); {Переводим курсор в левый верхний угол} 
PrintFunc (40, cos1) 
end. 


Обратите внимание: для установления правильных связей функций SIN1 и COS1 с процедурой PRINTFUNC они должны компилироваться с расчетом на дальнюю модель памяти. Вот почему в программу вставлены стандартные директивы FAR сразу за заголовками функций. В таком режиме должны компилироваться любые процедуры (функции), которые будут передаваться в качестве фактических параметров вызова. 
Стандартные процедуры (функции) Турбо Паскаля не могут передаваться рассмотренным способом. 
В программе могут быть объявлены переменные процедурных типов, например, так: 

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


 

А также другие работы, которые могут Вас заинтересовать

47149. Международные системы стандартной нумерации изданий (ISBN, ISSN и пр.): сфера применения, состав, структура, расположение в издании и порядок присвоения. Штриховой код EAN 68 KB
  5301 Международная стандартная нумерация книг регламентирующих правила проставления международного стандартного номера книги Interntionl stndrd book number ISBN на книжные издания введенных в действие в январе 1988 г. ISBN позволяет издателям книготорговцам библиотекарям научным работникам признанным во всем мире способом беспрепятственно осуществлять распространение литературы в соответствии со спросом усовершенствовать поиск и заказ изданий весь цикл создания и доведения книги до потребителя. ISBN является обязательным...
47150. Организация как система 71.73 KB
  Xарактеристика организации как системы Организацией признается юридическое лицо которое имеет в собственности хозяйственном ведении или оперативном управлении обособленное имущество и отвечает по своим обязательствам этим имуществом может от своего имени приобретать и осуществлять имущественные и личные неимущественные права нести обязанности быть истцом и ответчиком в суде. Организации могут быть формальными и неформальными. Неформальные организации также представляют группы людей. Различают простые и сложные организации.
47151. Государство, как институт общественной системы. Типология государства, «провалы» государства 68.4 KB
  Типология государства провалы государства. Типология государства провалы государства. Признаки государства как социального института: наличие власти в виде системы государственных органов учреждении и организаций. В структуре государства действует целый ряд социальных институтов с которыми люди постоянно соприкасаются в своей жизни: институты народного представительства осуществляющие в стране публичную власть.
47152. Себестоимость автотранспортных услуг 69 KB
  Организация маркетингового исследования на АТП. Конкурирующие предприятия – это АТП занимающиеся перевозкой аналогичного вида груза на той же территории. Целевой сегмент рынка должен отвечать следующим условиям: а Быть достаточно емким б Предоставлять возможности дальнейшего роста в Интенсивность конкуренции на нем должна быть относительно невелика г Характеризоваться некоторыми неудовлетворенными потребностями которое данное АТП может удовлетворить 3. Особенности формирования доходов АТП Доходами организации признается увеличение...
47154. Право на достоверную информацию о состоянии окружающей среды 69.06 KB
  Как реакция на эту общественную потребность Законом Об охране окружающей природной среды гражданам было предоставлено право требовать от соответствующих органов предоставления своевременной полной и достоверной информации о состоянии окружающей среды и мерах по ее охране. Позже Конституция РФ также закрепила право каждого на достоверную информацию о состоянии окружающей среды. Какую информацию о состоянии окружающейсреды можно считать достоверной полной и своевременной Достоверной является неискаженная заведомо или по небрежности...
47156. Международные книжные ярмарки: названия, особенности, значение для мирового книгоиздания 69.92 KB
  Международные книжные ярмарки: названия особенности значение для мирового книгоиздания. Книжные ярмарки помогали издателям представить свой ассортимент а книготорговцам установить с ними отношения на будущее и купить партии тиражей на коммерческие с их точки зрения издания. На эту ярмарку собираются представители издательств всего региона – от Сахалина до Якутии представлены издания учебных центров и университетов издательства ДВО РАН и весь спектр производимой в регионе продукции. Аннотация как элемент аппарата издания.