Что такое алгоритм: исполнитель, команды, ветвления и циклы

Информатикаобновлено 07.10.202610 мин чтенияесть тренажёр

Алгоритмы для детей проще всего объяснить так: алгоритм — это точная последовательность шагов, выполнив которую исполнитель обязательно получит результат. Рецепт бутерброда, путь до школы и программа для робота устроены одинаково. Ниже — виды алгоритмов, бытовые примеры и лабиринт, где команды нужно собрать самому.

Загружаем…

Что такое алгоритм

Алгоритм — это понятный и точный план действий из отдельных шагов, который приводит к результату за конечное число шагов. Важно, что его может выполнить не только автор, но и кто-то другой — человек или машина.

Слово «алгоритм» звучит сложно, но ребёнок сталкивается с алгоритмами каждый день. Утром он чистит зубы по одному и тому же плану, в школе решает пример по правилу, в игре проходит уровень по заученному маршруту. Разница с программированием в одном: компьютер не догадывается, что вы имели в виду. Если в алгоритме пропущен шаг, машина его не выполнит. Джаннетт Винг назвала умение составлять такие планы вычислительным мышлением и предложила считать его базовым навыком для всех, а не только для программистов[1].

Объяснять алгоритмы детям лучше через игру, а не через определение. Попробуйте простую игру: ребёнок даёт вам команды, как дойти от двери до стола, а вы выполняете их буквально. «Иди вперёд» — и вы идёте, пока не упрётесь в стену. Уже после двух-трёх попыток становится ясно, почему в алгоритме нужны числа, повороты и условия остановки.

Исполнитель и система команд

Исполнитель — это тот, кто выполняет алгоритм: человек, робот, компьютер или персонаж на экране. У каждого исполнителя есть система команд — список действий, которые он умеет выполнять, и других команд он не понимает.

Например, у робота в лабиринте ниже всего несколько команд: «вперёд», «повернуть налево», «повернуть направо», а также блоки повторения и условия. Попросить его «обойти стену» нельзя — такой команды нет, её придётся собрать из простых. В школьной информатике по программе 8 класса изучают исполнителей Робот, Черепашка и Чертёжник[2], и у каждого своя небольшая система команд.

ИсполнительПример командРезультат
Робот в лабиринтевперёд, повернуть налево, повторить 3 разаДоходит до флажка
Черепашкавперёд 100, направо 90, опустить пероРисует фигуру
Поварнарезать, смешать, жарить 5 минутГотовое блюдо
Компьютер с Pythonprint(), input(), for, ifРаботающая программа

Чем меньше команд у исполнителя, тем важнее их порядок. Эту идею развивал Сеймур Пейперт: в его языке Logo ребёнок управлял черепашкой и учился, представляя себя на её месте[5]. Учебные исполнители из федеральной образовательной программы продолжают ту же линию. Именно поэтому учебные исполнители так полезны: внимание ребёнка уходит на сам алгоритм, а не на поиск нужной кнопки.

Свойства хорошего алгоритма

У хорошего алгоритма 4 главных свойства: он понятен исполнителю, точен, состоит из отдельных шагов и заканчивается за конечное число шагов, выдавая результат.

  • Понятность. Каждая команда входит в систему команд исполнителя.
  • Точность. Команда понимается однозначно: «немного пройди» — не команда, «пройди 3 клетки» — команда.
  • Дискретность. Алгоритм разбит на отдельные шаги, которые выполняются по очереди.
  • Конечность и результат. Рано или поздно алгоритм заканчивается и даёт то, ради чего его писали.

Проверьте любой домашний «алгоритм» по этому списку. «Собери портфель» не годится: непонятно, что именно положить. «Положи в портфель дневник, пенал и учебники по расписанию на завтра» — уже почти алгоритм. Для алгоритмов детям 8–10 лет такое разбирательство превращается в игру: найди, где инструкция неточная, и исправь её.

Линейный алгоритм

Линейный алгоритм — это алгоритм, в котором все команды выполняются по очереди, по одному разу, без пропусков и повторов. Это самый простой вид, с него начинают и в Scratch, и в Python.

