"Информатика", Рудченко Т.А., Семёнов А.Л. / Под ред. Семёнова А.Л.
Условие «бусины нет» помогает исполнителю выбрать действие по состоянию ячейки. Сначала он проверяет, пуста ли ячейка, и только затем решает, выполнять ли команду. Если бусины нет, её можно положить; если она есть, команда добавления пропускается. Так алгоритм учитывает разные ситуации и не выполняет лишних действий. Для этого используют неполное ветвление, а если для обоих результатов проверки предусмотрены разные действия — полное.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Условие — проверяемое утверждение о текущей ситуации, например о наличии или отсутствии бусины. Проверка даёт один из двух результатов: условие истинно или ложно. Это нужно, чтобы исполнитель мог учитывать состояние ячейки, а не действовать наугад.
Ветвление — команда, в которой дальнейшие действия зависят от результата проверки условия. Получив ответ, исполнитель выбирает подходящее продолжение алгоритма. Ветвление нужно, когда одинаковая команда подходит не для всех возможных ситуаций.
Неполное ветвление — конструкция «если условие, то действие», которая выполняет действие только при истинном условии. Если условие ложно, команда внутри ветви пропускается. Такая запись нужна, когда для одного из результатов проверки отдельное действие не требуется.
Полное ветвление — конструкция «если условие, то одно действие, иначе другое», предусматривающая оба результата проверки. При истинном условии выполняется действие после слова «то», при ложном — после слова «иначе». Эта конструкция нужна, если для обеих ситуаций предусмотрены разные действия.
Исполнитель должен сначала проверить ячейку, потому что команда зависит от того, есть ли в ней бусина. Если сразу добавить бусину, алгоритм не сможет учесть, что ячейка уже может быть занята. Проверка отделяет получение сведений о ситуации от изменения этой ситуации. Поэтому сначала выясняют состояние ячейки, а потом выбирают команду.
Одно условие «бусины нет» делит возможные ситуации на два случая. Если утверждение истинно, ячейка пуста; если ложно, в ней есть бусина. Эти случаи взаимоисключают друг друга: для одной ячейки в один момент условие не может быть одновременно истинным и ложным. Так из одной проверки получаются два понятных продолжения алгоритма.
Проверка условия отличается от безусловной команды тем, что сама по себе не меняет ячейку, а определяет, что делать дальше. Команда добавления бусины, напротив, выполняется без выбора и изменяет состояние ячейки. Один и тот же алгоритм с проверкой может привести к разным результатам, потому что одна и та же команда выполняется только в тех случаях, когда условие истинно. Результат зависит от исходного состояния ячейки.
Если при ложном условии ничего делать не нужно, достаточно неполного ветвления. Запись «если бусины нет, то положить бусину» означает: проверить ячейку и выполнить добавление только при пустой ячейке. Когда бусина уже есть, команда добавления не выполняется. После проверки исполнитель всё равно переходит к следующей команде алгоритма.
Если для наличия и отсутствия бусины нужны разные действия, используют полное ветвление. Например, при пустой ячейке можно положить бусину, а при занятой — оставить её без изменений или выполнить другую команду. Слова «то» и «иначе» разделяют действия для двух результатов одной проверки. Благодаря этому алгоритм явно описывает, что делать в каждом возможном случае.
| Ситуация | Результат условия | Действие при неполном ветвлении | Действие при полном ветвлении |
|---|---|---|---|
| Бусина есть | Условие «бусины нет» ложно | Команда внутри ветвления не выполняется | Выполняется действие из ветви «иначе» |
| Бусины нет | Условие «бусины нет» истинно | Команда внутри ветвления выполняется | Выполняется действие из ветви «то» |
| После проверки | Результат уже определён | Исполнитель продолжает алгоритм со следующей команды | |
Чтобы пользоваться таблицей, сначала выбери строку по состоянию ячейки и определи истинность условия. Затем прочитай действие в столбце нужного вида ветвления. Последняя строка напоминает, что после выполнения выбранной ветви алгоритм продолжается.
Условие. Составить алгоритм, который кладёт бусину только в пустую ячейку. Здесь важно не выполнять команду добавления, если бусина уже есть. Поэтому достаточно неполного ветвления: для ложного условия отдельное действие не нужно.
Записать проверку «бусины нет». Она будет истинной для пустой ячейки и ложной для ячейки с бусиной.
Поместить команду «положить бусину» внутрь ветви «то». Это связывает добавление с истинным результатом проверки.
Не добавлять ветвь «иначе»: при ложном условии ячейку нужно оставить как есть. После проверки исполнитель продолжит алгоритм.
Ответ. Если бусины нет, положить бусину; иначе ничего не делать и перейти к следующей команде. Такая запись не пытается добавить вторую бусину в занятую ячейку.
Условие. В цепочке есть ячейки с бусинами и пустые ячейки; нужно проследить работу алгоритма для каждой из них. Не следует переносить результат одной проверки на всю цепочку, потому что состояния ячеек различаются. Рассмотрим неполное ветвление, которое добавляет бусину в пустую ячейку.
Взять первую ячейку и отдельно проверить условие «бусины нет». Если оно истинно, отметить выполнение команды добавления; если ложно, отметить её пропуск.
Перейти к следующей ячейке и повторить проверку заново. Даже соседние ячейки могут дать разные результаты, поэтому одной общей проверки недостаточно.
Продолжать так до конца цепочки, записывая состояние после обработки каждой ячейки. Команда добавления изменяет только ту ячейку, для которой условие оказалось истинным.
Ответ. В каждой пустой ячейке появляется бусина, а ячейки, где бусина уже была, остаются без изменений. Чтобы проверить ход алгоритма, сопоставляй каждой ячейке собственный результат условия и выполненную команду.
Условие. Нужно сохранить бусину в занятой ячейке, а пустую заполнить бусиной другого цвета. В этой задаче описаны оба результата проверки: при наличии бусины её оставляют, а при отсутствии кладут бусину заданного цвета. Поэтому удобно использовать полное ветвление.
Проверить условие «бусины нет». Если оно истинно, ячейка пуста и подходит для заполнения.
В ветви «то» записать команду положить бусину нужного цвета. Это действие выполняется только для пустой ячейки.
В ветви «иначе» указать оставить бусину без изменений. Так алгоритм явно задаёт поведение для занятой ячейки.
Ответ. Если бусины нет, положить бусину другого цвета; иначе оставить ячейку без изменений. Полная конструкция делает результат проверки понятным для обоих состояний.
Добавлять бусину без предварительной проверки — значит не учитывать, что ячейка может быть занята. Так поступают, когда сосредоточены на нужном действии, но забывают об условии задачи. Проверь себя: может ли команда повредить результат хотя бы в одном исходном состоянии?
Путать условия «бусина есть» и «бусины нет» — значит неверно выбирать ветвь из-за отрицания. Ошибка возникает, если прочитать только слово «бусина» и не заметить слово «нет». Для проверки проговори результат на примере пустой ячейки и ячейки с бусиной.
Добавлять «иначе», хотя при ложном условии ничего делать не требуется, — значит усложнять алгоритм лишней командой. Так бывает, когда считают, что для любого условия обязательно нужны две ветви. Проверь задачу: если при ложном результате состояние должно остаться прежним, достаточно неполного ветвления.
Проверять только первую ячейку цепочки — ошибка, если алгоритм должен обработать их все. Можно допустить её, принимая результат первой проверки за общий для всей цепочки. Проверь себя: для каждой ли ячейки отдельно определены результат условия и выполняемая команда?
Для работы с ветвлением нужно знать команды исполнителя, порядок их выполнения и способы описания состояния ячейки. Условие связано с логическими высказываниями: его результат оценивают как истинный или ложный. Позже ветвления встречаются внутри циклов, в алгоритмах поиска и программах, реагирующих на разные входные данные. Умение проверять ситуацию перед действием помогает строить такие алгоритмы без лишних команд.
Почему нельзя сразу положить бусину, не проверяя, есть ли она?
Потому что в ячейке бусина уже может быть, и команда добавления нарушит условие задачи. Проверка позволяет выполнить команду только в подходящей ситуации.
Что произойдёт, если условие «бусины нет» окажется ложным?
Это означает, что бусина в ячейке есть. При неполном ветвлении команда внутри ветви пропускается, а при полном выполняется действие из ветви «иначе».
Чем неполное ветвление отличается от полного?
В неполном ветвлении действие задано только для истинного условия; при ложном условии исполнитель его пропускает. Полное ветвление задаёт отдельное действие и для истинного, и для ложного результата.
Нужно ли проверять каждую ячейку цепочки отдельно?
Да, если состояние ячеек может различаться. Проверка одной ячейки не сообщает, есть ли бусина в остальных, поэтому условие проверяют заново для каждой ячейки.
Можно ли использовать в условии не только наличие бусины, но и её цвет?
Да, если исполнитель умеет проверять цвет. Тогда условие может спрашивать, например, красная ли бусина, и выбор действия будет зависеть от ответа.
Если бусины нет