Тема лабораторной
И на этой лабораторной вы будете продолжать свою работы с роботом Карлом. Вы напишете более сложные программы, благодаря которым у вас выйдет решать, соответственно, более сложные алгоритмические задачи для робота.
Цели
- Управлять роботом с помощью всех доступных сенсоров и команд.
- Использовать собственные функции, логические ветвления и циклы.
- Освоить работу с алгоритмическими задачами по сложности уровнем выше.
Инструкции
Шаг 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