Перевод целого числа 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
Листинг программы
%                       ASCII код
%   1       5       10      50      100     500     1000
%   I       V       X       L       C       D       M   
%   73      86      88      76      67      68      77
add([], E, [E]).
add([H|T], E, [E,H|T]).
 
p(X, _) :- X<=0, !.
 
p(X, Y) :- X<4, X1 is X-1, p(X1, Y1), add(Y1, 73, Y).
p(X, Y) :- X=4, add([86], 73, Y), !.
p(X, Y) :- X=5, add(Y, 86, []), !.
p(X, Y) :- X<9, X1 is X-5, p(X1, Y1), add(Y1, 86, Y).
p(X, Y) :- X=9, add([88], 73, Y), !.
 
p(X, Y) :- X<40, X1 is X-10, p(X1, Y1), add(Y1, 88, Y).
p(X, Y) :- X<50, X1 is X-40, p(X1, Y1), add(Y1, 76, Y2), add(Y2, 88, Y).
p(X, Y) :- X<90, X1 is X-50, p(X1, Y1), add(Y1, 76, Y).
 
p(X, Y) :- X<100, X1 is X-90, p(X1, Y1), add(Y1, 67, Y2), add(Y2, 88, Y).
p(X, Y) :- X<400, X1 is X-100, p(X1, Y1), add(Y1, 67, Y).
p(X, Y) :- X<500, X1 is X-400, p(X1, Y1), add(Y1, 68, Y2), add(Y2, 67, Y).
p(X, Y) :- X<900, X1 is X-500, p(X1, Y1), add(Y1, 68, Y).
 
p(X, Y) :- X<1000, X1 is X-900, p(X1, Y1), add(Y1, 77, Y2), add(Y2, 67, Y).
p(X, Y) :- X<4000, X1 is X-1000, p(X1, Y1), add(Y1, 77, Y).
 
f(X, Y) :- p(X, Z), name(Y, Z).

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

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

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


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

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

7   голосов , оценка 4 из 5
Похожие ответы