MATLAB Language
условия
Поиск…
Синтаксис
- если выражение ... end
- если выражение ... else ... end
- если выражение ... elseif выражение ... end
- if выражение ... elseif expression ... else ... end
параметры
параметр | Описание |
---|---|
выражение | выражение, имеющее логический смысл |
Условие IF
Условия являются фундаментальной частью почти любой части кода. Они используются для выполнения некоторых частей кода только в некоторых ситуациях, но не для других. Давайте рассмотрим базовый синтаксис:
a = 5;
if a > 10 % this condition is not fulfilled, so nothing will happen
disp('OK')
end
if a < 10 % this condition is fulfilled, so the statements between the if...end are executed
disp('Not OK')
end
Выход:
Not OK
В этом примере мы видим, что if
состоит из двух частей: условия и кода для запуска, если условие истинно. Код - это все, написанное после условия и до его end
if
. Первое условие не было выполнено, и, следовательно, код внутри него не был выполнен.
Вот еще один пример:
a = 5;
if a ~= a+1 % "~=" means "not equal to"
disp('It''s true!') % we use two apostrophes to tell MATLAB that the ' is part of the string
end
Приведенное выше условие всегда будет истинным и будет отображать вывод. It's true!
,
Мы также можем написать:
a = 5;
if a == a+1 % "==" means "is equal to", it is NOT the assignment ("=") operator
disp('Equal')
end
На этот раз условие всегда ложно, поэтому мы никогда не получим результат Equal
.
Хотя условия, которые всегда бывают истинными или ложными, мало используются, потому что, если они всегда являются ложными, мы можем просто удалить эту часть кода, и если они всегда верны, то условие не требуется.
Условие IF-ELSE
В некоторых случаях мы хотим запустить альтернативный код, если условие ложно, для этого мы используем необязательную часть else
:
a = 20;
if a < 10
disp('a smaller than 10')
else
disp('a bigger than 10')
end
Здесь мы видим, что, поскольку a
не меньше 10
вторая часть кода, после выполнения else
и мы получаем выход a bigger than 10
. Теперь давайте посмотрим на другую попытку:
a = 10;
if a > 10
disp('a bigger than 10')
else
disp('a smaller than 10')
end
В этом примере показано, что мы не проверяли, действительно ли a
действительно меньше 10, и мы получаем неправильное сообщение, потому что условие проверяет только выражение как оно есть, а ЛЮБОЙ случай, который не равен true ( a = 10
), приведет к вторая часть должна быть выполнена.
Этот тип ошибок является очень распространенной ловушкой для начинающих и опытных программистов, особенно когда условия становятся сложными и их всегда следует помнить
Условие IF-ELSEIF
Используя else
мы можем выполнить некоторую задачу, когда условие не выполняется. Но что, если мы хотим проверить второе условие в случае, если первый был ложным. Мы можем сделать это так:
a = 9;
if mod(a,2)==0 % MOD - modulo operation, return the remainder after division of 'a' by 2
disp('a is even')
else
if mod(a,3)==0
disp('3 is a divisor of a')
end
end
OUTPUT:
3 is a divisor of a
Это также называется «вложенным условием» , но здесь мы имеем спецификацию, которая может улучшить читаемость кода и уменьшить вероятность ошибки anr - мы можем написать:
a = 9;
if mod(a,2)==0
disp('a is even')
elseif mod(a,3)==0
disp('3 is a divisor of a')
end
OUTPUT:
3 is a divisor of a
используя elseif
мы можем проверить другое выражение в одном блоке условий, и это не ограничивается одной попыткой:
a = 25;
if mod(a,2)==0
disp('a is even')
elseif mod(a,3)==0
disp('3 is a divisor of a')
elseif mod(a,5)==0
disp('5 is a divisor of a')
end
OUTPUT:
5 is a divisor of a
Следует проявлять elseif
осторожность при выборе использования elseif
в строке, так как только один из них будет выполнен из всего блока if
до end
. Итак, в нашем примере, если мы хотим отобразить все делители a
(из тех, которые мы явно проверяем), приведенный выше пример не будет хорош:
a = 15;
if mod(a,2)==0
disp('a is even')
elseif mod(a,3)==0
disp('3 is a divisor of a')
elseif mod(a,5)==0
disp('5 is a divisor of a')
end
OUTPUT:
3 is a divisor of a
не только 3, но и 5 - делитель 15, но часть, которая проверяет деление на 5, не достигается, если какое-либо из выражений выше оно было истинным.
Наконец, мы можем добавить else
один (и только один ) после всех условий elseif
для выполнения кода, когда ни одно из приведенных выше условий не выполняется:
a = 11;
if mod(a,2)==0
disp('a is even')
elseif mod(a,3)==0
disp('3 is a divisor of a')
elseif mod(a,5)==0
disp('5 is a divisor of a')
else
disp('2, 3 and 5 are not divisors of a')
end
OUTPUT:
2, 3 and 5 are not divisors of a
Вложенные условия
Когда мы используем условие в другом условии, мы говорим, что условия «вложены». Один частный случай вложенных условий задается опцией elseif
, но существует множество других способов использования вложенных условий. Давайте рассмотрим следующий код:
a = 2;
if mod(a,2)==0 % MOD - modulo operation, return the remainder after division of 'a' by 2
disp('a is even')
if mod(a,3)==0
disp('3 is a divisor of a')
if mod(a,5)==0
disp('5 is a divisor of a')
end
end
else
disp('a is odd')
end
При a=2
выход будет a is even
, что является правильным. При a=3
выход будет a is odd
, что тоже правильно, но пропускает проверку, если 3 является делителем a
. Это связано с тем, что условия вложены, так что только если первое true
, то мы переходим во внутреннее, а если a
нечетно, ни одно из внутренних условий не проверяется. Это несколько противоположно использованию elseif
где только если первое условие false
чем мы проверяем следующий. Как насчет проверки деления на 5? только число, которое имеет 6 как делитель (оба и 2), будет проверено для деления на 5, и мы можем проверить и увидеть, что при a=30
выход:
a is even
3 is a divisor of a
5 is a divisor of a
Мы также должны заметить две вещи:
- Положение
end
в нужном месте для каждого ,if
имеет решающее значение для набора условий для работы , как и следовало ожидать, так отступы больше , чем хорошая рекомендация здесь. - Позиция инструкции
else
также имеет решающее значение, поскольку нам нужно знать, в какомif
(и их может быть несколько) мы хотим что-то сделать, если выражение iffalse
.
Давайте посмотрим на другой пример:
for a = 5:10 % the FOR loop execute all the code within it for every a from 5 to 10
ch = num2str(a); % NUM2STR converts the integer a to a character
if mod(a,2)==0
if mod(a,3)==0
disp(['3 is a divisor of ' ch])
elseif mod(a,4)==0
disp(['4 is a divisor of ' ch])
else
disp([ch ' is even'])
end
elseif mod(a,3)==0
disp(['3 is a divisor of ' ch])
else
disp([ch ' is odd'])
end
end
И выход будет:
5 is odd
3 is a divisor of 6
7 is odd
4 is a divisor of 8
3 is a divisor of 9
10 is even
мы видим, что у нас есть только 6 строк для 6 чисел, потому что условия вложены таким образом, чтобы обеспечить только одну печать на номер, а также (хотя не видно непосредственно из вывода) никаких дополнительных проверок не выполняется, поэтому если число даже не имеет смысла проверять, является ли 4 одним из его делителей.