Функции.
Мы уже использовали функции, такие как SIN(x), COS(x) и другие. Мы их использовали в арифметических выражениях. А теперь подумаем, что такое функция. На самом деле, все, что мы используем в программировании - это программы. И SIN(X) это тоже программа которая находится в каком-то участке памяти.
Когда мы обращаемся к функции – мы обращаемся к программе.
Если функция имеет параметры, то это означает, что мы передаем в функцию, значение переменной, которой пользуется эта функция, для вычисления ее значения. А затем, это значение передается в нашу программу.
В Паскале есть возможность создавать свои функции. Для этого ее необходимо сначала описать ее, а затем использовать в своей программе.
Следует подробнее поговорить о параметрах. Их может не быть совсем, параметр может быть один или их может быть несколько. Параметры описываются также, как и другие переменные, т.е. имя параметра: тип параметра. Если есть несколько параметров одного типа, то их имена пишутся через запятую.
Простой пример функции, которая складывает два числа
PROGRAM ExFunc; READLN(X1); |
Процедуры.
Функция всегда возвращает нам результат. Но есть случаи, когда нам надо получить не один результат, а несколько. Или, наоборот, надо произвести какие-то действия, а результат возвращать не надо. В этом случае мы используем процедуру. Процедура описывается так же, как и функция. И также используется с помощью вызова по имени.
Ничего не напоминает? Это ведь почти что описание программы, в котором служебное слово
PROGRAM заменено на служебное слово PROCEDURE, да еще добавлены параметры.
Пример процедуры.
PROGRAM ExProc; RL(1); { вызов процедуры RL с параметром 1} |
В этом примере продемонстрирована основная идея использования процедуры. Мы один раз описываем программный код, который выполняется при вызове процедуры, а, затем, многократно его вызываем в основной программе. В реальных программах код внутри процедуры будет
, конечно – же, гораздо больше. Внутри процедур и функций можно производить обращение к другим процедурам и функциям.
Формальные и фактические параметры.
А теперь поговорим, о том как производится вызов функции.
Y=Func(1); { вместо параметра подставляется число (константа)} |
Первые два случая понятны – вместо параметра подставляется число или численная величина переменной. А вот в третьем случае, мы подставляем выражение. Это означает, что выражение будет вычислено, а его результат подставлен вместо параметра. Это аналогично двум операторам.
Xtemp:= X1+X2;{ выражение вычисляется и его результат присваивается переменной Xtemp, которая нами не описывается } |
Когда параметр описывается в процедуре или функции он называется формальный. В нашем примере это переменная
X.Когда параметр используется в вызове процедуры или функции он называется фактический. В нашем примере это числа 1,2,3.
В тех примерах, которые приводились, переменные, которые подставлялись в вызов, не изменяли своего значения. То есть содержимое из переменной переписывалось в функцию, а сама переменная оставалась та – же самая.
Но иногда нам хотелось бы изменить переменную внутри самой процедуры. Такой вариант возможен. Для этого перед именем параметра в описании процедуры необходимо добавить служебное слово
var. В этом случае, связь между переменной и параметром не разрывается. Такой вариант передачи параметра называется по ссылке.
Задачи.