"Информатика (базовый уровень)", Семакин И.Г., Хеннер Е.К., Шеина Т.Ю.
Структура алгоритма задаёт порядок, в котором исполнитель выполняет команды. Любой алгоритм можно построить из трёх базовых структур: следования, ветвления и цикла. Следование выполняет команды одну за другой, ветвление выбирает действие по условию, а цикл повторяет команды. Эти конструкции можно соединять и вкладывать, создавая алгоритмы любой сложности. Блок-схема помогает увидеть их устройство и проследить ход выполнения.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Линейная структура алгоритма — последовательное выполнение команд в порядке их записи, без пропусков и повторений. Каждая команда запускается после предыдущей, поэтому ход выполнения заранее определён. Такая структура подходит, когда для решения задачи достаточно выполнить действия одно за другим. Например, можно ввести число, умножить его на два и вывести результат.
Ветвление — структура, в которой дальнейшие действия выбираются в зависимости от истинности условия. Условие — это выражение, результатом которого становится «истина» или «ложь». Ветвление нужно, когда при разных исходных данных алгоритм должен действовать по-разному. Например, проверка числа позволяет выбрать сообщение о том, положительное оно или нет.
Цикл — структура, обеспечивающая многократное выполнение одной или нескольких команд. Повторяемые команды образуют тело цикла, а условие или счётчик помогают определить, когда остановиться. Цикл нужен, если однотипное действие приходится выполнять снова и снова. Благодаря ему не нужно записывать одну и ту же команду много раз.
Блок-схема — графическое представление алгоритма с помощью стандартных блоков и стрелок. Блоки обозначают действия, проверку условия или ввод и вывод данных, а стрелки показывают переходы между ними. Схема помогает увидеть порядок шагов и обнаружить пропущенный переход. Её удобно использовать до записи алгоритма на языке программирования.
Любой сложный алгоритм можно составить из последовательности, ветвления и повторения, потому что при решении задачи команды либо выполняются по порядку, либо выборочно, либо снова и снова. Например, программа может сначала получить данные, затем проверить их, выбрать подходящее действие и повторить обработку для следующих значений. Сочетание трёх конструкций позволяет описать и простые, и сложные способы решения. Поэтому при разборе большого алгоритма его удобно мысленно разделить на эти части.
Линейная структура задаёт однозначный порядок: исполнитель начинает с первой команды и переходит к следующей после её выполнения. Такой порядок удобен для вычислений, где каждое действие использует результат предыдущего. Если команда обращается к данным, которые ещё не были получены или рассчитаны, порядок нужно пересмотреть. Например, сначала вводят x, затем вычисляют y = 2x + 1 и только потом выводят y.
Ветвление начинается с проверки условия, после которой выбирается одна из альтернатив. Если условие истинно, выполняется одна команда или группа команд; если ложно — другая. Полное ветвление предусматривает действия для обоих результатов проверки, а неполное задаёт действие только для одного из них: при другом результате выполнение просто продолжается. Выбирая между ними, нужно спросить себя, требуется ли отдельная команда для каждого исхода.
В цикле сначала или после выполнения тела проверяется условие, а тело содержит действия, которые нужно повторять. Чтобы цикл завершился, данные, от которых зависит проверка, должны изменяться: например, счётчик увеличивается на единицу. Если условие всегда остаётся истинным, повторение не остановится. Поэтому перед запуском стоит проверить начальное значение, изменение переменной и момент, в который условие станет ложным.
Базовые структуры можно вкладывать друг в друга и соединять в нужном порядке. Например, цикл может обрабатывать несколько чисел, а ветвление внутри него — выбирать действие для каждого числа. Внутри ветвления тоже может находиться цикл, если для одной из альтернатив нужно выполнить повторяющиеся действия. Такое построение позволяет описывать сложную логику небольшими понятными фрагментами.
Сопоставляйте структуры по тому, как проверяется условие и сколько раз выполняется тело. В таблице указаны общие свойства; конкретное число повторений зависит от данных и заданного алгоритма. Для цикла с параметром число шагов обычно известно заранее.
| Структура | Порядок выполнения | Наличие условия | Количество выполнений команд | Пример применения |
|---|---|---|---|---|
| Линейная структура | Команды выполняются одна за другой | Нет | Каждая команда выполняется один раз | Ввод числа, вычисление и вывод результата |
| Ветвление | Выполняется выбранная по условию альтернатива | Да, проверяется условие | Команды одной из альтернатив выполняются по одному разу | Определение большего из двух чисел |
| Цикл с предусловием | Сначала проверка, затем тело, затем новая проверка | Да, до выполнения тела | Ноль или несколько раз | Повторение, пока введённое значение не подходит |
| Цикл с постусловием | Сначала тело, затем проверка условия | Да, после выполнения тела | Один или несколько раз | Повторный запрос данных до правильного ввода |
| Цикл с параметром | Параметр проходит заданный диапазон, выполняется тело | Число шагов задаётся параметром | Заранее определённое число раз | Вычисление суммы первых n натуральных чисел |
Условие. Записать алгоритм вычисления y = 3x + 2 по заданному числу x и представить его блок-схемой. Для этой задачи все команды выполняются в одном порядке, выбор и повторение не нужны. Поэтому достаточно линейной структуры.
Ответ. Алгоритм: ввести x; присвоить y значение 3x + 2; вывести y. Например, при x = 4 получаем y = 3 · 4 + 2 = 14. В блок-схеме после блока вычисления нет развилки: поток идёт к выводу результата.
Условие. Составить алгоритм, который получает числа a и b и сообщает большее из них. Одной линейной последовательности недостаточно: нужное действие зависит от сравнения значений. Если a = b, ни одно число не больше другого, поэтому алгоритму нужны три возможных результата.
Ответ. Используем полное ветвление: для каждого возможного исхода предусмотрено сообщение. Например, при a = 7 и b = 5 первая проверка истинна, поэтому алгоритм выводит, что a больше. Ветка равенства нужна, поскольку при ложном условии a > b число b не обязательно больше: оно может быть равно a.
Условие. Найти сумму чисел от 1 до n с помощью цикла. Для примера возьмём n = 4; ожидаем сложить 1 + 2 + 3 + 4. Нужны переменная-сумма и счётчик, который показывает очередное слагаемое.
Ответ. При n = 4 значения s после итераций равны 1, 3, 6 и 10, а i последовательно принимает значения 2, 3, 4 и 5. При i = 5 условие 5 ≤ 4 ложно, поэтому цикл прекращается и выводится 10. Если n = 0, тело не выполнится ни разу и алгоритм выведет 0.
Условие ветвления иногда путают с командой, которая должна выполняться. Из-за этого неясно, по какому признаку выбирается дальнейшее действие; например, фразы «сравнить числа» недостаточно, если не указано, проверяется ли a > b. Ошибку допускают, когда описывают желаемый результат, но забывают сформулировать логическую проверку. Проверьте себя: условие должно допускать ответ «истина» или «ложь» и однозначно вести к нужной альтернативе.
В блок-схеме ветвления могут не соединить альтернативы в общий дальнейший поток. Тогда непонятно, куда алгоритм переходит после выполнения выбранной команды, особенно если обе ветви должны привести к одним и тем же следующим действиям. Обычно это случается, когда схему рисуют по частям и не проверяют целиком. Проследите по стрелкам оба пути: после альтернатив алгоритм должен завершиться или перейти к ясно обозначенному общему продолжению.
В цикле можно забыть изменить счётчик или другую переменную, связанную с условием. Тогда проверка снова получает прежний результат, и повторение не заканчивается; причиной часто становится невнимательность при записи тела цикла. Проверьте, меняется ли нужная переменная при каждой итерации и приведёт ли это изменение к ложному условию. Для проверки полезно вручную проследить несколько повторений.
Неверный выбор цикла с предусловием или постусловием меняет число выполнений тела. Если условие проверяется до тела и сразу ложно, команды не выполнятся; если проверка стоит после тела, хотя бы одна итерация состоится. Ошибку допускают, не уточнив, обязательно ли выполнить действие хотя бы раз. Перед выбором ответьте на этот вопрос и проверьте начальное состояние условия.
Для понимания структур нужны понятия алгоритма, команды, исполнителя, условия и логического значения: без них нельзя описать ни последовательность действий, ни выбор, ни повторение. Эти конструкции становятся основой записи программ на языках программирования, где ветвлению соответствуют условные операторы, а циклам — циклические операторы. Блок-схемы помогают представить программу графически, а трассировка — последовательно проверить её работу на конкретных данных. Те же структуры используют при разработке сложных программ, разбивая задачу на понятные части.
Можно ли любой алгоритм представить только с помощью трёх базовых структур?
Да, алгоритмы можно составлять из следования, ветвления и цикла, соединяя и вкладывая эти структуры. В реальных языках программирования встречаются разные команды и формы записи, но их логику можно свести к этим базовым конструкциям.
Чем ветвление отличается от цикла?
Ветвление по условию выбирает один из возможных путей выполнения. Цикл использует условие или счётчик, чтобы повторять команды; после проверки он может продолжить повторение или завершиться.
Почему цикл иногда не выполняется ни одного раза?
В цикле с предусловием условие проверяется до выполнения тела. Если при первой проверке оно ложно, команды внутри цикла пропускаются.
Как понять, какой вид цикла выбрать?
Если повторение нужно продолжать, пока выполняется условие, подойдёт цикл с предусловием. Если тело должно выполниться хотя бы один раз, выбирают цикл с постусловием. Когда заранее известно число повторений, удобно использовать цикл с параметром.
Можно ли помещать один цикл или ветвление внутрь другого?
Да, базовые структуры можно вкладывать друг в друга. Например, внутри цикла можно проверять условие, а внутри ветвления — запускать другой цикл; важно следить за условиями и изменением переменных.
§ 13. Структура алгоритмов