Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

Программирование робота на макете VBA Excel

Выполнил: учащийся 9 класса 9 группы

Руководитель: преподаватель информатики к. ф.м. н., доцент ВАК,

Саратов, ЛИЕН, 2017 г.

Назначение

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

Цель работы – на макете VBA Excel запрограммировать выход робота из любого лабиринта, используя правило левой или правой руки (держаться за стенку одной рукой).

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

На макете робот движется по квадрату 50×50 ячеек рабочего листа Excel. Программирование выполняется на языке VBA, и даже на макете его приходится повторять много раз, пока робот начнет двигаться, как задумано. Причем в программу могут добавляться любые новые функции.

Программирование и отладка реального устройства требует намного больше ресурсов, чем работа на макете.

Описание алгоритма

У робота нет рук, но есть датчики, чтобы отслеживать касание преграды и оценить возможность движения прямо, направо или налево.

Для движения робота пользователь задает лабиринт любой сложности, закрашивая ячейки в квадрате 50×50. В столбце справа пользователь задает максимальное число перемещений (защита от зацикливания), правило левой (-1) или правой (+1) руки, точку входа в лабиринт и цветовую шкалу для головы и хвоста робота и для фиксации числа проходов робота по ячейкам лабиринта. После 6-го прохода на экран будет выдано сообщение «Найден цикл в лабиринте», и программа завершает работу. Нормальное завершение, когда робот вернется в ячейку входа в лабиринт.

НЕ нашли? Не то? Что вы ищете?

Такой алгоритм нам нужен, чтобы запрограммировать оптимальное движение робота и определить, можно ли создать такой лабиринт, чтобы робот зациклился.

На плоскости для управления движением робота нужно задать систему координат: точку начала системы координат (0; 0) и два единичных вектора, которые задают направление осей и шаг по осям координат. Тогда положение робота на плоскости задаются двумя координатами: x и y. Для задания вектора направления движения робота из точки (x; y) нужны еще два параметра: dx и dy – проекции вектора на оси координат.

Для управления движением реального робота используются шаговые двигатели, то есть и там параметры (x; y; dx; dy) изменяются дискретно.

На рабочем листе Excel единичное движение робота тоже дискретное – переход из ячейки в смежную ячейку (одна сторона – общая). То есть на рабочем листе робот перемещается по ломаной линии с прямыми звеньями под углом 90°. Точно так же на экране по пикселям компьютер рисует прямую линию с любым наклоном.

Направление движения робота из ячейки (kr, kc) будем задавать направлениями смещения: dr по строкам (+1 вниз, –1 вверх); dc по столбцам (+1 вправо, –1 влево). Робот движется по смежным ячейкам, поэтому одно из двух направлений должно быть = 0. Если оба направления будут = 0, робот не сможет двигаться.

Вычисление направление движения

Приведем текст основной процедуры, вычисляющей направление движения робота. В VBA символ «'» – начало комментария.

Sub Направление(kr, kc, dr, dc)

'в точку kr, kc пришли по направлению dr, dc

'вычисляем направление следующего шага dr, dc

'применяем правило руки: правой левой

' Public kruk = +1 -1

' 1(-1 0) dr=+1 dc=0 234 432

' 2(0 -1) kr kc 4(0 +1) dr=-1 dc=0 412 214

' 3(+1 0) dr=0 dc=+1 341 143

' dr=0 dc=-1 123 321

'шли по строкам: вниз dr=+1 +1=234 -1=432

If dr <> 0 Then 'вверх dr=-1 +1=412 -1=214

If Можно(kr, kc, 0, -kruk * dr) Then

dc = - kruk * dr: dr = 0 'идем по столбцам

ElseIf Можно(kr, kc, dr, 0) Then

dc = 0 'идем по строкам в том же направлении

ElseIf Можно(kr, kc, 0, kruk * dr) Then

dc = kruk * dr: dr = 0 'идем по столбцам

Else 'тупик, идем по строкам в обратном направлении

dr = - dr: dc = 0

End If

'шли по столбцам: вправо dc=+1 +1=341 -1=143

Else 'влево dc=-1 +1=123 -1=321

If Можно(kr, kc, kruk * dc, 0) Then

dr = kruk * dc: dc = 0 'идем по строкам

ElseIf Можно(kr, kc, 0, dc) Then

dr = 0 'идем по столбцам в том же направлении

ElseIf Можно(kr, kc, - kruk * dc, 0) Then

dr = - kruk * dc: dc = 0 'идем по строкам

Else 'тупик, идем по столбцам в обратном направлении

dr = 0: dc = - dc

End If

End If

End Sub

Здесь логическая функция Можно(kr, kc, hr, hc) возвращает значение True (1, Истина), если в ячейке rng. Offset(kr+hr, kc+hc) фон Interior имеет цвет ColorIndex равный kss0 или Or kss1 или … kss5 , иначе возвращается значение False (0, Ложь).

Пример работы программы

VBA

Программа написана на языке VBA в табличном процессоре MS Excel. Язык программирования Visual Basic for Application построен на технологии классов и содержит визуальные компоненты. Он входит в состав большинства программных продуктов и используется для расширения их функциональных возможностей. То есть во всех современных приложениях язык VBA один, но разные объектные модели, разные библиотеки классов. Из-за этого кажется, что в приложениях разные языки программирования.

VBA имеет стандартный интерфейс среды программирования. В центре – окно кода, здесь пишется текст программы. Слева сверху – окно проекта, здесь представлены объекты проекта (нашего приложения). Слева снизу – окно свойств, здесь представлены значения свойств выделенного объекта в окне проекта или на пользовательской форме.

Написание программы «Программирование робота на макете VBA Excel» является хорошим учебным примером для изучения современных языков программирования.