Функции.

Мы уже использовали функции, такие как SIN(x), COS(x) и другие. Мы их использовали в арифметических выражениях. А теперь подумаем, что такое функция. На самом деле, все, что мы используем в программировании - это программы. И SIN(X) это тоже программа которая находится в каком-то участке памяти.

Когда мы обращаемся к функции – мы обращаемся к программе.

Если функция имеет параметры, то это означает, что мы передаем в функцию, значение переменной, которой пользуется эта функция, для вычисления ее значения. А затем, это значение передается в нашу программу.

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

Следует подробнее поговорить о параметрах. Их может не быть совсем, параметр может быть один или их может быть несколько. Параметры описываются также, как и другие переменные, т.е. имя параметра: тип параметра. Если есть несколько параметров одного типа, то их имена пишутся через запятую.

Простой пример функции, которая складывает два числа

PROGRAM ExFunc;
VAR X1,X2,S:real;
FUNCTION Sum (x,y:real) : real ; { заголовок функции }
BEGIN
Sum := x+y ; { используем параметры, полученные функцией }
END;
BEGIN

READLN(X1);
READLN(X2);
S := Sum(X1,X2) ; { здесь мы используем функцию }
WRITELN(S);
END.

Процедуры.

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

Ничего не напоминает? Это ведь почти что описание программы, в котором служебное слово PROGRAM заменено на служебное слово PROCEDURE, да еще добавлены параметры.


Пример процедуры.

PROGRAM ExProc;
PROCEDURE RL (X:integer) ; { заголовок процедуры RL}
BEGIN
WRITELN(‘вызов процедуры № ’,X);{ печатаем фиксированный текст и
параметр
}
END;
BEGIN

RL(1); { вызов процедуры RL с параметром 1}
RL(2); { вызов процедуры RL с параметром 2}
RL(3); { вызов процедуры RL с параметром 3}
END.

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

 

Формальные и фактические параметры.

А теперь поговорим, о том как производится вызов функции.

Y=Func(1); { вместо параметра подставляется число (константа)}
Y=Func(X1); { вместо параметра подставляется переменная }
Y=Func(X1+X2); { вместо параметра подставляется выражение }

Первые два случая понятны – вместо параметра подставляется число или численная величина переменной. А вот в третьем случае, мы подставляем выражение. Это означает, что выражение будет вычислено, а его результат подставлен вместо параметра. Это аналогично двум операторам.

Xtemp:= X1+X2;{ выражение вычисляется и его результат присваивается переменной Xtemp, которая нами не описывается }
Y=Func(Xtemp); { вместо параметра подставляется переменная Xtemp }

Когда параметр описывается в процедуре или функции он называется формальный. В нашем примере это переменная X.

Когда параметр используется в вызове процедуры или функции он называется фактический. В нашем примере это числа 1,2,3.

В тех примерах, которые приводились, переменные, которые подставлялись в вызов, не изменяли своего значения. То есть содержимое из переменной переписывалось в функцию, а сама переменная оставалась та – же самая.

Но иногда нам хотелось бы изменить переменную внутри самой процедуры. Такой вариант возможен. Для этого перед именем параметра в описании процедуры необходимо добавить служебное слово var. В этом случае, связь между переменной и параметром не разрывается. Такой вариант передачи параметра называется по ссылке.

 

Задачи.

 

 

 

ПРЕДЫДУЩАЯ ГЛАВА |  ГЛАВНАЯ СТРАНИЦА |  ТЕКУЩАЯ СТРАНИЦА

 

Hosted by uCoz