egogoboy

Ломоносов отбор 5

Nov 18th, 2022
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.21 KB | None | 0 0
  1. Сдать решение задачи 5-Римский Бармаглот
  2. Римский Бармаглот
  3. Компания Barmaley's Computing выпустила новый электронный вычислитель - Barmaglot-2. Поскольку у сотрудников компании несколько странные представления о технологиях, компьютер остался довольно непривычным.
  4.  
  5.  
  6. Во-первых, исходные данные он читает с ленты, где могут быть записаны целые числа и латинские буквы. Чтобы показать, что ввод данных закончен, ленту нужно просто оторвать.
  7.  
  8.  
  9. Во-вторых, результаты вычислений компьютер печатает на точно такой же ленте. Центральный процессор компьютера оснащён одним регистром; вместо оперативной памяти компьютер оснащён очередью и стеком неограниченного размера. Регистр, а также каждая ячейка очереди и стека могут содержать либо число, либо латинскую букву или пробел, либо специальное значение [BARMALEY], которое используется для обозначения логической лжи, при том что любое другое обозначает истину.
  10.  
  11.  
  12. Программа для Barmaglot'а представляет собой строку символов, каждый из которых задаёт машинную команду; программа, состоящая из символов-команд, выполняется последовательно слева направо, кроме двух команд, которые могут нарушить эту последовательность.
  13.  
  14.  
  15. Команды a, b, c и все остальные латинские буквы означают "занести данную букву в регистр".
  16. Команды 0, 1, ..., 9 означают "занести в регистр соответствующее число".
  17. Команда @ означает занести в регистр пробел.
  18.  
  19. Команды +, -, *, /, % означают соответствующие арифметические действия, операции целочисленные. % - операция взятия остатка
  20. Команды <, >, = означают сравнение двух чисел или двух символов, & и | означают логическое "и" и логическое "или";
  21. все эти команды используют значение из регистра в качестве левого операнда, значение с вершины стека в качестве правого (оно при этом из стека извлекается), результат заносится обратно в регистр.
  22.  
  23.  
  24. Команда # умножает содержимое регистра в десять раз,
  25. Команда _ делит содержимое регистра в десять раз.
  26. Команда ! работает как логическое отрицание содержимого регистра: если там значение [BARMALEY], то заносится значение 1, если любое другое - заносится значение [BARMALEY].
  27. Команда . выдаёт текущее значение регистра на печать
  28. команда ? вводит очередное число(целиком, а не по разрядам), а если на вводе кончилась (оборвалась) лента, заносит в регистра значение [BARMALEY].
  29. Команда ] заносит значение из регистра в стек;
  30. Команда [ извлекает значение с вершины стека и заносит его в регистра (если извлекать нечего, в регистр заносится [BARMALEY]);
  31. Команда ~ меняет местами значения в регистра и на вершине стека.
  32. Команда } заносит значение из регистра в очередь,
  33. Команда { извлекает из очереди самое старое значение и помещает в аккумулятор (или помещает туда [BARMALEY], если очередь пуста).
  34. Команды ( и ) предназначены для организации ветвлений и циклов и всегда должны в программе стоять парами, то есть в программе должен обязательно соблюдаться баланс круглых скобок. Выполняются они так. Команда (, если в регистре [BARMALEY], идёт по программе вперёд, пока не найдёт парную скобку, и после этого выполнение продолжится со следующей за этой закрывающей скобкой позиции; если в регистре было что-то другое, команда вообще ничего не делает, то есть выполнение продолжается прямо с команды, следующей за ней. Команда ), наоборот, если в регистре [BARMALEY], не делает ничего, тогда как если там что-то другое, просматривает программу назад до парной круглой скобки, после чего продолжает выполнение с команды, стоящей после такой скобки справа.
  35.  
  36. Наконец, команда " прекращает выполнение программы, при этом выполнение считается успешным. Если программа кончилась, не встретив эту команду, она завершается аварийно.
  37.  
  38.  
  39. Пробелы в программе игнорируются.
  40.  
  41.  
  42. Пример программы, которая печатает традиционную строчку “HELLO WORLD”:
  43.  
  44.  
  45.  
  46. В вашем распоряжении оказался эмулятор данного компьютера (http://ejudge.cs.msu.ru/barmaglot2/) и требуется написать для него программу, которая переведет введенное число X в десятичной системе счисления (1 ≤ X ≤ 100) в римскую систему счисления. Число в римской системе счисления записывается заглавными латинскими буквами.
  47.  
  48. Примеры
  49. Входные данные
  50. 38
  51. Результат работы
  52. XXXVIII
Tags: olimp
Advertisement
Add Comment
Please, Sign In to add comment