Справочник Программист
16 ноября 2023 г.Задание
Вы — программист, который получил заказ от производителя роботов-пылесосов.
Основное задание: разработка алгоритмов движения для робота-пылесоса.
Убирать пыль техника уже умеет, но так и останется просто пылесосом, пока вы не научите её перемещаться по дому без участия человека и без разбитых ваз.
Вам предстоит научить робот-пылесос передвигаться по различным траекториям: прямо, по периметру комнаты, спиралью и змейкой. А ещё — обходить препятствия, не падать с порогов и не ломаться, если в щётках что-то застряло. Прежде чем пытаться запомнить все азы кодинга за раз, загляните в справочник, программисты этой профпробы уже всё для вас подготовили!😉
Часть 1. Подготовка к работе
На данном этапе всё просто: вам достаточно выбирать подходящие действия в нужном порядке. Если вдруг вы ответите неверно, то увидите сигнал об ошибке.
Итак, перед вами компьютер, кабель и управляющая плата, которую вам нужно запрограммировать. Хотя вместо платы пока какая-то коробка, а кабель выглядит не лучше спутанных наушников. Значит, в первую очередь вам нужно подготовить их к дальнейшей работе. А вот код писать ещё рано.
Отлично, «железо» на столе! Включаем компьютер — на выключенном, пожалуй, будет сложно что-то сделать. Но если у вас вдруг получится, рекомендуем проверить почтовый ящик: вдруг вас зачислили в школу для волшебников?
Окей, видим рабочий стол! Давайте теперь запустим среду для разработки. Это такой вид программного обеспечения, в котором удобно работать с кодом и скриптами, запускать, выгружать и тестировать программы.
Переходим к подключению платы с помощью кабеля. В принципе, её можно было подсоединить и раньше, но мы удостоверились, что нет проблем с инструментами разработчика. Подключили плату? Супер, для незнакомого устройства понадобится обновить драйвера. В реальной жизни это скорее всего произойдёт автоматически.
Ну что ж, настало время… кодить! Вы проверили ПО, провели всю предварительную настройку, и можно приступать к основной части работы. Да, теперь можно и кофейку глотнуть.
Переходим к следующей части!
Часть 2. Разработка алгоритмов
Работа с кодом — действительно непростая задача. Например, сложно судить о его качестве, вытаскивая несколько строк без контекста, не учитывая, как описаны классы и какие используются библиотеки.
Но ведь мы с вами только пробуем знакомиться с профессией! На практическом этапе вам не нужно будет писать свою программу — вы лишь разберётесь в некоторых параметрах и функциях, а также заполните недостающие пробелы. Выбирайте подходящие варианты, чтобы код заработал и вы перешли к следующему заданию.
Движение вперёд
Давайте разберёмся с некоторыми понятиями из программирования. Начнём с оператора «function».
Функции помогают выполнить какую-то процедуру. В скобках у функции находятся аргументы, которые помогают её выполнить: в нашем случае именно аргументы «forward» и «4» говорят, в каком направлении (direction) и на какое расстояние (distance) нужно двигаться.
Движение вдоль стен
Заметили, как некоторые строки начинаются со знаков «/*» или «//»? Так программисты обозначают комментарии. Обычно всё, что написано в коде, имеет значение — даже один лишний символ может поломать программу. Тогда, чтобы оставить подсказку на будущее или объяснить какой-то параметр, специалисты выносят это под знак комментария.
Движение по спирали
Кстати, видите конструкцию if ... else ? Это самая распространённая форма для обозначения условия.
Условия — это конструкции в коде, которые позволяют проверить истинность или ложность выражения и выполнить другой код в зависимости от полученного результата.
Представьте: перед выходом из дома вы выглядываете в окно, чтобы проверить, идёт дождь или нет. Если он идёт, вы берёте зонт. Дождя нет? Отлично, зонтик можно оставить дома. То есть наличие непогоды — это условие, от которого зависят наши действия. Точно так же работают и программы!
Движение змейкой
Циклы — простой способ сделать какое-то действие несколько раз. Существуют разные способы для определения начала и окончания цикла, и «while» — один из них.
Оператор «while» обозначает цикл, который работает при каком-то условии. Если условие становится ложным, выражения в цикле перестают выполняться и управление переходит к следующей команде.
Прервать цикл можно оператором «break».
Движение змейкой с препятствием
В самом начале этого кода мы создаём функцию, в которой сразу указываем первичное направление движения пылесоса:
let direction = 'left',
где «let» — это оператор, который «объявляет» какую-то переменную. Звучит сложно? Попробуем объяснить!
Представьте, что вы с друзьями собираетесь во что-то поиграть, и вам как лидеру нужно придумать для команды позывные. Вы выстраиваете ребят и называете их по одному:
— Руслан, тебя будем называть Индеец. Алина, ты — Ракета. Вова, а ты будешь Дубровским, потому что тебе нравится Маша из 10-го «Б».
Если перевести это на язык программирования, вы только что объявили переменные:
let Misha = 'Indian'
let Alina = 'Rocket'
let Vladimir = 'Dubrovskiy'
Продолжим!
Часть 3. Блок-схема с обязательными функциями
У вас есть алгоритм с пропущенными шагами и несколько вариантов, которыми эти пропуски можно заполнить.
Давайте размышлять. Если датчик робота-пылесоса видит перед собой препятствие, ему нужно его объехать или хотя бы изменить направление. Для этого заставим робота повернуть влево на 90°. А если препятствий нет? Отлично, можно продолжить движение!
Другая ситуация: датчик, расположенный на нижней поверхности переднего края корпуса, обнаруживает перепад высот из-за ямы или порога. Если робот поедет дальше, он упадёт и застрянет так, что колёса не будут касаться пола. В таком случае нужно, чтобы пылесос подал звуковой сигнал об ошибке и отключил питание. Но если устройство ещё не успело свалиться в эту пропасть беспомощности, настройте алгоритм так, чтобы оно остановилось, откатилось немного назад, а затем повернулось на 90° в сторону от препятствия.
Ещё один распространённый случай: робот-пылесос зажевал тряпку, провод или тапочек. Если под щётку попадает посторонний, она не может крутиться — уборку нужно останавливать. В таком случае тоже нужно подать звуковой сигнал об ошибке и остановить все моторы.
Ну а когда нет никаких препятствий и роботу-пылесосу ничего не мешает, он может продолжать работать в привычном режиме.
Вот и всё! Вы завершили виртуальную пробу!