Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MLab.doc
Скачиваний:
5
Добавлен:
17.11.2018
Размер:
818.69 Кб
Скачать

Операторы цикла и условные операторы.

Язык ML имеет специальные управляющие конструкции, которые позволяют задавать последовательность выполнения команд в программах. Это операторы управления: операторы циклов FOR и WHILE, оператор условного перехода IF и оператор переключения (выбора) SWITCHCASE. Синтаксис и выполняемые действия этих операторов аналогичны соответствующим операторам известных языков программирования. Область действия каждой конструкции ограничивается, словом end. MATLAB допускает вложенность циклов, а также возможность досрочного выхода из циклов, с помощью команды BREAK.

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

  1. Оператор цикла с параметром:

for <параметр цикла>=<нач. знач. пар. ц.>:<шаг>:<кон. знач.пар.ц.>

<операторы>

end

Если шаг = 1, то его можно не указывать. Параметры цикла могут быть целого и вещественного типа.

Везде, где возможно в ML следует использовать не циклы, а векторные и матричные операции (т.к. это быстрее).

Пусть требуется составить вектор из 5 нечетных чисел натурального ряда.

Для решения этой задачи можно:

  • использовать оператор цикла

>> for i=1:5

x(i)=2*i-1

end

x =

1

x =

1 3

x =

1 3 5

x =

1 3 5 7

x =

1 3 5 7 9

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

  • сформировать вектор из нулей х=zeros(1,5), а потом заполнить его значениями.

>> x=zeros(1,5)

x =

0 0 0 0 0

>> for i=1:5

x(i)=2*i-1

end

x =

1 0 0 0 0

x =

1 3 0 0 0

x =

1 3 5 0 0

x =

1 3 5 7 0

x =

1 3 5 7 9

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

Чтобы повысить эффективность работы программы, следует иметь в виду следующее правило: везде, где возможно, заменять фрагменты программы, содержащие циклы for и while на встроенные операторы. Это объясняется тем, что скорость выполнения матричных и векторных операций выше.

  • Можно сформировать два вектора:

вектор i=1:5;

вектор х=2*i-1

>> i=1:5;

>> x=2*i-1

x =

1 3 5 7 9

  1. Оператор цикла с предусловием:

while <условие>

<операторы>

End

Сформируем вектор нечетных чисел:

>> i=1;

>> while i<=5

x(i)=2*i-1;

i=i+1;

end;

>> x

x =

1 3 5 7 9

Пример.

Найти наибольшее число, факториал которого< 150.

echo on

%нахождение наибольшего числа, факториал, которого<150

i=0;

f=1;

while f<150

i=i+1;

f=f*i;

end

disp(i-1)

на экране получим:

5

или лучше воспользоваться встроенной функцией:

>> i=1;

>> while prod(1:i)<150

i=i+1;

end;

>> disp(i-1)

на экране получим:

5

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

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