|
|
Глава 3. Элементы программирования |
|
|
|
|
|
Оператор |
Функция |
Описание |
|
|
|
|
|
== |
eq() |
Равно. Выражение A==B истинно, если значение перемен- |
|
ной A равно значению переменной B. Тот же результат мо- |
|
||
|
|
жет быть получен с помощью команды eq(A,B) |
|
~= |
ne() |
Не равно. Выражение A~=B истинно, если значение пере- |
|
менной A не равно значению переменной B. Тот же резуль- |
|
||
|
|
тат может быть получен с помощью команды ne(A,B) |
|
Выражения с операторами сравнения возвращают логические значения – истинные выражения соответствуют единице, а ложные соответствуют нулю. Если операции сравнения применяются к массивам, то в этом случае речь идет о поэлементном сравнении элементов. Результатом является массив того же размера, что и исходные массивы, с нулями и единицами в зависимости от результата сравнения. Некоторые примеры использования операторов сравнения приведены в документе на рис. 3.29.
Сначала переменным A и B присваиваются соответственно значения 5 и 9. Затем командой C=A+2*(A<B) переменной C присваивается значение (результатом переменная C получает значение 7). Объяснение простое: поскольку выражение A<B является истинным, то значением этого выражения фактически есть 1. После умножения на 2 и прибавления текущего значения переменной A получаем 7.
Командами X=[1 2 5;5 4 -1] и Y=[-2 2 -7;3 3 -1] задаются числовые матрицы одинаковых размеров, после чего к этим матрицам применяются операции сравнения. В частности, использована команда X==Y, в результате выполнения которой создается матрица того же размера, что и сравниваемые матрицы X и Y. Матрица-результат состоит из нулей и единиц. Это результаты сравнения соответствующих элементов матриц X и Y (единица соответствует ситуации, когда соответствующие элементы, в соответствии с использованным оператором == матриц совпадают, а нули соответствуют ситуации, когда соответствующие элементы различны). Если в качестве одного из операндов в операции сравнения указать вместо матрицы скаляр (как, например, в команде A~=X), то скаляр сравнивается с каждым из элементов матрицы-операнда. Результатом является матрица из нулей и единиц того же размера, что и матрица-операнд. Принцип заполнения матрицы-результата такой: если результат сравнения скалярного операнда и элемента матрицы-операнда истинен, в соответствующем месте матрицы-результата стоит единица, в противном случае – нуль.
В Matlab есть ряд операторов (и дублирующих их функций) для работы с логическими выражениями. Они соответствуют базовым логическим операциям, таким как логическое и, логическое или, логическое отрицание и прочие. Основные логические операторы и функции Matlab представлены в табл. 3.2.
131
Самоучитель Matlab
Рис. 3.30. Логические операторы и функции
Рис. 3.29. Использование операторов сравнения
Табл. 3.2. Логические операторы и функции
Оператор |
Функция |
Описание |
|
|
|
& |
and() |
Логическое и. Результатом является единица, если оба опе- |
ранда (или аргумента) равны единице |
||
|
|
|
| |
or() |
Логическое или. Результатом является единица, если хотя |
бы один операнд (или аргумент) равен единице |
||
|
|
|
|
xor() |
Логическое исключающее или. Результатом является еди- |
|
ница, если один и только один операнд (или аргумент) равен |
|
|
|
единице |
|
|
|
132
|
|
Глава 3. Элементы программирования |
|
|
|
|
|
Оператор |
Функция |
Описание |
|
|
|
|
|
~ |
not() |
Логическое отрицание. Если операнд (аргумент) равен еди- |
|
нице, результатом будет ноль, и наоборот |
|
||
|
|
|
|
&& |
|
Логическое сокращенное и. Отличие состоит в способе вы- |
|
|
числения результата. Если первый операнд нулевой, второй |
|
|
|
|
операнд не вычисляется |
|
|
|
|
|
|| |
|
Логическое сокращенное или. Отличие состоит в способе |
|
|
вычисления результата. Если первый операнд единичный, |
|
|
|
|
второй операнд не вычисляется |
|
|
|
|
|
Для логических операторов и функций существуют побитовые аналоги – это функции, которые выполняют соответствующие операции на битовом уровне, то есть операнды представляются в виде последовательности битов, и для каждой пары битов выполняется нужная операция. Например, с помощью функции bitor() операция логического или применяется на побитовом уровне. Для вычисления исключающего побитового или используется функция bitxor(). Функцией bitand() вычисляется побитовое и. Полезными могут быть и другие побитовые функции. Например, у функции bitget() два числовых аргумента. В качестве результата возвращается значение бита в первом аргументе на позиции, определяемой вторым аргументом. У функции bitset() два или три аргумента. Значение функции вычисляется следующим образом. В числе, указанном первым аргументом функции на позиции, определяемой вторым аргументом, устанавливается значение бита, указанное третьим аргументом функции. Если третий аргумент не указан, по умолчанию он полагается равным единице. Некоторые примеры использования логических операторов и функций приведены в документе на рис. 3.30.
Логические операторы и функции широко используются в условных операторах и операторах цикла при создании сложных условий.
Обработка исключительных ситуаций
Если мы будем предполагать невозможное, тогда Вы ошиблись адресом.
К/ф "Семнадцать мгновений весны"
Хотя программные коды пишутся для того, чтобы они работали правильно и быстро, нередко при выполнении программного кода возникают ошибки. Речь идет в данном случае об ошибках времени выполнения, то есть тех ошибках, которые не связаны с некорректным синтаксисом, а, скорее, с алгоритмом выполнения кода. Обычно такого рода ошибка, если речь идет о какой-нибудь среде программирования, приводит к завершению работы программы. Приложение Matlab в этом отношении намного демократичнее. Многие стандартные ошибки, такие как деление на ноль, не являются фатальными, и код может вы-
133
Самоучитель Matlab
полняться и дальше. Как он будет выполняться – это уже другой вопрос. В любом случае, проблема остается – необходим механизм, позволяющий минимизировать влияние прогнозируемых или непрогнозируемых ошибок (которые обычно называют исключениями или исключительными ситуациями). Такой механизм в Matlab есть, и реализуется он с помощью оператора try-catch.
На заметку
Данная конструкция должна быть хорошо знакома программистам Java и C++.
Общий синтаксис оператора следующий:
try
основные_команды catch объект_ошибки команды_обработки end
Программный код, подозреваемый на предмет непредсказуемого поведения, указывается в блоке try. Начало блока маркируется соответствующим ключевым словом. Признаком окончания try-блока (и начала catch- блока) является ключевое слово catch. Если при выполнении кода между ключевыми словами try и catch никаких ошибок не возникает, команды catch-блока игнорируются и далее выполняются команды, размещенные после ключевого слова end, которым завершается catch-блок и, тем самым, весь оператор try-catch. В случае если при выполнении команд в try-блоке ошибка все-таки возникает, то выполнение команд try-блока прекращается, и начинают выполняться команды catch-блока (вплоть до ключевого слова end). После этого выполняются команды после оператора try-catch. Таким образом, оператор try-catch в некотором смысле представляет собой аналог условного оператора, только условием служит возникновение ошибки. Если ошибки нет, выполняется только блок try. Если ошибка возникает, выполняются команды catch-блока.
Непосредственно после ключевого слова catch может указываться переменная, обозначающая объект ошибки.
На заметку
Дело в том, что при возникновении ошибочной ситуации (или исключения) автоматически создается объект класса MException. Этот объект содержит описание возникшей ошибки, и заложенная в объекте информация может использоваться в программном коде при обработке ошибки. Именно для формального обозначения данного объекта вводится соответствующая объектная переменная, которая и указывается после ключевого слова catch. Однако если в коде обработки ошибочной ситуации обращение к объекту ошибки не планируется, после ключевого слова catch соответствующую переменную можно не указывать.
134
Глава 3. Элементы программирования
Ниже приведен пример кода, содержащего обработку исключительных ситуаций:
function ShowPlot(x,y) try plot(x,y,'LineWidth',2) grid on
catch
disp('Неверно указаны аргументы функции!') end
disp('Выполнение функции завершено!') end
У функции два аргумента (массивы), на основе которых строится график функции. Главная проблема состоит в том, что массивы могут иметь разные размеры. Поскольку в функции это условие (равенство размеров массивов) не проверяется, при вызове функции возможно возникновение ошибки. Как раз для такого случая предусмотрена обработка исключительных ситуаций. Команды по созданию графика функции заключены в блок try. Если ошибки при построении графика не возникает, то после создания графика выводится сообщение 'Выполнение функции завершено!' (аргумент функции disp()), после чего выполнение функции завершается. При возникновении ошибки выполняются команды catch-блока (команда disp('Неверно указаны аргументы функции!')), после чего выполняется команда disp('Выполнение функции завершено!'). Окно редактора m-файлов с кодом функции показано на рис. 3.31.
Рис. 3.31. Редактор m-файлов с кодом функции, содержащей обработку исключительных ситуаций
На рис. 3.32 показано командное окно приложения с командами, иллюстрирующими работу созданной функции.
135