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


 

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

83576. Військовополонені. Найманці 37.85 KB
  Полонені мають свого представника що спостерігає за умовами їх життя і підтримує звязок із адміністрацією табору. Полонені забезпечуються необхідним одягом харчуванням медичним обслуговуванням. Рядові полонені можуть притягуватися до роботи з урахуванням їх фізичного стану.
83577. Правове положення учасників збройних конфліктів 37.61 KB
  Під час збройних конфліктів населення що проживає на території держави поділяється на дві групи: таке що відноситься до збройних сил і таке що не відноситься до збройних сил цивільне населення. Комбатанти це особи що входять до складу збройних сил воюючих сторін та безпосередньо ведуть бойові дії проти ворога зі зброєю в руках. Некомбатанти це особи що входять до складу збройних сил та безпосередньо не беруть участь в бойових діях Це військові кореспонденти юристи духівництво інтенданти медичний персонал.
83578. Заборонені засоби і методи ведення війни 36.97 KB
  Засоби ведення військових дій це зброя і інша військова техніка що застосовується збройними силами воюючих для знищення живої сили і матеріальних засобів противника придушення його сил і здатності до опору. Методи ведення військових дій це порядок різні способи використання засобів ведення війни у вказаних цілях. право сторін що знаходяться в конфлікті обирати методи і засоби ведення війни не є необмеженим.
83579. Особливості ведення морської війни 38.73 KB
  Театром морської війни є внутрішні морські води територіальне море і відкрите море. До морської війни застосовні загальні правила сухопутної війни зокрема правила щодо заборони на певні засоби і методи. В правилах морської війни специфічними є правила для підводних човнів морської блокади бомбардувань і ін.
83580. Правова регламентація повітряної війни 34.96 KB
  Всі правила і норми що стосуються війни в цілому відносяться і до повітряної війни. Театром повітряної війни є повітряний простір над сухопутним і морським театрами воїни тобто над сухопутною територією воюючих над територіальним і відкритим морем. Повітряний простір над нейтральними державами театром війни бути не може.
83581. Захист цивільних об’єктів та культурних цінностей в період збройного конфлікту 37.56 KB
  Згідно з Додатковим протоколом І цивільні об’єкти не повинні бути об’єктом нападу або репресалій. До військових об\' єктів Протокол відносить такі об’єкти які через свій характер розташування призначення або використання роблять ефективний ї несок у військові дії і повне або часткове руйнування захоплення або нейтралізація яких при існуючих в даний момент обставинах надає явну військову перевагу ст. Отже об’єкти що не підпадають під вищенаведене визначення повинні розглядатися як цивільні і їх знищення є забороненим методом ведення...
83582. Закінчення війни і його міжнародно-правові наслідки 36.35 KB
  Розрізняють припинення стану війни і припинення військових дій. Припинення військових дій не завжди автоматично супроводжується припиненням стану війни. Перемир’я тимчасове припинення військових дій на умовах узгоджених воюючими сторонами. Подруге загальне перемир’я при певних обставинах наприклад якщо сторони в конфлікті формально не заявили про наявність стану війни між ними здатне не тільки призупинити військові дії але і привести до їх припинення.
83583. Поняття та принципи міжнародного повітряного права 32.8 KB
  Міжнародне повітряне право - це система міжнародно-правових норм, які регулюють відносини між суб\'єктами міжнародного права у зв\'язку з використанням повітряного простору та визначають його правовий режим.
83584. Міжнародна організація цивільної авіації 36.37 KB
  Міжнародна організація цивільної авіації ІКАО була створена відповідно до Конвенції про міжнародну цивільну авіацію 1944 р.: забезпечувати безпечний і впорядкований розвиток міжнародної цивільної авіації в усьому світі; заохочувати мистецтво конструювання й експлуатації повітряних суден у мирних цілях; заохочувати розвиток повітряних трас аеропортів і аеронавігаційних засобів для міжнародної цивільної авіації; задовольняти потреби народів світу у безпечному регулярному ефективному й економічному повітряному транспорті; запобігати...