Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава 03-04.doc
Скачиваний:
2
Добавлен:
19.09.2019
Размер:
123.39 Кб
Скачать

4.2 Операторы цикла

Цикл for используется для повторения операторов в случае, когда число повторений заранее известно. Синтаксис цикла for имеет следующий вид:

for var = b1:b2:b3

Операторы (текст программы)

end

Здесь var – переменная (счетчик) цикла, которая при каждом повторении цикла изменяется от начального значения b1 до конечного значения b3 с шагом b2 (если параметр b2 не указан, по умолчанию его значение принимается равным 1). Переменная цикла может принимать не только целые, но и вещественные значения с любым знаком. Операторы разделяются запятой <,>, точкой с запятой <;> или нажатием клавиши <Enter> Набор операторов завершается служебным словом end. Цикл завершается, как только значение var превысит b3. Операторы между for и end воспринимаются системой как части одного сложного оператора. Поэтому нажатие клавиши <Enter> для перехода к следующей строке не приводит в данном случае к выполнению этих операторов. Выполнение операторов начинается только тогда, когда введена "закрывающая скобка" сложного оператора в виде служебного слова end.

Если несколько сложных операторов такого типа вложены один в другой, вычисления начинаются лишь тогда, когда записан конец (end) наиболее охватывающего (внешнего) сложного оператора.

Например, для поиска суммы элементов матрицы, расположенных ниже главной диагонали, следует использовать два цикла for, причем начальное значение счетчика внутреннего цикла зависит от текущего значения счетчика внешнего цикла.

function s=Sn(A)

[n m]=size(A);

s=0;

for j=1:m

for i=j+1:n

s=s+A(i,j);

end

end

В том случае, когда число повторений заранее неизвестно и определяется в ходе выполнения блока операторов, следует организовать цикл while. Цикл while работает, пока выполнено условие цикла.

Пример файл-функции polsum , которая находит сумму всех первых положительных элементов вектора:

function s=polsum(x)

s=0;

k=1;

while x(k)>0

s=s+x(k);

k=k+1;

end

Вызовем файл-функцию poslum из командной строки:

>> a=[1 -2 3];

>> S=polsum(a)

S =

1

Файл-функция poslum имеет один недостаток: если все элементы вектора – положительные числа, то k становится больше длины вектора x, что приводит к ошибке, например:

>> a=[1 2 3];

>> S=polsum(a)

??? Index exceeds matrix dimensions.

Кроме проверки значения x(k), следует позаботиться о том, чтобы значение k не превосходило длины вектора x. Вход в цикл должен осуществляться только при одновременном выполнении условий k<= length(x) и x(k)>0, т. е. необходимо применить логический оператор "И", обозначаемый в MATLAB символом &. Заменим в файл-функции poslum условие цикла while x(k)>0 на составное while k<=length(x)&x(k)>0. Если первое из условий не выполняется, то второе условие проверяться не будет, именно поэтому выбран такой порядок операндов. Теперь файл-функция polsum будет работать верно для любых векторов:

>> a=[1 2 3];

>> S=polsum(a)

S =

6

Справка – doc lang.

4.3 Операторы ветвления

Ветвление в ходе работы программы осуществляется при помощи конструкции if-elseif-else. Самый простой вариант ее использования (без elseif и else) реализован в файл-функции possum , которая предназначена для нахождения суммы всех элементов вектора, больших 2.

function s=possum2(x)

s=0;

for k=1:length(x)

if x(k)>2

s=s+x(k);

end

end

Если ход программы должен изменяться в зависимости от нескольких условий, то следует использовать полную конструкцию if-elseif-else. Каждая из ветвей elseif в этом случае должна содержать условие выполнения блока операторов, размещенных после нее. Важно понимать, что условия проверяются подряд, первое выполненное условие приводит к работе соответствующего блока, выходу из конструкции if-elseif-else и переходу к оператору, следующему за end. У последней ветви else не должно быть никакого условия. Операторы, находящиеся между else и end, работают в том случае, если все условия оказались невыполненными.

Предположим, что требуется написать файл-функцию для вычисления кусочно-заданной функции:

f(x) =

Она имеем вид

function f=pwf(x)

if x<-1

f=x^(1/3);

elseif x<=3

f=x;

else

f=2-x;

end

Первое условие x<1 проверяется в ветви if. Отметим, что условие –1≤ x не требуется включать в следующую ветвь elseif , поскольку в эту ветвь программа заходит, если предыдущее условие (x<1) не выполнено. Условие x>3 также проверять не надо. Если не выполнены два предыдущих условия x<1 и x≤ 3, то x будет больше трех.

Справка – doc lang.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]