Bueno con este algoritmo se pueden convertir los números arábigos a números romanos en el lenguaje de common lisp
(defun romano ()
(let ((A nil))
(loop
(cond
;; Regla (a)
((null A) (format t "Teclea un numero entero: " ) (setq A (read)))
;; Regla (b)
((and (not (null A)) (> A 100))
(format t "Numero demasiado grande" ) (setq A nil))
;;Regla (c)
((and (not (null A)) (>= A 40) (<= A 49) )
(prin1 'xL) (setq A (- A 40)) )
;;Regla (d)
((and (not (null A)) (>= A 49) (<= A 89) )
(prin1 'l) (setq A (- A 50)) )
;;Regla (d)
((and (not (null A)) ( = A 100) (>= a 100))
(prin1 'c) (setq A (- A 100)) )
;;Regla (e)
((and (not (null A)) (>= A 89) (<= A 100) )
(prin1 'XC) (setq A (- A 90)) )
;; Regla (f)
((and (not (null A)) (<= A 100) (>= A 10))
(prin1 'X) (setq A (- A 10)) )
;; Regla (g)
((and (not (null A)) (= A 9))
(prin1 'ix) (setq A 0) )
;; Regla (h)
((and (not (null A)) (>= A 5) (<= 10))
(prin1 'v) (setq A (- A 5)) )
;; Regla (i)
((and (not (null A)) (= A 4))
(prin1 'iv) (setq A 0) )
;; Regla (j)
((and (not (null A)) (<= A 3) (>= A 1))
(prin1 'i) (setq A (1- A)) )
;; Regla (k)
((zerop a) (setq a nil) (terpri))
))))
bueno solo tienes que copiar el algoritmo y lo ejecutas de la siguiente manera:
primero abres el interprete que quieras en mi caso es GNU CLISP
después copias el texto
luego te vas a al intérprete y pegas el código de la siguiente manera
cuando ya se haya copiado le das enter y mandas a llamar a la función escribiendo (romano)
por ultimo les va aparecer "teclea un numero entero" que es el que van a convertir y en la parte de abajo les va a aparecer el numero ya convertido a romano.
y bueno ya está el programa
(defun romano ()
(let ((A nil))
(loop
(cond
;; Regla (a)
((null A) (format t "Teclea un numero entero: " ) (setq A (read)))
;; Regla (b)
((and (not (null A)) (> A 100))
(format t "Numero demasiado grande" ) (setq A nil))
;;Regla (c)
((and (not (null A)) (>= A 40) (<= A 49) )
(prin1 'xL) (setq A (- A 40)) )
;;Regla (d)
((and (not (null A)) (>= A 49) (<= A 89) )
(prin1 'l) (setq A (- A 50)) )
;;Regla (d)
((and (not (null A)) ( = A 100) (>= a 100))
(prin1 'c) (setq A (- A 100)) )
;;Regla (e)
((and (not (null A)) (>= A 89) (<= A 100) )
(prin1 'XC) (setq A (- A 90)) )
;; Regla (f)
((and (not (null A)) (<= A 100) (>= A 10))
(prin1 'X) (setq A (- A 10)) )
;; Regla (g)
((and (not (null A)) (= A 9))
(prin1 'ix) (setq A 0) )
;; Regla (h)
((and (not (null A)) (>= A 5) (<= 10))
(prin1 'v) (setq A (- A 5)) )
;; Regla (i)
((and (not (null A)) (= A 4))
(prin1 'iv) (setq A 0) )
;; Regla (j)
((and (not (null A)) (<= A 3) (>= A 1))
(prin1 'i) (setq A (1- A)) )
;; Regla (k)
((zerop a) (setq a nil) (terpri))
))))
bueno solo tienes que copiar el algoritmo y lo ejecutas de la siguiente manera:
primero abres el interprete que quieras en mi caso es GNU CLISP
después copias el texto
luego te vas a al intérprete y pegas el código de la siguiente manera
cuando ya se haya copiado le das enter y mandas a llamar a la función escribiendo (romano)
por ultimo les va aparecer "teclea un numero entero" que es el que van a convertir y en la parte de abajo les va a aparecer el numero ya convertido a romano.
y bueno ya está el programa

