Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Сдать решение задачи 5-Римский Бармаглот
- Римский Бармаглот
- Компания Barmaley's Computing выпустила новый электронный вычислитель - Barmaglot-2. Поскольку у сотрудников компании несколько странные представления о технологиях, компьютер остался довольно непривычным.
- Во-первых, исходные данные он читает с ленты, где могут быть записаны целые числа и латинские буквы. Чтобы показать, что ввод данных закончен, ленту нужно просто оторвать.
- Во-вторых, результаты вычислений компьютер печатает на точно такой же ленте. Центральный процессор компьютера оснащён одним регистром; вместо оперативной памяти компьютер оснащён очередью и стеком неограниченного размера. Регистр, а также каждая ячейка очереди и стека могут содержать либо число, либо латинскую букву или пробел, либо специальное значение [BARMALEY], которое используется для обозначения логической лжи, при том что любое другое обозначает истину.
- Программа для Barmaglot'а представляет собой строку символов, каждый из которых задаёт машинную команду; программа, состоящая из символов-команд, выполняется последовательно слева направо, кроме двух команд, которые могут нарушить эту последовательность.
- Команды a, b, c и все остальные латинские буквы означают "занести данную букву в регистр".
- Команды 0, 1, ..., 9 означают "занести в регистр соответствующее число".
- Команда @ означает занести в регистр пробел.
- Команды +, -, *, /, % означают соответствующие арифметические действия, операции целочисленные. % - операция взятия остатка
- Команды <, >, = означают сравнение двух чисел или двух символов, & и | означают логическое "и" и логическое "или";
- все эти команды используют значение из регистра в качестве левого операнда, значение с вершины стека в качестве правого (оно при этом из стека извлекается), результат заносится обратно в регистр.
- Команда # умножает содержимое регистра в десять раз,
- Команда _ делит содержимое регистра в десять раз.
- Команда ! работает как логическое отрицание содержимого регистра: если там значение [BARMALEY], то заносится значение 1, если любое другое - заносится значение [BARMALEY].
- Команда . выдаёт текущее значение регистра на печать
- команда ? вводит очередное число(целиком, а не по разрядам), а если на вводе кончилась (оборвалась) лента, заносит в регистра значение [BARMALEY].
- Команда ] заносит значение из регистра в стек;
- Команда [ извлекает значение с вершины стека и заносит его в регистра (если извлекать нечего, в регистр заносится [BARMALEY]);
- Команда ~ меняет местами значения в регистра и на вершине стека.
- Команда } заносит значение из регистра в очередь,
- Команда { извлекает из очереди самое старое значение и помещает в аккумулятор (или помещает туда [BARMALEY], если очередь пуста).
- Команды ( и ) предназначены для организации ветвлений и циклов и всегда должны в программе стоять парами, то есть в программе должен обязательно соблюдаться баланс круглых скобок. Выполняются они так. Команда (, если в регистре [BARMALEY], идёт по программе вперёд, пока не найдёт парную скобку, и после этого выполнение продолжится со следующей за этой закрывающей скобкой позиции; если в регистре было что-то другое, команда вообще ничего не делает, то есть выполнение продолжается прямо с команды, следующей за ней. Команда ), наоборот, если в регистре [BARMALEY], не делает ничего, тогда как если там что-то другое, просматривает программу назад до парной круглой скобки, после чего продолжает выполнение с команды, стоящей после такой скобки справа.
- Наконец, команда " прекращает выполнение программы, при этом выполнение считается успешным. Если программа кончилась, не встретив эту команду, она завершается аварийно.
- Пробелы в программе игнорируются.
- Пример программы, которая печатает традиционную строчку “HELLO WORLD”:
- В вашем распоряжении оказался эмулятор данного компьютера (http://ejudge.cs.msu.ru/barmaglot2/) и требуется написать для него программу, которая переведет введенное число X в десятичной системе счисления (1 ≤ X ≤ 100) в римскую систему счисления. Число в римской системе счисления записывается заглавными латинскими буквами.
- Примеры
- Входные данные
- 38
- Результат работы
- XXXVIII
Advertisement
Add Comment
Please, Sign In to add comment