Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Нетипизированные




.....

.....

Begin

Var

Type

End

Begin

Else

Begin

Var

Type

Var

Begin

Begin

End

Begin

Var

Const

np = 20 {Количество вычислений функций}

x: real;

i: integer;

begin {PrintFunc}

for i:= 1 to np do

x:= i * (2 * pi / np);

GotoXY (XPos, WhereY);

WriteLn (x:5:3, F(x):18:5)

end {PrintFunc}

{----------}

Function Sin1(x: real): real; far;

sin1:= (sin(x) + 1) * exp(-x)

end;

{----------}

Function Cos1(x: real): real; far;

cos1:= (cos(x) + 1) * exp(-x)

end;

{----------}

begin {основная программа}

ClrScr; {Очищаем экран}

PrintFunc (1, sin1);

GotoXY (1,1); {Переводим курсор в левый верхний угол}

PrintFunc (40, cos1)

end.

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

pi: Proc1;

f1, f2: Func2;

ар: array [1..N] of Proc1;

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

Proc = Procedure (n: word; var a: byte);

ProcVar: Proc;

x, у: byte;

Procedure Proc1(x: word; var y: byte); far;

if x > 255 then

y:= x mod 255

у:= byte(x)

end;

begin {Главная программа}

ProcVar:= Proc1;

for x:= 150 to 180 do

ProcVar (x + 100, у);

Write (у:8)

end.

Разумеется, такого рода присваивания допустимы и для параметров-функций, например:

FuncType = Function (i: integer): integer;

VarFunc: FuncType;

i: integer;

Function MyFunc (count: integer): integer; far;

.....

end; {MyFunc}

begin {Основная программа}

i:= MyFunc(1); {Обычное использование результата функции}

VarFunc:= MyFunc; {Присваивание переменной процедурного типа

имени функции MyFunc}

end.

Отметим, что присваивание

VarFunc:= MyFunc(1);

будет недопустимым, так как слева и справа от знака присваивания используются несовместимые типы: слева -- процедурный тип, а справа -- INTEGER; имя функции со списком фактических параметров MyFunc(1) трактуется Турбо Паскалем как обращение к значению функции, в то время как имя функции без списка параметров рассматривается как имя функции.
В отличие от стандартного Паскаля, в Турбо Паскале разрешается использовать в передаваемой процедуре (функции) любые типы параметров: параметры-значения, параметры-переменные, параметры-константы (в стандартном Паскале только параметры-значения).

 




Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 245; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.