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


 

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

30427. Форма правления и государственный режим в Италии. Формирование и взаимодействие высших государственных органов 15.72 KB
  Италия это классическая парламентарная республика. Правительство несет политическую ответственность перед обеими палатами парламента причем в условиях отсутствия в нем устойчивого партийного большинства обусловленного многопартийностью такая ответственность имеет вполне реальный действенный характер. Наглядным проявлением этого служат частые отставки правительства представляющие собой яркое доказательство существования в стране государственного режима парламентаризма. Двухпалатная структура итальянского Парламента...
30428. Политико-территориальное устройство Италии, организация региональной и местной власти 15.31 KB
  В обязательном порядке каждая область имеет областной совет джунту и ее председателя. Областной совет осуществляет законодательную и регламентарную власть принадлежащую области и другие функции; областная джунта исполнительный орган области; председатель джунты выполняет функции представительского и исполнительного характера. Провинции и коммуны в обязательном порядке должны иметь следующие органы: совет джунту как исполнительный орган власти главу исполнительной власти мэра в коммунах и председателя в провинциях. Таким образом в...
30429. Особенности конституционного законодательства и правоприменения в Китае 16.52 KB
  В Китайской Народной Республике провозглашенной 1 октября 1949 года конституции принимались 4 раза в 1954 г. Важнейшей особенностью конституции Китая является то что по форме и по содержанию это типичная социалистическая конституция. Особого внимания заслуживает Введение к конституции. Если преамбула короткая торжественная вводная часть конституции которая обосновывает ее принятие и декларирует основные принципы то введение это небольшой рассказ объемом в 12 книжные страницы об историческом пути...
30430. Организация центральной власти в Китае 16.31 KB
  Соответственно выборы в КНР многоступенчатые и непрямые : народ непосредственно избирает депутатов местных собраний народных представителей; местные собрания народных представителей избирают депутатов провинциальных собраний народных представителей собраний народных представителей автономных районов и городов центрального подчинения; провинциальные собрания народных представителей избирают депутатов Всекитайского собрания народных представителей ВСНП. Всекитайского собрания народных представителей ВСНП...
30431. Политико-территориальное устройство и организация местной власти в Китае 17.23 KB
  наименовании принимается вышестоящим собранием народных представителей совместно с соответствующими местными органами и утверждается Государственным советом КНР. Такое положение принимает собрание народных представителей соответствующего автономного образования. Но оно нуждается в утверждении постоянного комитета вышестоящего собрания народных представителей. Это собрания народных представителей их постоянные комитеты и народные правительства.
30432. Конституционное устройство острова Тайвань (Китай) 16.3 KB
  Оно не представляет собой постоянно действующий орган а избирается и собирается в каждом случае в течение шести месяцев после принятия Законодательной палатой решения о необходимости конституционной реформы или изменения территории страны либо в течение трех месяцев после решения Законодательной палаты о необходимости отрешить от должности Президента или Вицепрезидента. Досрочная вакансия должности Вицепрезидента замещается на оставшийся срок по предложению Президента решением Законодательной палаты. В случае одновременной вакантности...
30433. Форма правления и государственный режим в Польше, формирование и взаимодействие высших государственных органов 16.28 KB
  Сейм осуществляет контроль за деятельностью Совета Министров и объеме определенном предписаниями Конституции и законов. Совет Кабинета образуется Советом Министров заседающим под председательством Президента Республики. Совету Кабинета не принадлежат полномочия Совета Министров. Совет Министров проводит внутреннюю и внешнюю политику Польской Республики.
30434. Политико-территориальное устройство и организация местной власти в Польше 14.99 KB
  Основной единицей территориального самоуправления является община.Иные единицы регионального или местного и регионального самоуправления определяет закон. Община выполняет все задачи территориального самоуправления не закрепленные за иными единицами территориального самоуправления.Единицы территориального самоуправления являются юридическими лицами.
30435. Особенности конституционного права Бразилии 15.69 KB
  Конституция 1988 г. Композиционно Конституция 1988 г. Помимо упомянутых в общем ставших традиционными в акте встречаются совершенно исключительные права и свободы не получившие еще отражения в конституциях стран Европы. Конституция 1988 г.