- •Лекция 2
- •2.1. Операции отношения и логические операции
- •2.1.1. Предварительные замечания.
- •2.1.2. Операции и функции отношения.
- •2.1.3. Логические операции (логические связки) и функции.
- •2.1.4. Приоритет операций.
- •2.2. Управляющие структуры
- •2.2.1. Организация простейшего ввода-вывода в диалоговом режиме.
- •2.2.2. Операторы ветвления (условные операторы).
- •Решение квадратного уравнения
2.2. Управляющие структуры
Как известно, в любом языке программирования, и MATLAB здесь не является исключением, имеются специальные управляющие конструкции, позволяющие задать последовательность выполнения команд в программах. Таким конструкции называют операторами управления и задают с помощью зарезервированных ключевых слов.
2.2.1. Организация простейшего ввода-вывода в диалоговом режиме.
Даже при разработке простейших программ возникает необходимость ввода исходных данных и вывода результатов. Для вывода значения выражения, в частном случае которого может быть имя любой переменной, достаточно не набрать после него символ «;» (точка с запятой), подавляющий выдачу результата. Для организации простейшего ввода исходных данных (т.е. числовой и символьной информации) при разработке программ, работающих в диалоговом режиме, следует использовать функцию input:
a=input('Комментарий'); |
где a – имя скалярной переменной, в которую будет помещено введенное с клавиатуры значение.
Поясним принцип работы данной конструкции. Итак, если в тексте программы встречается оператор input, то ее выполнение приостанавливается, система MATLAB выводит на экран Комментарий (текст подсказки) и переходит в режим ожидания ввода. После этого пользователь вводит с клавиатуры соответствующее значение и нажимает клавишу «Enter». Далее введенное значение возвращается в качестве результата функции input.
Для вывода результатов можно использовать функцию disp вида:
disp(b); |
где b – имя переменной или заключенный в кавычки текст.
Следует отметить, что функция disp отличается от автоматического вывода лишь тем, что не выводит имя отображаемого значения (т.е. имя переменной, которой присваивается результат вычислений, или имя системной переменной ans).
2.2.2. Операторы ветвления (условные операторы).
К операторам ветвления (условным операторам) относится условный оператор if, который позволяет создать такие алгоритмы, в которых при заданных условиях выполняются одни или другие блоки команд. Иными словами, в программном коде создаются точки ветвления, когда в зависимости от выполнения некоторого условия (или условий) выполняются разные фрагменты кода.
Рассмотрим условный оператор if, использующий ключевые слова if (если), else (иначе), elseif (иначе если), end (конец всей конструкции).
Наиболее простой синтаксис применения оператора if имеет вид:
if условие Инструкции end |
где условие – произвольное выражение (чаще всего включающее в себя операции сравнения и логические операции), истинность или ложность которого понимается как отличие от нуля или равенство нулю, причем если условие истинно, то выполняются Инструкции (команды) после этого условия до ключевого слова end, которое является идентификатором окончания условного оператора. После этого управление передается оператору, следующему после условного. Если условие истинным не является, то управление сразу передается оператору, следующему после условного. Иными словами, при ложном условии, Инструкции после условия и до ключевого слова end не выполняются.
Пример 1. Требуется найти максимальное из трех чисел x, y, z: u=max{x,y,z}. Напечатать значения x, y, z и u.
Для выполнения создается М-файл. Ниже приведен текст М-файла.
x=input('Введите значение x: '); y=input('Введите значение y: '); z=input('Введите значение z: '); if(x>=y&x>=z) u=x; end if(y>=x&y>=z) u=y; end if(z>=x&z>=y) u=z; end disp('x='); disp(x); disp('y='); disp(y); disp('z='); disp(z); disp('u=max(x,y,z)='); disp(u); |
Результаты расчета в командном окне (задано x=1, y=2 и z=3):
x=
1
y=
2
z=
3
u=max(x,y,z)=
3
Помимо рассмотренного варианта синтаксиса, в условном операторе могут использоваться ключевые слова else и elseif. В частности, если синтаксис условного оператора имеет вид
if условие Инструкции_1 else Инструкции_2 end |
то при истинном условии выполняются команды, расположенные между условием и ключевым словом else (т.е. блок Инструкции_1), а если условие ложно, то выполняются команды между ключевым словом else и инструкцией окончания условного оператора end.
Пример 2. Требуется найти максимальное и минимальное из двух чисел x, y: u=max{x,y}; v=min{x,y}. Напечатать значения x, y и u, v.
Ниже приведен текст М-файла.
x=input('Введите значение x: '); y=input('Введите значение y: '); if (x>y) u=x; v=y; else u=y; v=x; end disp('x='); disp(x); disp('y='); disp(y); disp('u=max(x,y)='); disp(u); disp('v=min(x,y)='); disp(v); |
Результаты расчета в командном окне (задано x=1 и y=2):
x=
1
y=
2
u=max(x,y)=
2
v=min(x,y)=
1
В более общем случае синтаксис оператора if следующий:
if условие_1 Инструкции_1 elseif условие_2 Инструкции_2 elseif условие_3 Инструкции_3 ... else Инструкции end |
Поясним, что в такой конструкции может быть много ветвей с ключевым словом elseif, при этом если справедливо условие условие_1, то выполняется набор команд Инструкции_1, если справедливо условие условие_2, то выполняется набор команд Инструкции_2 и т.д. Если же все эти условия оказываются ложными, то выполняются команды, расположенные после слова else. Отметим, что с одной стороны число ветвей elseif неограниченно, с другой – ветви elseif могут отсутствовать вовсе. Рассмотренный условный оператор завершается ключевым словом end.
Следует обратить внимание, что особенность приведенного оператора состоит в том, что каждое следующее условие проверяется только в том случае, если не выполнено ни одно из предыдущих условий.
Пример 3. Требуется составить программу анализа значения температры t и характеристики типа погоды: Морозная погода (если значение температуры неположительно); Холодная погода (если значение температуры положительно, но не превосходит 10); Прохладная погода (если значение температуры больше 10, но не больше 18); Теплая погода (если значение температуры больше 18, но не больше 25); Жаркая погода (если значение температуры больше 25). Ниже приведен текст М-файла.
t=input('Введите значение температуры t='); if(t<=0) disp('Морозная погода') elseif and(t>0, t<=10) disp('Холодная погода') elseif and(t>10, t<=18) disp('Прохладная погода') elseif and(t>18, t<=25) disp('Теплая погода') else disp('Жаркая погода') end |
Результаты расчета в командном окне (задано t=11):
Прохладная погода
Пример 2.4. Даны три числа: трех чисел x, y, z. Требуется найти сумму значений, по модулю меньших 5, остальные распечатать.
Ниже приведен текст М-файла.
x=input('Введите значение x: '); y=input('Введите значение y: '); z=input('Введите значение z: '); s=0; if(abs(x)<5) s=s+x; else disp('x='); disp(x); end if(abs(y)<5) s=s+y; else disp('y='); disp(y); end if(abs(z)<5) s=s+z; else disp('z='); disp(z); end disp('s='); disp(s); |
Результаты расчета в командном окне (задано x=-3, y=5 и z=6):
y=
5
z=
6
s=
-3
Пример. Найти корни квадратного уравнения
или
,
где
,
,
Возможны три случая.
Если
,
тогда имеется единственный корень
.Если
и
,
тогда нет действительных корней.Если и
,
тогда уравнение имеет два действительных
корня:
и
.
Пример текста программы для М-файла
t=input('введите t=');
a=t-1;b=2*t;c=t+3;
if a==0
x=-c/b; disp('уравнение имеет один корень:'); disp('x=');disp(x);
else
d=b^2-4*a*c;
if d<0
disp('уравнение не имеет действительных корней: d<0');
else
d=sqrt(d); x1=(-b+d)/(2*a); x2=(-b-d)/(2*a);
disp('x1='); disp(x1); disp('x2='); disp(x2);
end
end
Результат счета
при
введите t=1
уравнение имеет один корень:
x=
-2
Результат счета
при
введите t=-3
x1=
-3/2
x2=
0
Результат счета
при
введите t=2
уравнение не имеет действительных корней: d<0
