Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Функции в языке Pascal




Процедуры без параметров в языке Pascal.

Параметры-процедуры и параметры-функции.

Параметры-константы.

 

Так как аргументы, передаваемые в процедуру или функцию, размещаются в стеке, то в случае передачи значением массива большого размера, может произойти переполнение стека. В языке Турбо Паскаль 7.0 введен описатель CONST, который может задаваться для формальных параметров подпрограмм. Аргумент, соответствующий такому параметру, передается по ссылке, подобно параметру с описателем Var, но в самой процедуре(функции) запрещается присваивать этому аргументу новое значение.

 

PROCEDURE <имя процедуры> (CONST <имя константы>: <тип>;...);

 

FUNCTION <имя функции> (CONST <имя константы>: <тип>;...): <тип результата>;

 

Параметр-константу нельзя передавать в качестве параметра в другую подпрограмму.

 

Для объявления процедурного типа используется заголовок подпрограммы, в котором опускается имя процедуры(функции).

 

Например:TYPE TPR1= PROCEDURE(X,Y: REAL; VAR Z: REAL);

TPR2= PROCEDURE;

TF1= FUNCTION: STRING;

TF2=FUNCTION (VAR S: STRING): REAL;

Ниже приведен пример использования функции FF в качестве параметра другой функции RR. USES CRT;

TYPE FUN=FUNCTION (X,Y: REAL): REAL;

VAR...

FUNCTION FF (X,Y: REAL): REAL; FAR;

...

BEGIN

...

END;

FUNCTION RR (X,Y: REAL; F: FUN): REAL; FAR;

...

BEGIN

...

END;

PROCEDURE TP (VAR Z: REAL; X,Y: REAL; CONST R: INTEGER);

...

BEGIN

...

END;

BEGIN

...

Z:=RR(3, 1, FF);

TP (Z,X,Y,R);

...

END.

В этом примере используются:

X,Y - параметры-значения;

Z- параметр-переменная;

F- параметр-функция;

R- параметр-константа.


 

 

В случае использования процедур и функций без параметров связь данных осуществляется через глобальные переменные.

 

Подпрограммы должны быть, по возможности, независимы от основной программы, поэтому все переменные, нужные только в пределах подпрограммы, должны описываться как локальные. Связь основной программы с процедурой или функцией должна осуществляться, как правило, через список параметров, что придает подпрограммам необходимую гибкость. Вместе с тем, слишком большое число параметров замедляет работу программы, поэтому переменные заведомо общие в основной программе и подпрограммах целесообразно использовать как глобальные.

 

Пример 1. Процедура без параметров, которая печатает строку из 60 звездочек. procedure pr;

var i: integer;

begin for i:=1 to 60 do write (‘ * ');

writeln;

end.


 

Функция - это подпрограмма, возвращающая одно значение в вызывающую программу. Функцию можно использовать в качестве операнда в выражениях. Поэтому, если в вызывающую программу необходимо возвратить одно значение, то рекомендуется оформить подпрограмму как функцию.

 

Описание функции

 

Любая используемая в программе функция должна быть предварительно описана в разделе описаний.

 

Функции в разделе описаний, так же как и процедуры, определяют после раздела описания переменных (после раздела Var) и до начала раздела операторов (до слова Begin).

 

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

 

Операторы функции внутри операторных скобок begin/end называются телом этой функции.

 

В теле функции обязательно должен быть оператор присвоения, где в левой части стоит имя функции, а в правой - её значение. Иначе, значение функции не будет определено.

 

Таким образом, общий вид функции в языке Паскаль такой:function <имя функции>[<список формальных параметров>]:<тип возвращаемого значения>;

<раздел описаний>

begin

<операторы>

<имя функции>:= <возвращаемое значение>;

еnd;

 

 

В языке Pascal ABC вместо имени функции для возврата значений в вызывающую программу можно использовать другую специальную переменную с именем Result.

 

Раздел описаний функции устроен так же, как раздел описаний основной программы. Здесь описываются так называемые локальные переменные и константы, типы, а также вложенные процедуры и функции. Все такие локальные объекты доступны лишь внутри данной функции и не видны извне.

Вызов функции

 

Вызовом функции является записанное в вызывающей программе имя функции со списком фактических параметров в круглых скобках. В отличие от вызова процедуры вызов функции возвращает одно значение (скалярную величину), следовательно, вызывающая программа должна с ним что-нибудь сделать (сохранить в переменной, вывести на экран и т.д.).

 

Вызов функции с присвоением возвращаемого значения некоторой переменной имеет следующий вид:<имя переменной>:= <имя функции> [(<список фактических параметров>)];

 

Фактические параметры - это значения, передаваемые в функцию при её вызове.

 

Пример 1. Оформить в виде функции алгоритм вычисления степени y = xn с натуральным показателем n.function degree(x,y:integer): longint;

var i:integer;

begin

st:=1;

For i:=1 to y do st:= st * x;

degree:= st;

end;

 

Функция имеет два параметра: первый параметр - основание степени, второй - показатель степени.

 

Вся программа для нашей задачи имеет следующий вид:program primer1;

var a, n: integer;

s:longint;

function degree(x,y:integer): longint;

var i:integer;

begin

st:=1;

For i:=1 to y do st:= st * x; degree:= st;end;

begin {main}

writeln('Введите два числа');

readln(a, n);

s:= degree(a,n); {Вызов функции}

writeln('Результат: ', s); {Вывод результата}

end.

 

 

Функция вызывается по имени в левой части оператора присваивания, вычиcленное значение присваивается переменной s. В нашем примере, фактические параметры а, n передают свои значения соответствующим формальным параметрам x, y.


 




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


Дата добавления: 2015-07-13; Просмотров: 487; Нарушение авторских прав?; Мы поможем в написании вашей работы!


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



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




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