Для того щоб мати можливість реалізувати логіку в програмі використовуються умовні оператори. Умоглядно ці оператори можна представити у вигляді вузлових пунктів, досягаючи яких програма робить вибір за яким з можливих напрямків рухатися далі. Наприклад, потрібно визначити, чи містить деяка змінна arg позитивне або негативне число і вивести відповідне повідомлення на екран. Для цього можна скористатися оператором if (якщо), який і виконує подібні перевірки.
У найпростішому випадку синтаксис даного оператора if має вигляд:
if <выражение>
<операторы>
end
Якщо значення параметра «вираз» відповідає значенню «істинно», то виконується оператор, інакше він пропускається програмою. Слід зазначити, що «вираз» є умовним виразом, в якому виконується перевірка деякого умови. У табл. 2.1 представлені варіанти простих логічних виразів оператора if.
Таблиця 2.1. Прості логічні вирази
Істинно, якщо змінна a менше змінної b і помилково в іншому випадку.
Істинно, якщо змінна a більше змінної b і помилково в іншому випадку.
Істинно, якщо змінна a дорівнює змінної b і помилково в іншому випадку.
Істинно, якщо змінна a менше або дорівнює змінної b і помилково в іншому випадку.
Істинно, якщо змінна a більше або дорівнює змінної b і помилково в іншому випадку.
Істинно, якщо змінна a не дорівнює змінної b і помилково в іншому випадку.
Нижче представлений приклад реалізації функції sign (), яка повертає +1, якщо число більше нуля, -1 - якщо число менше нуля і 0, якщо число дорівнює нулю:
function my_sign
x = 5;
if x> 0
disp (1);
end
if x <0
disp (-1);
end
if x == 0
disp (0);
end
Аналіз наведеного прикладу показує, що всі ці три умови є взаємовиключними, тобто при спрацьовуванні одного з них немає необхідності перевіряти інші. Реалізація саме такої логіки дозволить збільшити швидкість виконання програми. Цього можна домогтися шляхом використання конструкції
if <выражение>
<операторы1> % Виконуються, якщо істинно умова
else
<операторы2> % Виконуються, якщо умова помилкова
end
Тоді наведений вище приклад можна записати в такий спосіб:
function my_sign
x = 5;
if x> 0
disp (1);
else
if x <0
disp (-1);
else
disp (0);
end
end
У даній програмі спочатку виконується перевірка на позитивність змінної x, і якщо це так, то на екран виводиться значення 1, а всі інші умови ігноруються. Якщо ж перша умова виявилося неправдивим, то виконання програми переходить по else (інакше) на другу умову, де виконується перевірка змінної x на негативність, і в разі істинності умови, на екран виводиться значення -1. Якщо обидві умови виявилися помилковими, то виводиться значення 0.
Наведений вище приклад можна записати в більш простій формі, використовуючи ще одну конструкцію оператора if мови MatLab:
if <выражение1>
<операторы1> % Виконуються, якщо істинно вираження1
elseif <выражение2>
<операторы2> % Виконуються, якщо істинно вираженіе2
.
elseif <выражениеN>
<операторыN> % Виконуються, якщо істинно вираженіеN
end
і записується в такий спосіб:
function my_sign
x = 5;
if x> 0
disp (1); % Виконується, якщо x> 0
elseif x <0
disp (-1); % Виконується, якщо x <0
else
disp (0); % Виконується, якщо x = 0
end
За допомогою умовного оператора if можна виконувати перевірку складніших (складових) умов. Наприклад, необхідно визначити: чи потрапляє змінна x в діапазон значень від 0 до 2? Це можна реалізувати одночасною перевіркою відразу двох умов: x> = 0 і x <=2. Если эти оба условия истинны, то x попадает в диапазон от 0 до 2.
Для реалізації складових умов в MatLab використовуються логічні оператори:
- логічне І
| - логічне АБО
Розглянемо приклад використання складових умов. Нехай потрібно перевірити потрапляння змінної x в діапазон від 0 до 2. Програма запишеться наступним чином:
function my_if
x = 1;
if x> = 0 x <= 2
disp ( 'x належить діапазону від 0 до 2');
else
disp ( 'x не належить діапазону від 0 до 2');
end
У другому прикладі виконаємо перевірку на не приналежність змінної x діапазону від 0 до 2. Це досягається спрацьовуванням одного з двох умов: x <0 или x> 2:
function my_if
x = 1;
if x <0 | x> 2
disp ( 'x не належить діапазону від 0 до 2');
else
disp ( 'x належить діапазону від 0 до 2');
end
Використовуючи логічні оператори І, АБО, НЕ, можна створювати різноманітні складові умови. Наприклад, можна зробити перевірку, що змінна x потрапляє в діапазон від -5 до 5, але не належить діапазону від 0 до 1. Очевидно, це можна реалізувати наступним чином:
function my_if
x = 1;
if (x> = -5 x <= 5) & (x <0 | x> 1)
disp ( 'x належить [-5, 5], але не входить в [0, 1]');
else
disp ( 'x або не входить в [-5, 5] або в [0, 1]');
end
Зверніть увагу, що при складному складеному умови були використані круглі дужки. Справа в тому, що пріоритет операції І вище пріоритету операції АБО, і якби не було круглих дужок, то умова виглядало б так: (x> = -5 і x <= 5 и x <0) или x> 1. Очевидно, що така перевірка давала б інший результат від очікуваного.
Круглі дужки в програмуванні використовуються для зміни пріоритетів виконання операторів. Подібно арифметичним операторам, логічні також можуть бути змінені за бажанням програміста. Завдяки використанню круглих дужок, спочатку виконується перевірка всередині них, а, потім, за їх межами. Саме тому в наведеному вище прикладі вони необхідні для досягнення необхідного результату.
Пріоритет логічних операцій наступний:
) - найвищий пріоритет;
І () - середній пріоритет;
АБО (|) - найнижчий пріоритет.