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


 

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

80643. Характеристика промышленного маркетинга в рыночной экономике 40 KB
  Характеристика промышленного маркетинга в рыночной экономике Особенности организации современного производства товаров и услуг. Логика маркетинга ориентированного на продукт нельзя продать то чего у вас пока ещё нет. Риск существует и в информационную эру но он с лихвой оправдывается при использовании интегрированного маркетинга.
80644. ВНЕШНЯЯ ТОРГОВЛЯ РОССИИ И ЕЕ РЕГУЛИРОВАНИЕ 98 KB
  Структура внешней торговли представлена следующими видами: экспорт; импорт; транзитная торговля: покупка за рубежом с одновременной продажей в третью страну; особые формы: реэкспорт или реимпорт товаров прошедших облагораживание; производство по лицензии; кооперация; компенсационные сделки. Специфика товарной структуры экспорта России ее сырьевая направленность: доля топлива энергетических товаров в 1996 г. Импорт вид предпринимательской деятельности российских резидентов связанный...
80645. МИРОВОЙ РЫНОК УСЛУГ 141 KB
  УСЛОВИЯ ФОРМИРОВАНИЯ МИРОВОГО РЫНКА УСЛУГ Предметом обмена на мировом рынке услуг являются услуги выступающие как результаты важнейших сфер человеческой деятельности: науки техники производства и управления. Основа рынка сфера услуг предоставление которых является наиболее динамичной статьей внешней торговли. По данным МВФ стоимость услуг в 1994 г.
80646. ВЫВОЗ КАПИТАЛА КАК ФОРМА МЕЖДУНАРОДНЫХ ЭКОНОМИЧЕСКИХ ОТНОШЕНИЙ 52 KB
  СУЩНОСТЬ ВЫВОЗА КАПИТАЛА СОВРЕМЕННЫЕ ТЕНДЕНЦИИ Вывоз капитала это помещение капитала за границей с целью систематического присвоения прибавочной стоимости созданной трудящимися страны импортирующей иностранный капитал. Вывоз капитала наиболее развитая усовершенствованная форма международной эксплуатации. При внешней торговле происходит однократная реализация прибавочной стоимости а при вывозе капитала прибавочная стоимость присваивается непрерывно до тех пор пока помещенный за границей капитал находится в собственности иностранной...
80647. ИНОСТРАННЫЕ ИНВЕСТИЦИИ В РОССИИ 146 KB
  Свободные экономические зоны СЭЗ как форма международных экономических отношений получили широкое распространение и существенно изменили свое содержание от простых организационно-функциональных форм связанных с торговлей товарами к более сложным ориентированным на производство массовой потребительской продукции разработку и производство новых товаров предоставление различного рода услуг и т. В 80е годы в ряде регионов промышленно развитых стран появились специальные экономические зоны: технопарки НТ...
80648. ИНТЕГРАЦИОННЫЕ ПРОЦЕССЫ В МИРОВОЙ ЭКОНОМИКЕ 77.5 KB
  Экономическая интеграция определяется следующими функциями: интеграция производства и создание международных монополий нового типа к началу 90х годов на ТНК приходилось около 50 промышленного производства более 90 прямых частных вложений за рубежом; глубокие сдвиги в структуре международного разделения труда; НТР обусловившая необходимость международного обмена результатами достижений науки и техники; открытость национальных экономик и свобода торговли. Выделяют условно пять основных видов интеграционных объединений различающихся...
80649. МЕЖДУНАРОДНЫЕ ЭКОНОМИЧЕСКИЕ ОРГАНИЗАЦИИ 78.5 KB
  Приоритет в МЭО сохраняется за внешнеторговыми отношениями которые раньше строились на межстрановой узкорегиональной основе в основе которых строились принцип свободной внешней торговли и протекционизм. Глобализация МЭО обуславливает появление межрегиональных международных организаций: ОПЕК организация стран экспортеров нефти основанная в 1960 г. состоящая из 13 стран трех континентов; ОЭСР организация экономического сотрудничества и развития основанная в 1961 г. и состоящая из 24 стран четырех континентов.
80650. ГЛОБАЛЬНЫЕ ПРОБЛЕМЫ И МЕЖДУНАРОДНЫЕ ЭКОНОМИЧЕСКИЕ ОТНОШЕНИЯ 60 KB
  Глобальные проблемы носят универсальный характер так как они касаются всех стран независимо от их общественно-политического строя и не могут быть решены одной или группой государств. НИОКР направлено на военные цели; обеспечение экономической стабильности для государств путем перестройки и повышения эффективности международных экономических отношений снижение инфляции и безработицы стабильный товарообмен более открытый доступ на мировые рынки эффективные меры для стран строящих...