|  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 - непредусмотренная ошибка |