Тема лабораторной
И на этой лабораторной вы будете продолжать свою работы с роботом Карлом. Вы напишете более сложные программы, благодаря которым у вас выйдет решать, соответственно, более сложные алгоритмические задачи для робота.
Цели
- Управлять роботом с помощью всех доступных сенсоров и команд.
- Использовать собственные функции, логические ветвления и циклы.
- Освоить работу с алгоритмическими задачами по сложности уровнем выше.
Инструкции
Шаг 1: Setup
Задача 1.1
Создайте каталог ~/labs/lab04
и скопируйте файл, необходимый для компиляции программы: Makefile
.
Задача 1.2
Файл Makefile
вы можете найти в директориях с прошлых занятий ~/labs/lab02
или ~/labs/lab03
. Его затем нужно скопировать в каталог ~/labs/lab04
.
Шаг 2: Collector
В этой программе робот будет заниматься сбором значков.
Задача 2.1
Напишите код для программы collector
, в которой Карл будет собирать значки по всей карте, там, где только их найдет. Код протестируйте на карте collector.kw.
Начальная позиция
CORNER FACING BEEP-BAG BEEP-CORNER
(1, 1) EAST 0 3
ST.+---------------+
5 | 2 . 2 . |
| |
4 | . . . 3 |
| |
3 | . 1 . . |
| |
2 | . . 2 3 |
| |
1 | > . 2 . |
+---------------+
1 2 3 4 AVE.
Конечная позиция
CORNER FACING BEEP-BAG BEEP-CORNER
(4, 5) NORTH 18 0
ST.+---------------+
5 | . . . ^ |
| |
4 | . . . . |
| |
3 | . . . . |
| |
2 | . . . . |
| |
1 | . . . . |
+---------------+
1 2 3 4 AVE.
Задача 2.2
Измените код collector
так, чтобы Карл начал сбор значков с левого нижнего угла мира. Мир для тестирования: collector2.kw.
Шаг 3: Multiplier
На этом этапе Карл будет удваивать количество значков.
Задача 3.1
Напишите код для программы multiplier
, в которой Карл будет увеличивать количество значков в два раза на соответствующих местах. Конечно же, не забывайте: переменные использовать нельзя! Решение протестируйте: multiplier.kw.
Начальная позиция
CORNER FACING BEEP-BAG BEEP-CORNER
(1, 1) EAST 99 0
ST.+-------------------+
5 | . 4 . . . |
| |
4 | 4 . . . . |
| |
3 | . 3 . . 1 |
| |
2 | . . . . . |
| |
1 | > 1 . 2 . |
+-------------------+
1 2 3 4 5 AVE.
Конечная позиция
CORNER FACING BEEP-BAG BEEP-CORNER
(1, 1) EAST 84 0
ST.+-------------------+
5 | . 8 . . . |
| |
4 | 8 . . . . |
| |
3 | . 6 . . 2 |
| |
2 | . . . . . |
| |
1 | > 2 . 4 . |
+-------------------+
1 2 3 4 5 AVE.
Дополнительные задачи
Задача A.1
Напишите код для программы highway
, благодаря которой Карл пройдет путь с востока на запад и заполнит по пути все дыры разной глубины. Заполнять нужно только те места, которые еще не заполнены. Код протестируйте: highway.kw.
Начальная позиция
CORNER FACING BEEP-BAG BEEP-CORNER
(1, 4) EAST 99 0
ST.+-----------------------------------+
6 | . . . . . . . . . |
| |
5 | . . . . . . . . . |
| |
4 | > . . . . . . . . |
| + +---+ + +---+ + +---|
3 | . | 1 | . | . | . | . | . | 1 | . |
| | | +---+ | | | | |
2 | . | 1 | . . | 1 | . | 1 | . | . |
| +---+ | | +---+ | |
1 | . | . . . | . | . . | . | . |
+-----------------------------------+
1 2 3 4 5 6 7 8 9 AVE.
Конечная позиция
CORNER FACING BEEP-BAG BEEP-CORNER
(9, 4) EAST 90 0
ST.+-----------------------------------+
6 | . . . . . . . . . |
| |
5 | . . . . . . . . . |
| |
4 | . . . . . . . . > |
| + +---+ + +---+ + +---|
3 | 1 | 1 | . | 1 | 1 | . | 1 | 1 | . |
| | | +---+ | | | | |
2 | 1 | 1 | . . | 1 | . | 1 | 1 | . |
| +---+ | | +---+ | |
1 | 1 | . . . | 1 | . . | 1 | . |
+-----------------------------------+
1 2 3 4 5 6 7 8 9 AVE.
Задача A.2
Измените код highway
таким образом, чтобы Карл мог начинать свой путь с любого края его пути. В начале движения Карл будет повёрнут на открытый путь. Таким образом, Карл сможет двигать и с запада на восток, и с востока на запад. Код тестируйте на карте highway2.kw.
Начальная позиция
CORNER FACING BEEP-BAG BEEP-CORNER
(8, 4) WEST 99 0
ST.+-------------------------------+
4 | . . . . . . . < |
| + +---+ +---+ +-------|
3 | . | 1 | . | . | . | 1 | . . |
| +---+ | | | | |
2 | . | . . | . | . | . | . . |
| | +---+ | | |
1 | 1 | . . . . | . | . . |
+-------------------------------+
1 2 3 4 5 6 7 8 AVE.
Конечная позиция
CORNER FACING BEEP-BAG BEEP-CORNER
(1, 4) WEST 93 0
ST.+-------------------------------+
4 | < . . . . . . . |
| + +---+ +---+ +-------|
3 | 1 | 1 | . | 1 | . | 1 | . . |
| +---+ | | | | |
2 | 1 | . . | 1 | . | 1 | . . |
| | +---+ | | |
1 | 1 | . . . . | 1 | . . |
+-------------------------------+
1 2 3 4 5 6 7 8 AVE.
Задача A.3
Карл очнулся в другом мире, мире, в котором все вверх ногами. Протестируйте код highway
на карте, в которой все также вверх ногами. Если нужно, подправьте код. Карты: highway3.kw, highway4.kw.
Начальная позиция
CORNER FACING BEEP-BAG BEEP-CORNER
(1, 3) EAST 99 0
ST.+-----------------------------------+
6 | . | . . . | . | . . | . | . |
| +---+ | | +---+ | |
5 | . | 1 | . . | 1 | . | 1 | . | . |
| | | +---+ | | | | |
4 | . | 1 | . | . | . | . | . | 1 | . |
| +---+ +---+ +---|
3 | > . . . . . . . . |
| |
2 | . . . . . . . . . |
| |
1 | . . . . . . . . . |
+-----------------------------------+
1 2 3 4 5 6 7 8 9 AVE.
Конечная позиция
CORNER FACING BEEP-BAG BEEP-CORNER
(9, 3) EAST 90 0
ST.+-----------------------------------+
6 | 1 | . . . | 1 | . . | 1 | . |
| +---+ | | +---+ | |
5 | 1 | 1 | . . | 1 | . | 1 | 1 | . |
| | | +---+ | | | | |
4 | 1 | 1 | . | 1 | 1 | . | 1 | 1 | . |
| +---+ +---+ +---|
3 | . . . . . . . . > |
| |
2 | . . . . . . . . . |
| |
1 | . . . . . . . . . |
+-----------------------------------+
1 2 3 4 5 6 7 8 9 AVE.
Дополнительные источники
- Karel Language Reference
- Here you can find the original library of Karel the Robot, including the library installation instructions.
- Rudolf Pecinovský: Základy algoritmizace - глава 10
- Pavel Herout: Učebnice jazyka C (1. díl) - главы 5.1, 5.4, 5.5
- Заголовочный файл робота Карла karel.h
- Заголовочный файл супер робота Карла superkarel.h
- Файл для компиляций программ для Карла Makefile
- Файл для компиляции программ для супер Карла Makefile-superkarel
- GNU Make Tutorial
- Наше руководство по VIM
- ViM Quick Reference Card (.pdf)
- Конфигурационный файл Томаша для ViM
- Конфигурационный файл Даниела для ViM