Основы программирования
Для решения многих задач требуется писать программы, в которых действия повторяются циклически, в зависимости от некоторых условий выполняются различные части программы. Для этого используются операторы циклов for и while. Цикл for предназначен для выполнения заданного числа повторяющихся действий, а цикл while - для действий, число повторений которых заранее не известно, но известно условие продолжения цикла.
Цикл for.
Простое использование цикла for осуществляется следующим образом:
for count=start:step:final
команды MatLab
end
Здесь count – переменная цикла, start – ее начальное значение, final – конечное значение, а step – шаг, на который увеличивается count при каждом следующем заходе в цикл. Цикл заканчивается как только значение count становится больше final. Переменная цикла может принимать не только целые, но и вещественные значения любого знака.
Пусть требуется вывести семейство кривых для , которое задано функцией, зависящей от параметра
. Используем цикл for. Наберём текст файл-процедуры, приведенный ниже в редакторе М-файлов, и запустим его на выполнение :
figure
x=[0:pi/30:2*pi];
for a=-0.1:0.02:0.1
y=exp(-a*x).*sin(x);
hold on
plot(x,y)
end
В результате выполнения появится графическое окно, изображенное на рис. 7, которое содержит требуемое семейство кривых:
Рис. 7 Семейство кривых
Цикл while
Цикл while работает, пока выполняется условие цикла:
while условие цикла
команды MatLab
end
Пусть требуется найти сумму ряда для заданного x (разложение в ряд sin x):
.
Будем накапливать сумму, пока слагаемые больше (по модулю).
В данном примере условием цикла является то, что текущее слагаемое больше
. Для записи условия следует использовать знак больше (>). Текст файл-функции mysin, вычисляющей сумму ряда приведен в листинге :
function S=mysin(x)
% Вычисление синуса разложением в ряд
% использование: y=mysin(x), -pi<x<pi
S=0;
k=0;
while abs(x.^(2*k+1)/factorial(2*k+1))>1.0e-10
S=S+(-1)^k*x.^(2*k+1)/factorial(2*k+1);
k=k+1;
end
У цикла while, в отличие от for, нет переменной цикла, поэтому пришлось до начала цикла k присвоить ноль, а внутри цикла увеличивать k на единицу.
Условие цикла while может содержать не только знак >. Для задания условия выполнения цикла допустимы также другие операции отношения приведенные в таблице:
Отношения
Обозначение | Операция отношения |
== | Равенство |
< | Меньше |
<= | Меньше или равно |
>= | Больше или равно |
~= | Не равно |
Задание более сложных условий производится с применением логических операторов.
Логические операторы и примеры их использования приведены в таблице:
Логические операторы
Оператор | Условие | Запись в MatLab | Эквивалентная запись |
Логическое «и» | x<3 и k=4 | and (x<3, k==4) | (x<3) & (k==4) |
Логическое «или» | x=1, 2 | or(x==1, x==2) | (x==1) | (x==2) |
Отрицание «не» | ![]() | not(a==1.9) | ~(a==1.9) |
Для задания порядка выполнения логических операций следует использовать круглые скобки, например записи (x==1) | (x==2) & (y==3) и (x==1) | ((x==2) & (y==3)) не эквивалентны в MatLab, в отличие от многих языков программирования.
Операторы ветвления
Условный оператор if и оператор переключения switch позволяют создать разветвляющийся алгоритм выполнения программ, в котором при выполнении определенных условий работает соответствующий блок операторов или команд MatLab.
Условный оператор if
Оператор if может применяться в простом виде, для выполнения блока команд при удовлетворении некоторого условия, или в конструкции if-elseif-else для написания разветвляющихся алгоритмов.
Применение if в самом простом случае выглядит так:
if условие
команды MatLab
end
Если условие верно, то выполняются команды MatLab, размещенные между if и end, а если условие неверно, то происходит переход к командам, расположенным после end. При записи условия используются ранее приведенные операции отношения.
Организация ветвления
В общем виде оператор ветвления представляет конструкцию if-еlsеif-else, работу которой хорошо поясняет пример файл-функции ifdem:
function ifdem(a)
% Пример использования структуры if—еlsеif—еlsе
if(a==0)
disp(‘a равно нулю’)
elseif a==1
disp(‘а равно единице’)
elseif a==2
disp(‘a равно двум’)
elseif a>=3
disp(‘a больше или равно трем’)
else
disp(‘a меньше трех, но не ноль, не единица и не двойка’)
end
В зависимости от выполнения того или иного условия работает соответствующая ветвь программы, если все условия неверны, то выполняются команды, размещенные после else. Вызовы функции ifdem с различными аргументами позволяют убедиться в вышесказанном:
>> ifdem(1)
a равно единице
>> ifdem(1.2)
a меньше трех, но не ноль, не единица и не двойка
>> ifdem(2)
a равно двум
>> ifdem(3)
a больше или равно трем
>> ifdem(-1)
a меньше трех, но не ноль, не единица и не двойка
В случае двух ветвей используется завершающее else, а elseif пропускается. Оператор if должен заканчиваться end.