Перевод целого числа N из диапазона от 1 до 2000 в запись с римскими цифрами - Prolog

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Помогите решить задачу или поделитесь какими-нибудь идеями. Заранее спасибо! Для представления римских цифр используются символы: I - один, V - пять, X - десять, L - пятьдесят, C - сто, D - пятьсот, M - тысяча. Для изображения числа с помощью римских цифр используются общеизвестные правила; так, например, 482 - CDLXXXII, 1999 - MCMXCIX. . Напишите предикат p(+N, ?R), который переводит целое число N из диапазона от 1 до 2000 в запись с римскими цифрами; например, ?– p(482, Y). Y=’CDLXXXII’ Yes Используйте предикат name/2.

Решение задачи: «Перевод целого числа N из диапазона от 1 до 2000 в запись с римскими цифрами»

textual
Листинг программы
  1. %                       ASCII код
  2. %   1       5       10      50      100     500     1000
  3. %   I       V       X       L       C       D       M  
  4. %   73      86      88      76      67      68      77
  5. add([], E, [E]).
  6. add([H|T], E, [E,H|T]).
  7.  
  8. p(X, _) :- X<=0, !.
  9.  
  10. p(X, Y) :- X<4, X1 is X-1, p(X1, Y1), add(Y1, 73, Y).
  11. p(X, Y) :- X=4, add([86], 73, Y), !.
  12. p(X, Y) :- X=5, add(Y, 86, []), !.
  13. p(X, Y) :- X<9, X1 is X-5, p(X1, Y1), add(Y1, 86, Y).
  14. p(X, Y) :- X=9, add([88], 73, Y), !.
  15.  
  16. p(X, Y) :- X<40, X1 is X-10, p(X1, Y1), add(Y1, 88, Y).
  17. p(X, Y) :- X<50, X1 is X-40, p(X1, Y1), add(Y1, 76, Y2), add(Y2, 88, Y).
  18. p(X, Y) :- X<90, X1 is X-50, p(X1, Y1), add(Y1, 76, Y).
  19.  
  20. p(X, Y) :- X<100, X1 is X-90, p(X1, Y1), add(Y1, 67, Y2), add(Y2, 88, Y).
  21. p(X, Y) :- X<400, X1 is X-100, p(X1, Y1), add(Y1, 67, Y).
  22. p(X, Y) :- X<500, X1 is X-400, p(X1, Y1), add(Y1, 68, Y2), add(Y2, 67, Y).
  23. p(X, Y) :- X<900, X1 is X-500, p(X1, Y1), add(Y1, 68, Y).
  24.  
  25. p(X, Y) :- X<1000, X1 is X-900, p(X1, Y1), add(Y1, 77, Y2), add(Y2, 67, Y).
  26. p(X, Y) :- X<4000, X1 is X-1000, p(X1, Y1), add(Y1, 77, Y).
  27.  
  28. f(X, Y) :- p(X, Z), name(Y, Z).

Объяснение кода листинга программы

В этом коде используется Предикат add, который добавляет символ в начало списка. Если список пуст, то добавляется символ и список остаётся пустым. Если список не пуст, то символ добавляется в начало списка, а сам список (без изменений) помещается в список результатов. Также в коде используется Предикат p, который перебирает диапазон чисел от 1 до 2000 (с шагом 5) и применяет Предикат add для перевода числа в римскую систему счисления. Для чисел меньше 4-х и кратных 4-м применяются специальные правила перевода. Функция f применяет Предикат p для перевода числа в римскую систему счисления, а затем применяет Предикат name для получения имени числа в римской системе счисления.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы