<< ПредыдущаяОглавлениеСледующая >>


2.3. Оператор цикла while

Язык программирования MatLab имеет два оператора цикла: while и for. С их помощью, например, выполняется программирование   рекуррентных алгоритмов, подсчета суммы ряда, перебора элементов массива и многое другое.

В самом простом случае цикл в программе организуется с помощью оператора while, который имеет следующий синтаксис:

while <условие>
      <операторы>
end

Здесь <условие> означает условное выражение подобное тому, которое применяется в операторе if, и цикл while работает до тех пор, пока это условие истинно.

Следует обратить внимание на то, что если условие будет ложным до начала выполнения цикла, то операторы, входящие в цикл, не будут выполнены ни разу.

Приведем пример работы цикла while для подсчета суммы ряда :

function sum_i
S = 0;                  % начальное значение суммы
i=1;                    % счетчик суммы
while i <= 20           % цикл (работает пока i <= 20)
     S=S+i;             % подсчитывается сумма
     i=i+1;             % увеличивается счетчик на 1
end                     % конец цикла
disp(S);                % отображение суммы 210 на экране

Теперь усложним задачу и будем подсчитывать сумму ряда , пока . Здесь в операторе цикла получается два условия: либо счетчик по i доходит до 20, либо значение суммы S превысит 20. Данную логику можно реализовать с помощью составного условного выражения в операторе цикла while:

function sum_i
S = 0;                  % начальное значение суммы
i=1;                     % счетчик суммы
while i <= 20 & S <= 20 % цикл (работает пока i<=10 и S<=20
     S=S+i;             % подсчитывается сумма
     i=i+1;             % увеличивается счетчик на 1
end                     % конец цикла
disp(S);                % отображение суммы 21 на экране

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

Работу любого оператора цикла, в том числе и while, можно принудительно завершить с помощью оператора break. Например, предыдущую программу можно переписать следующим образом с использованием оператора break:

function sum_i
S = 0;                  % начальное значение суммы
i=1;                     % счетчик суммы
while i <= 20            % цикл (работает пока i<=10
     S=S+i;             % подсчитывается сумма
     i=i+1;             % увеличивается счетчик на 1
    if S > 20               % если S > 20,
         break;              % то цикл завершается
     end
end                     % конец цикла
disp(S);                % отображение суммы 21 на экране

В данном примере второе условие завершения цикла, когда S будет больше 20, записано в самом цикле и с помощью оператора break осуществляется выход из цикла на функцию disp(), стоящую сразу после цикла while.

Второй оператор управления выполнением цикла continue позволяет пропускать выполнение фрагмента программы, стоящий после него. Например, требуется подсчитать сумму элементов массива

a = [1 2 3 4 5 6 7 8 9];

исключая элемент с индексом 5. Такую программу можно записать следующим образом:

function sum_array
S = 0;                  % начальное значение суммы
a = [1 2 3 4 5 6 7 8 9]; % массив
i=0;                     % счетчик индексов массива
while i < length(a)     % цикл (работает пока i меньше
                        % длины массива а)
     i=i+1;             % увеличивается счетчик индексов на 1
    if i == 5               % если индекс равен 5
         continue;      % то его не подсчитываем
     end
     S=S+a(i);          % подсчитывается сумма элементов
end                     % конец цикла
disp(S);                % отображение суммы 40 на экране

Следует отметить, что в данной программе увеличение индекса массива i происходит до проверки условия. Это сделано для того, чтобы значение индекса увеличивалось на 1 на каждой итерации работы цикла. Если  увеличение счетчика i записать как в предыдущих примерах, т.е. после подсчета суммы, то из-за оператора continue его значение остановилось бы на 5 и цикл while работал бы «вечно».

 



<< ПредыдущаяОглавлениеСледующая >>