1.5.4. Основные операторы языка
Прежде всего, отметим, что для языка MATLAB различие между командами, выполняемыми в командном окне при вводе с клавиатуры, и программными операторами, выполняемыми из программы, является условным.
1. Оператор присваивания. Является простейшим оператором языка. Его смысл полностью эквивалентен аналогичным операторам таких языков, как Си и Паскаль. Об отличии мы уже говорили, рассматривая матричные операции: некоторые функции могут одновременно возвращать несколько значений, поэтому в правой части соответствующего оператора могут находиться несколько переменных, список которых помещается в этом случае в квадратные скобки, например: [V,D]=eig(A).
А в целом, оператор присваивания состоит из правой части, знака присваивания «=» и левой части, где должно быть выражение или оператор вызова функции.
В зависимости от типа выражения в правой части, операторы присваивания делятся на арифметические, строковые, отношений и логические.
Арифметические операторы формируются в соответствии с правилами и особенностями формирования арифметических выражений.
Строковые операторы бывают только двух типов: простое присваивание строковой константы или вызов функции, манипулирующей со строками, например:
>> s1='any';
>> s2=' string';
>> s=strcat(s1,s2)
s =
any string
Операторы отношений позволяют сравнивать между собой однотипные массивы. При этом возвращается массив того же типа, элементами которого служат нули или единицы в зависимости от результата сравнения соответствующих компонент, например
>> A=[1 2; 3 4]
A =
1 2
3 4
>> B=[1 0; 3 5]
B =
1 0
3 5
>> s=A<B
s =
0 0
0 1
Логические операторы. Применяются по обычным правилам. Однако могут применяться с использованием массивов, например:
>> v=[1 2 0 3 0];
>> u=[2 3 0 4 1];
>> n1=u|v
n1 =
1 1 0 1 1
>> n2=u&v
n2 =
1 1 0 1 0
2. Условный оператор if в общем случае записывается следующим образом:
If условие1
операторы1
elseif условие2
операторы2
elseif условие3
операторы3
…..
else
операторы4
end
Здесь первая совокупность операторов будет выполнена, если условие 1 истинное. Если оно ложно, то первая совокупность будет пропущена и осуществится проверка условия 2 альтернативной ветви: если оно будет истинным, то выполнится группа операторов 2 и условный оператор будет завершен. Если оно будет ложным, то проверяется условие 3 и т.д. Иными словами, в альтернативной ветви обязательно будет выполнен только один вариант, определяемый условиями elseif или else.
Заметим, что альтернативные ветви не являются обязательными частями оператора. В простейшем случае используется самый короткий его вариант без альтернативных частей:
If условие
операторы
end
3. Оператор цикла типа for … end используются для организации вычислений с заданным числом повторяющихся циклов. Конструкция такого оператора имеет вид:
for v=М
операторы
end
Параметр М – это чаще всего вектор. В большинстве случаев он представляется с использованием оператора «:» в виде s:d:e, где s – начальное значение управляющей переменной цикла (v), d – приращение этой переменной, e – конечное значение управляющей переменной. На каждом шаге цикла переменная v последовательно принимает значения, соответствующие компонентам вектора М. Цикл выполняется до тех пор, пока v<=d.
Возможен также вариант, когда М не вектор, а матрица. Тогда цикл будет работать иначе: на каждом шаге управляющая переменная будет вектором, последовательно совпадающим со столбцами матрицы М.
В этом случае в цикле будет столько шагов, сколько имеется столбцов в указанной матрице, например запуск программы
A=rand(3);
for x=A
disp(x);
end;
из файла mm.m приведет к следующему результату:
>> mm
0.4447
0.6154
0.7919
0.9218
0.7382
0.1763
0.4057
0.9355
0.9169
Если есть необходимость в досрочном прерывании выполнения цикла, используется оператор break.
4. Оператор цикла типа while выполняется до тех пор, пока выполняется условие, указанное в заголовке:
while условие
операторы
end
5. Оператор переключения типа switch. Используется для реализации множественного выбора. Конструкцию оператора полностью аналогична соответствующим операторам в других языках, например:
switch var
case {1, 2, 3}
disp(‘one’)
case {4, 5}
disp(‘two’)
otherwise
disp(‘error’)
end;