Справочник Программист

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° в сторону от препятствия.

Ещё один распространённый случай: робот-пылесос зажевал тряпку, провод или тапочек. Если под щётку попадает посторонний, она не может крутиться — уборку нужно останавливать. В таком случае тоже нужно подать звуковой сигнал об ошибке и остановить все моторы.

Ну а когда нет никаких препятствий и роботу-пылесосу ничего не мешает, он может продолжать работать в привычном режиме.

Вот и всё! Вы завершили виртуальную пробу!