Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Порядок определения и вызова функций





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

Синтаксис для определения собственных функций в MatLab имеет следующий вид:

function [ RetVal1, RetVal2,… ] = FunctionName(arg1, arg2,…)
<тело функции>

где RetVal1, RetVal2,... – набор возвращаемых значений функцией (результаты работы); arg1, arg2,... – набор входных аргументов; тело функции – набор операторов (программа), которые выполняются при вызове функции.

Рассмотрим пример реализации функции для вычисления евклидового расстояния:

function length = euqlid(x1, y1, x2, y2)
length = sqrt((x1-x2)^2+(y1-y2)^2);

Продемонстрируем возможность возвращения нескольких параметров на примере вычисления ширины и высоты прямоугольника, заданного координатами левого верхнего угла (x1,y1) и правого нижнего (x2,y2):

function [width, height] = RectangleHW(x1,y1,x2,y2)
width = abs(x1-x2);
height = abs(y1-y2);

Данную функцию можно записать еще и с таким набором параметров:

function [width, height] = RectangleHW(P1, P2)
width = abs(P1(1)-P1(2));
height = abs(P2(1)-P2(2));

где P1 и P2 – векторы (массивы) размером в 2 элемента и описывают точку в двумерном пространстве. В этом случае при вызове функции, значения координат точек можно передавать таким образом:

[W, H] = RectangleHW([0 0], [10 20]);

Если же программист сделает ошибку и при вызове функции передаст неверный размер вектора, например, так

[W, H] = RectangleHW(0, [10 20]);

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

function [width, height] = RectangleHW(P1, P2)
if length(P1) < 2 | length(P2) < 2
error('Bad 1st or 2nd parameter');
end

width = abs(P1(1)-P1(2));
height = abs(P2(1)-P2(2));

При выполнении данной функции с неверными параметрами, функция выдаст сообщение об ошибке в командное окно MatLab, но программа продолжит свою работу.

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

Для проверки числа переданных аргументов и числа ожидающих возвращаемых значений используются переменные nargin и nargout. Ниже приведен пример функции, использующей проверку корректности числа входных и выходных аргументов.

function [width, height] = RectangleHW(P1, P2)
if nargin ~= 2
error('Bad number of parameters');
end
if nargout ~= 2
error('Must be 2 return values');
end
if length(P1) < 2 | length(P2) < 2
error('Bad 1st or 2nd parameter');
end

width = abs(P1(1)-P1(2));
height = abs(P2(1)-P2(2));

При этом проверки корректности параметров функции будут срабатывать в следующих ситуациях:

[W, H] = RectangleHW([0 0]); % Bad number of parameters
[W, H, V] = RectangleHW([0 0], [10 20]); % Must be 2 return
% values
[W, H] = RectangleHW(0, [10 20]); % Bad 1st or 2nd parameter







Date: 2015-10-19; view: 291; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.01 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию