Фактические и формальные параметры функции
Лабораторная работа №3
Использование подпрограмм в системе MATLAB
Цель работы: Знакомство с организацией функций в MATLAB, особенностями их работы.
Согласно одному из принципов структурного программирования, повторяющиеся фрагменты программы, а также логически целостные ее фрагменты можно оформить в виде подпрограмм (процедур и функций). Подпрограммы представляют собой относительно самостоятельные фрагменты программы, для оформления и вызова которых используют специальные синтаксические средства. Подпрограмма может быть многократно вызвана из разных частей программы. В MATLAB подпрограммы реализованы в виде функций.
В отличие от программ-сценариев (скриптов) функция может иметь входные и выходные параметры, при вызове функция создает новую рабочую область. Напомним, что рабочей областью называют область памяти, в которой размещены переменные. Так как функция создает новую рабочую область, внутри функции не будут видны переменные, объявленные вне ее кода. Поэтому входные и выходные параметры используются для связи функции с внешним кодом.
Функции, так же как и скрипты, оформляются в отдельном m-файле. Файл, содержащий функцию и файл скрипта, вызывающего эту функцию, должны содержаться в одном каталоге.
В общем виде программа функции имеет следующую структуру:
function [y1,...,yN] = имя_функции(x1,...,xM)
оператор_1
оператор_2
…
оператор_n
end
Функция начинается с ключевого слова function, за которым следуют в квадратных скобках через запятую имена выходных переменных. Далее следует знак «=» и имя функции. Имя функции подчиняется тем же правилам, что и имена переменных. Имя функции обязательно должно совпадать с именем файла, в котором она определена. После имени функции в круглых скобках через запятую следуют имена входных параметров. Следующие строки содержат тело функции (любые допустимые выражения MATLAB). Конец функции определяет ключевое слово end, однако оно не является обязательным, и его можно опустить. Если функция возвращает только один параметр, то его не обязательно заключать в квадратные скобки, например:
function s = triaArea( a, b )
% вычисление площади прямоугольного треугольника
% a, b - катеты треугольника
s = a * b / 2;
end
Если функция не имеет возвращаемых параметров, то после ключевого слова function следует имя функции, например:
function hellowWorld
% пример функции без входных и выходных параметров
disp('Hello world!');
end
Для вызова функции применяется следующий синтаксис:
[k1, ..., kN] = имя_функции(z1,...,zM)
где k1, ..., kN – переменны, куда будут записаны выходные значения функции, а z1,...,zM – аргументы функции.
В случае, если функция возвращает только один параметр, квадратные скобки можно опустить, например:
Area = triaArea(1,2)
Фактические и формальные параметры функции
При написании и использовании функций различают фактические и формальные параметры функции:
· фактический параметр – аргумент, передаваемый в функцию при ее вызове;
· формальный параметр – аргумент, указываемый при определении функции.
Поясним различие между фактическими и формальными параметрами функции на примере:
Рассмотрим функцию, вычисляющую площадь и периметр параллелограмма. Функция содержится в файле ParArea.m:
function [s, p] = ParArea( a, b, alfa )
% Функция для вычисления площади и периметра параллелограмма по
% двум сторонам и углу между ними
% a, b, alfa - входные параметры (две стороны и угол), скаляры
% s, p - площадь и периметр треугольника соответственно, скаляры
% a, b, alfa, s, p являются формальными параметрами, то есть
% объявленные в определении функции.
% С входными параметрами можно работать, как с обычными переменными.
% Выходным параметрам необходимо присвоить какое-либо значение
% Площадь параллелограмма
s = a*b*sin(alfa);
% Периметр параллелограмма
p = 2*(a+b);
end
Пример использования данной функции:
>> a = 2;
>> b = 3;
>> [area, perimetr] = ParArea(a, b, pi/3)
area =
5.1962
perimetr =
При вызове функции ParArea параметры a, b, pi/3, area, perimeter являются фактическими. При вызове функции фактические параметры подставляются в формальные, поэтому их имена могут быть различными.
Для корректной работы функции при ее вызове имеет значение порядок следования переменных. Так, если в предыдущем примере поменять местами переменные perimeter и area, результат, который вернет функция, по смыслу будет неверным:
>> a = 2;
>> b = 3;
>> [perimetr, area] = ParArea(a, b, pi/3)
perimetr =
5.1962
area =
Рабочая область функции
В MATLAB рабочие области бывают двух типов:
· base workspace – базовая рабочая область;
· function workspace – рабочая область функции.
Как было отмечено ранее, при вызове функции создается новая рабочая область, которая существуют до конца работы функции. Все переменные, которые создаются в данной рабочей области, называются локальными. Они отличны от переменных других функций и переменных базовой рабочей области, даже если имеют одинаковые имена. Например, создадим следующую функцию:
function [] = demoLocaLVar()
% пример локальной переменной
x = 2;
end
И введем следующие команды в командное окно MATLAB:
>> x = 0
x =
>> demoLocalVar()
>> x
x =
Как видно из примера, даже не смотря на то, что в функции была создана переменная x и ей было присвоено значение 2, это никак не повлияло на переменную x, созданную в базовой рабочей области.
После завершения выполнения функции рабочая область функции и содержащиеся в ней переменные удаляются. Выполнение функции завершается по выполнению последнего оператора, либо по команде return.