Пример линейного алгоритма — приготовить чай: налить воду, вскипятить, положить пакетик, залить кипятком, подождать 3 минуты. Порядок менять нельзя, и это первое, что стоит показать, объясняя линейные алгоритмы детям: если сначала залить пакетик холодной водой, а потом кипятить чашку, результат будет другим. В Python линейная программа выглядит как несколько строк подряд:

imya = input("Как тебя зовут? ")
print("Привет,", imya)
print("Сейчас посчитаем: 7 * 8 =", 7 * 8)

Каждая строка выполняется один раз, сверху вниз. Если поменять местами первые две строки, Python сообщит, что переменной ещё нет. Это хороший первый урок: компьютер выполняет ровно то, что написано, и именно в том порядке. Официальная документация Python описывает это правило так же: инструкции выполняются последовательно, если их не меняет условие или цикл.

Ветвление: если — иначе

Ветвление — это место в алгоритме, где исполнитель проверяет условие и выбирает один из двух путей. В жизни это звучит как «если идёт дождь, возьми зонт, иначе надень кепку».

Без ветвлений алгоритм одинаково ведёт себя в любой ситуации, а реальный мир так не работает. Робот в лабиринте не знает заранее, где стена, поэтому ему нужна команда «если путь впереди свободен — иди вперёд, иначе поверни». В Python ветвление записывают словами if и else:

temp = int(input("Сколько градусов на улице? "))
if temp < 0:
    print("Надень шапку и варежки")
else:
    print("Можно идти в кепке")

Обратите внимание на двоеточие и отступ: всё, что сдвинуто вправо, относится к своей ветке. Подробно условные конструкции разобраны в уроке про условия if в Python.

Цикл: повторить несколько раз

Цикл — это часть алгоритма, которая повторяется несколько раз подряд: заданное число раз или пока верно условие. Вместо «шаг, шаг, шаг, шаг» пишут «повторить 4 раза: шаг».

Циклы делают алгоритм короче и понятнее. Чтобы нарисовать квадрат, Черепашке нужно 8 команд без цикла и всего 2 команды внутри «повторить 4 раза». Брэннан и Резник относят циклы к ключевым понятиям вычислительного мышления наряду с последовательностями, событиями и условиями[3]. Есть два вида повторений: «повторить N раз», когда число повторов известно заранее, и «повторять, пока не…», когда исполнитель сам проверяет, пора ли остановиться.

for i in range(3):
    print("Шаг вперёд")
print("Пришли!")

Эта программа трижды выводит «Шаг вперёд», а затем один раз «Пришли!». Разобраться в записи поможет урок о цикле for в Python, а в блочной форме то же самое показано в статье про циклы в Scratch.

Бытовые алгоритмы для детей: примеры из жизни

Чтобы понять алгоритм, не нужен компьютер: подойдут 5 обычных домашних дел. В каждом легко найти линейные шаги, условия и повторения.

ДелоЛинейные шагиУсловиеПовторение
Почистить зубывзять щётку, выдавить пастуесли паста закончилась — взять новуючистить 2 минуты
Перейти дорогуподойти к переходуесли зелёный — идти, иначе ждатьждать, пока не загорится зелёный
Полить цветынабрать лейкуесли земля сухая — политьдля каждого горшка
Собрать конструктороткрыть инструкциюесли детали нет — найтишаг за шагом до последней страницы
Сделать зарядкувстать, вытянуть рукиесли устал — передохнуть10 приседаний

Бытовые алгоритмы детям понятнее любых определений. Попросите ребёнка записать один такой алгоритм на бумаге, а потом выполнить его «как робот» — строго по написанному. Ошибки в записи обнаружатся сами собой, и это весело. Больше подобных игр — в материале о программировании без компьютера.

Робот в лабиринте: как проходить уровни с циклами

Лабиринт вверху страницы — это 4 уровня с циклами (уровни 5–8): робот должен дойти до флажка, а команды для него собирают из блоков «вперёд», «повернуть налево/направо», «повторить N раз» и «повторять, пока не у флажка».

  1. Посмотрите на поле. Посчитайте, сколько клеток робот проходит по прямой до поворота.
  2. Найдите повторяющийся кусок. Если путь похож на лестницу «вперёд, налево, вперёд, направо», этот кусок можно положить в «повторить».
  3. Соберите программу и нажмите «▶ Запустить». Робот выполнит команды по очереди.
  4. Не получилось — нажмите «Сначала». Проследите, на каком шаге робот свернул не туда, и исправьте только этот блок.

