Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.118.0.240] |
|
Сообщ.
#1
,
|
|
|
Процедурные и функциональные типы и переменные. Если в программе требуется несколько раз определить интеграл для различных функций, то в этом случае вычисление интеграла выполняют в виде подпрограммы, а при обращении к ней указывают имя конкретной функции f(x). Тогда имя функции играет роль параметра, следовательно, если имеются функциональные параметры, то должны быть также функциональные типы, переменные и константы. Описание процедурного (функционального) типа имеет вид заголовка процедуры (функции), но без имени процедуры (функции). Type ProcType1 = procedure; ProcType2 = procedure(a: real); ProcType3 = procedure(Var x: real; m,n: byte); FuncType1 = function: real; FuncType2 = function(x: real): real; Var P1,P2 : ProcType3; F1,F2 : FuncType2; Имена переменных в описании типа процедур и функций играет чисто иллюстративную роль. Процедурные и функциональные константы – это имена конкретных процедур и функций. Begin Proc1(y,m,k); P1:=Proc1; { процедурной переменной P1 присваивается процедурная константа Proc1 } P1(y,m,k) End; Обращение Proc1(y,m,k) тождественно P1(y,m,k). Процедурная или функциональная переменная это указатель, который определяет адрес точки входа конкретной процедуры или функции, следовательно, процедурные (функциональные) переменные занимают 4 байта памяти. Присваивание процедурной (функциональной) переменной конкретного значения определяется общими правилами, т.е. ей можно присвоить значение другой процедурной (функциональной) переменной или значение процедурной (функциональной) константы того же типа. Адреса в программе могут быть полными и короткими, в частности локальные переменные всегда имеют краткий адрес. Краткий адрес – это одно смещение (без сегмента) т.е. 2 байта. Использование кратких адресов существенно экономит память программы. Процедурные константы так же могут иметь полный или краткий адрес. Те процедуры, имена которых в интерфейсной части (Interface в модулях) – всегда имеют полный адрес, а части реализации (Implementation в модулях) могут иметь как полный, так и краткий адрес. Внутренние (вложенные) процедуры всегда имеют краткий адрес. Если процедурной (функциональной) переменной присваивается значение процедурной (функциональной) константы, то такая константа должна иметь полный адрес. При использовании конкретных процедур в качестве процедурных констант должны выполняться следующие требования: Стандартными считаются процедуры и функции, которые не требуют программной реализации (например, процедуры и функции модуля system). Некоторые стандартные процедуры могут иметь аргументы разного типа, а так же переменное количество аргументов. Например, sin(x) – вещественный или целый тип, write – произвольное количество аргументов разного типа. Процедурная (функциональная) оболочка обеспечивает единственность аргументов в процедуре (функции). Function SinReal(const x: real): real; Begin SinReal:=sin(const x) End; { SinReal } Procedure WriteLnStr(const s: string); Begin WriteLn(const s) End; { WriteLnStr } Пример численного интегрирования двух разных функций в одной процедуре смотрите в прикрепленном файле. Текст составлен по мотивам лекций по Turbo Pascal Назаренко В.И. Прикреплённый файлintegr.zip (1 Кбайт, скачиваний: 334) |