В программировании есть два основных инструмента для управления потоком исполнения:
- Ветвление ⇙⇘: позволяет запускать разный код в зависимости от условия (операторы
if
иswitch
) - Цикл ⟲: обеспечивает повторное выполнение кода (
for
,while
).
Ветвление ⇙⇘
Общая форма оператора if
в Matlab
Если условие (condition
) истинно (true
), тогда выполняются соответсвующие выражения (truth_actions
)
Иначе (else
) выполняются выражения соответсвующие ложности условия: falsity_actions
Пример. Если оценка студента больше или равна 3 напечатать ‘Зачет’ иначе напечатать ‘Незачет’:
grade =
4
Зачет
grade =
2
Незачет
Оператор elseif
Если решение исполнения того или иного кодового блока зависит от выполнения ряда последовательных условий если (if
), иначе-если (elseif
), иначе (else
), тогда общая форма такой конструкции выглядит следующим образом:
где statements<i>
- это одно или множество выражений, которые выполнятся в случае истинности условия condition<i>
и ложности предыдующих условий condition1 ... condition<i-1>
.
Пример. Если оценка студента равна 2 напечатать ‘Плохо’, иначе если оценка студента равна 3 напечатать ‘Удовлетворительно’, иначе если оценка студента равна 4 напечатать ‘Хорошо’, иначе напечатать отлично
grade =
4
Хорошо
grade =
2
Хорошо
Пример вложенных условий
При любых значениях i
и j
для каждой из программ выполняется только один из disp
.
Пример Пусть \(n\) условий исчерпывают все возможные случаи, например \(x < 2, x = 2 , x > 2\). Тогда вызов операторов, соответсвующих каждому из случаев, можно запрограммировать двумя способами.
Во втором способе не делаются лишние проверки, но первый способ наглядней.
Пример. Избыточные записи
Вместо следует писать:
Аналогично:
Вместо следует писать:
Составные условие. Логическое И (&&
)
Пример. Если средний балл студента за семестр больше или равен 3 и оценка студента за экзамен больше или равна 3 напечатать ‘Зачет’ иначе напечатать ‘Незачет’
semester_average =
4
final_exam =
3
Зачет
semester_average =
4
final_exam =
2
Незачет
Составные условие. Логическое ИЛИ (||
)
Пример. Если средний балл студента за семестр меньше 3 или оценка студента за экзамен меньше 3 напечатать ‘Незачет’ иначе напечатать ‘Зачет’
semester_average =
4
final_exam =
3
Зачет
semester_average =
4
final_exam =
2
Незачет
Логические операции. Логическое отрицание (~
)
Если оценка студента не равна 2 напечатать ‘Зачет’ иначе напечатать ‘Незачет’
grade =
4
Зачет
grade =
2
Незачет
grade =
3
Зачет
Оператор switch
Является альтернативой множественным операторам if
-elseif
-else
.
Позволяет сделать код более читаемым, особенно при наличии множества условий.
Общая форма выглядит следующим образом:
Пример. Если оценка студента равна 2 напечатать ‘Плохо’ иначе если оценка студента равна 3 напечатать ‘Удовлетворительно’ иначе если оценка студента равна 4 напечатать ‘Хорошо’ иначе напечатать ‘Отлично’.
grade =
4
Зачет
Пример. Определим выходной ли сегодня?
Общий пример:
Циклы ⟲
Общая форма оператора for
Для каждого элемента (element
) вектора (vector
) выполняется некоторое действие (perform_action
).
Простой пример использования for
Итерация: 1
Итерация: 2
Итерация: 3
Пример 1. Вычислить сумму чисел \(1 + 3 + 5 + 7 + 9\)
sum =
25
Пример 2. По заданному целому неотрицательному значению \(n\) и вещественному значению \(x\) требуется вчсилить \(x^n\).
Пример 3. По заданному целому неотрицательному значению \(n\) требуется вычислить \(n!\)
Пример 4. По заданному натуральному значению \(n\) требуется вычислить
\[1 - \frac{1}{2} + \frac{1}{3} - \frac{1}{4} + \ldots \pm \frac{1}{n}\]Пример 4. По заданному натуральному значению \(n\) и вещественному значению \(x\) требуется вычислить \(x + x^2 + x^3 + \ldots + x^n\)
Замечание. В MATLAB, если переменная используется как индекс в цикле for
, то она присваивается текущему окружению, при этом перезаписывая любую другую переменную с таким же именем.
i =
3
Оператор повторения while
Пример. Вычислить сумму чисел \(1 + 3 + 5 + 7 + 9\).
sum =
25
Досрочное завершение цикла
Существует два способа досрочного завершения цикла for
:
continue
прерывает текущую итерациюbreak
прерывает выполнение всего циклаfor
Пример. Вычислить сумму чисел \(1 + 3 + 5 + 7 + 9\).
sum =
25
Пример с использованием и break
и continue
.
3
4
5
Вложенные циклы
Рассмотрим задачи, в которых внутри одного цикла реализован другой цикл.
Пример 1. Для заданного натурального числа \(n\) требуется найти все такие тройки натуральных чисел \(a, b, c\), что \(a + b + c = n\).
1+1+2=4
1+2+1=4
2+1+1=4
Пример демонстрирует сокращение количество вложенных циклов.
Пример 2. Требуется распечатать все трехзначные числа, в которых есть две одинаковые цифры.
Если порядок выводимых чисел не важен, то эту задачу можно решить и более эффективно.
Пример 3. Требуется распечатать все трехзначные числа, в которых вторая цифра больше первой, а третья больше второй.
Два последних примера показывают, что в задачах наивный подход не всегда является даже самым простым. В этих задачах излишним было бы перебирать все трехзначные числа, выделять из них цифры и сравнивать их между собой.