Управляющие конструкции программы
Управляющие конструкции задают порядок, в котором выполняются команды программы. Любой алгоритм можно представить как сочетание трёх базовых конструкций: последовательности, ветвления и цикла; перед изучением темы полезно повторить структуру программы и условие.
Три базовые конструкции
Последовательность — команды выполняются одна за другой, сверху вниз. Это порядок по умолчанию: пока не встретилась команда выбора или повторения, следующая команда начинает выполняться после завершения предыдущей.
Ветвление позволяет выбрать один из вариантов действий в зависимости от условия. Если условие истинно, выполняется одна ветвь, иначе — другая. Подробно оператор ветвления разобран на странице оператор ветвления.
Цикл многократно выполняет один и тот же блок команд. Повторение продолжается, пока выполняется условие, либо заданное число раз, либо для всех элементов некоторой последовательности. См. также цикл.
Управляющая конструкция — часть программы, которая определяет порядок выполнения команд: последовательный, условный или повторяющийся.
Чтобы понять результат программы, нужно проследить фактический порядок выполнения команд, а не только порядок их записи. При ветвлении проверяют условие, при цикле — условие продолжения каждой итерации.
| Конструкция | Что делает | Главный вопрос |
|---|---|---|
| Последовательность | Выполняет команды по порядку | Какая команда следующая? |
| Ветвление | Выбирает одну из ветвей | Истинно ли условие? |
| Цикл | Повторяет блок команд | Нужно ли выполнять ещё раз? |
Последовательность и ветвление
В последовательном алгоритме значение переменной может изменяться несколько раз. Важно учитывать именно последнее присваивание перед использованием переменной. Например, после команд \(a := 4\), \(a := a + 3\), \(a := 2a\) значение \(a\) равно \(14\).
У ветвления есть условие и одна или две ветви. В полной форме выполняется ровно одна ветвь: либо блок «если», либо блок «иначе». В неполной форме при ложном условии не выполняется ни одна дополнительная команда.
Составное условие строится с помощью логических операций. Для «и» истинны оба условия, для «или» достаточно хотя бы одного, а «не» меняет значение истинности. Скобки помогают явно задать порядок вычислений. При разборе нельзя путать математическое равенство \(=\) с присваиванием: в языках программирования присваивание часто записывают как \(:=\) или используют отдельный оператор.
| A | B | A и B | A или B |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 |
Какое значение напечатает программа: x = 5; if x > 3: x = x + 2; else: x = x - 2; print(x)?
Циклы и число повторений
Цикл состоит из заголовка, где определяется продолжение, и тела — повторяемого блока. Одна итерация — одно выполнение тела цикла. Если условие проверяется перед телом, цикл может не выполниться ни разу. Если проверка выполняется после тела, тело выполнится хотя бы один раз.
Для цикла с параметром, который изменяется от \(a\) до \(b\) с шагом \(h>0\), при включённых границах число итераций можно найти так:
Формула применима, если параметр действительно движется к границе. При шаге \(h<0\) направление меняется: начальное значение должно быть не меньше конечного. На экзамене особенно важно определить, входит ли конечная граница в диапазон.
1. Считать границу диапазона дважды или не учитывать её вовсе. 2. Забывать, что тело цикла может изменить условие. 3. Прибавлять шаг не к той переменной. 4. Принимать вложенный цикл за один проход: число выполнений внутреннего тела обычно равно произведению чисел итераций. 5. Читать команды после цикла так, будто они выполняются на каждой итерации.
Разбор типовой задачи
Рассмотрим программу. Требуется определить, что будет напечатано после её выполнения.
1s = 0 2for x in range(2, 8, 2): 3 if x > 3: 4 s = s + x 5 else: 6 s = s + 1 7print(s)
Сначала выпишем значения параметра цикла, затем для каждого значения определим ветвь и новое значение суммы.
Такой разбор удобно оформлять в трассировочной таблице. В ней обычно записывают номер итерации, значение параметра, результат условия и значения изменяемых переменных.
| Итерация | x | x > 3 | Новое s |
|---|---|---|---|
| 1 | 2 | ложь | 1 |
| 2 | 4 | истина | 5 |
| 3 | 6 | истина | 11 |
Вложенные конструкции и проверка результата
Конструкции можно вкладывать: последовательность может содержать цикл, цикл — ветвление, а ветвление — другой цикл. Чтобы не потерять границы блоков, следите за отступами или служебными словами языка. Вложенный цикл полностью выполняется для каждого прохода внешнего цикла.
После получения ответа полезно выполнить тестирование программы на простых случаях. Для условий отдельно проверяют значения меньше границы, равные границе и больше неё — это приём граничных значений. При большом количестве переменных помогает трассировка программы.
1. Выпишите начальные значения переменных. 2. Найдите первую управляющую конструкцию. 3. Для ветвления вычислите условие. 4. Для цикла выпишите все значения параметра или последовательные значения условия. 5. После каждой команды обновляйте переменные. 6. Проверьте последний вывод отдельно.
Самопроверка
Проверь себя
Главное
- Последовательность выполняет команды сверху вниз; ветвление выбирает одну ветвь; цикл повторяет блок команд.
- При разборе сначала определяют фактический порядок выполнения, затем последовательно изменяют значения переменных.
- Для цикла учитывают начальное значение, конечную границу, шаг и правило включения границы.
- Вложенные конструкции разбирают по уровням: внешний цикл, затем внутренний блок и его ветвления.
- Трассировочная таблица и проверка граничных значений помогают обнаружить ошибки в вычислениях.