4. неделя

Super Karel rocks on

Более сложные алгоритмические задачи

Тема лабораторной

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

Цели

  1. Управлять роботом с помощью всех доступных сенсоров и команд.
  2. Использовать собственные функции, логические ветвления и циклы.
  3. Освоить работу с алгоритмическими задачами по сложности уровнем выше.

Инструкции

Шаг 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.

Дополнительные источники

  1. Karel Language Reference
  2. Here you can find the original library of Karel the Robot, including the library installation instructions.
  3. Rudolf Pecinovský: Základy algoritmizace - глава 10
  4. Pavel Herout: Učebnice jazyka C (1. díl) - главы 5.1, 5.4, 5.5
  5. Заголовочный файл робота Карла karel.h
  6. Заголовочный файл супер робота Карла superkarel.h
  7. Файл для компиляций программ для Карла Makefile
  8. Файл для компиляции программ для супер Карла Makefile-superkarel
  9. GNU Make Tutorial
  10. Наше руководство по VIM
  11. ViM Quick Reference Card (.pdf)
  12. Конфигурационный файл Томаша для ViM
  13. Конфигурационный файл Даниела для ViM

Видео