Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 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» является хорошим учебным примером для изучения современных языков программирования.