Главная цель уровней с циклами — уложиться в меньшее число блоков. Такой лабиринт продолжает идею учебных исполнителей из программы 8 класса по ФОП ООО, а на ОГЭ по материалам ФИПИ задание 15 тоже требует составить программу для исполнителя в среде КуМир. Если программа из 12 блоков работает, попробуйте сократить её до 4–5 с помощью повторения. Остальные уровни и правило правой руки описаны на странице о роботе в лабиринте.

Когда игра в алгоритмы не поможет

Если цель — научиться писать настоящие программы, одних игр с карточками и лабиринтами не хватит. Вот 4 ситуации, где они не помогут.

  • Ребёнку 13–14 лет и он готовится к ОГЭ. Нужны задачи на языке программирования, а не только блоки.
  • Все 12 уровней лабиринта пройдены. Дальше пора переходить к Scratch-проекту или к Python.
  • Ребёнку 4 года и он ещё не различает «право» и «лево». Сначала игры на ориентацию, команды потом.
  • Занятие длится больше 40 минут подряд. Внимание падает, и разбор ошибок превращается в угадывание.

«Алгоритмическое мышление автоматически сделает ребёнка отличником по математике». Это не подтверждается: метаанализ Scherer и соавторов показал средний положительный эффект обучения программированию, но перенос на другие навыки не происходит сам собой — нужен продуманный урок[4].

«Алгоритмы — это только для компьютеров». Миф: исполнителем может быть человек, а записать план можно на обычном листе бумаги.

Чего делать нельзя

Нельзя превращать знакомство с алгоритмами в зубрёжку определений: ребёнок должен сам составлять и проверять планы. Вот 6 правил для взрослых.

  • Нельзя подсказывать готовый маршрут в лабиринте — пусть ребёнок ошибётся и найдёт шаг сам.
  • Не следует начинать с циклов, пока не освоены простые линейные команды.
  • Не стоит давать «команды», которых нет в системе исполнителя — это ломает саму идею.
  • Не допускается ругать за неудачный запуск: ошибка — нормальный шаг отладки.
  • Нельзя проверять только результат — спросите, почему программа работает.
  • Не стоит сидеть над одним уровнем больше 15 минут — сделайте перерыв и вернитесь позже.

Источники

[1] Wing J. M. Computational thinking // Communications of the ACM. 2006. Vol. 49, № 3. P. 33–35.

[2] Приказ Минпросвещения России от 18.05.2023 № 370 «Об утверждении федеральной образовательной программы основного общего образования».

[3] Brennan K., Resnick M. New frameworks for studying and assessing the development of computational thinking // Proceedings of the 2012 Annual Meeting of the American Educational Research Association. Vancouver, 2012.

[4] Scherer R., Siddiq F., Sánchez Viveros B. The cognitive benefits of learning computer programming: A meta-analysis of transfer effects // Journal of Educational Psychology. 2019. Vol. 111, № 5. P. 764–792.

[5] Papert S. Mindstorms: Children, Computers, and Powerful Ideas. New York: Basic Books, 1980.

Вопросы и ответы

С какого возраста объяснять алгоритмы детям?

Простые игры с командами «шаг вперёд, повернись» подходят уже дошкольникам, если ребёнок различает право и лево. Записывать планы и проходить лабиринт удобнее с 7–8 лет.

Чем алгоритм отличается от программы?

Алгоритм — это план, его можно записать словами или нарисовать. Программа — тот же план, записанный на языке, который понимает компьютер, например на Python.

Нужно ли учить названия свойств наизусть?

Для школьной контрольной — да, но важнее уметь объяснить их на примере. Если ребёнок понимает, почему «немного пройди» — плохая команда, термин запомнится легко.

Что делать, если ребёнок застрял на уровне лабиринта?

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

Можно ли изучать алгоритмы без компьютера?

Да, бумага, карточки с командами и игра «робот-родитель» дают ту же идею. Компьютер нужен, когда хочется проверить план быстро и много раз.

Какой язык выбрать после лабиринта?

Для 8–11 лет удобен Scratch с его блоками, для 11–13 лет и старше — Python. Идея команд, условий и повторений в обоих одинаковая.