ROBO

  • Робот
    ROBO

В точке с координатами X,Y прямоугольного поля, ограниченного прямыми x=x1; x=x2 (x1<x2); y=y1, y=y2 (y1<y2) находится робот. Первоначально он направлен вдоль оси Y (вверх). Этот робот понимает и может исполнять команды следующего языка:

    (1) forward n - переместиться на n единиц в текущем направлении;
    (2)
    left n - повернуть налево на n градусов;
    (3)
    right n - повернуть направо на n градусов;
    (4)
    stop -- остановиться и завершить исполнение программы;
    (5)
    <пустая команда> - строка, в которой могут быть только пробелы (ноль или более) - ничего не делать
    (6)
    repeat n
                   
    <последовательность команд> 
        endrepeat - повторить n раз последовательность команд, где <последовательность команд> - это ноль или более команд (1) - (5);
    (7)
    еnd - конец программы. 

Параметр команды отделяется от служебного слова одним пробелом. В начале и в конце каждой строки может быть произвольное количество пробелов. В командах (1) - (3) число n - действительное, в команде (6) - натуральное. В каждой строке должна находиться одна команда.

Программа для робота - это последовательность команд (1) -(7), заканчивающаяся командой end. Все последующие строки игнорируются.

Составьте программу ROBO, которая:

  • проверяет соответствие текста программы правилам описанного языка;
      находит номер строки, содержащей синтаксическую ошибку;

  • определяет возможность исполнения программы на данном поле;

  • исполняет синтаксически правильную программу и вычисляет конечные координаты робота.

Технические условия:

Программа должна считывать данные из текстового файла ROBO.DAT, следующей структуры:

  • первая строка содержит два числа, разделенные пробелом - начальные координаты робота - X и Y;

  • вторая строка содержит четыре действительных числа x1, x2, y1, y2, разделенные пробелами;

  • каждая последующая строка содержит одну команду для робота.

Программа должна выводить результаты в текстовый файл ROBO.SOL, который состоит из 5 строк:

  • 1-я строка содержит число 0, если в тексте программы отсутствуют синтаксические ошибки, или код первой (по тексту) ошибки (целое число от 1 до 9)

  • 2-я строка содержит число 0, если в тексте программы отсутствуют синтаксические ошибки, или номер строки программы, в которой найдена первая синтаксическая ошибка

  • 3-я строка содержит номер строки программы, в которой возникает аварийная ситуация (попытка пересечения границ поля), или число 0, если аварийная ситуация не возникает либо текст программы содержит синтаксические ошибки;

  • в 4-й строке должно быть записано число 0, если аварийная ситуация не происходит, или одно из чисел x1, x2, y1, y2, соответствующее границе на которой произошла аварийная ситуация. В случае, если аварийная ситуация произошла при попытке пересечении угла поля, вывести сумму соответствующих чисел;

  • в 5-й строке должны быть записаны два числа, разделенные пробелом - конечные координаты робота Xk и Yk, определенные с точностью.

Примеры:

ROBO.DAT
1  1
-5  3  -7  8
LEFT  90
FORWARD  3.5
STOP
REPEAT  28
FORWARD  20
END REPEAT
END

ROBO.SOL
0
0
0
0
-2,500  1.000


Коды синтаксических ошибок:

0 - нет ошибок
1 - несуществующая команда
2 - отсутствует параметр
3 - лишний параметр
4 - недопустимый параметр
5 - отсутствует endrepeat
6 - отсутствует end
7 - лишние пробелы в команде
8 - пропущен repeat
9 - непредусмотренная ошибка