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

Лабораторная работа №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.

Наши рекомендации