41 lines
789 B
Plaintext
41 lines
789 B
Plaintext
DEFINE PTR="CARD"
|
|
CARD ARRAY arabic=[1000 900 500 400 100 90 50 40 10 9 5 4 1]
|
|
PTR ARRAY roman(13)
|
|
|
|
PROC InitRoman()
|
|
roman(0)="M" roman(1)="CM" roman(2)="D" roman(3)="CD"
|
|
roman(4)="C" roman(5)="XC" roman(6)="L" roman(7)="XL"
|
|
roman(8)="X" roman(9)="IX" roman(10)="V" roman(11)="IV" roman(12)="I"
|
|
RETURN
|
|
|
|
PROC EncodeRomanNumber(CARD n CHAR ARRAY res)
|
|
BYTE i,len
|
|
CHAR ARRAY tmp
|
|
|
|
res(0)=0 len=0
|
|
FOR i=0 TO 12
|
|
DO
|
|
WHILE arabic(i)<=n
|
|
DO
|
|
tmp=roman(i)
|
|
SAssign(res,tmp,len+1,len+1+tmp(0))
|
|
len==+tmp(0)
|
|
n==-arabic(i)
|
|
OD
|
|
OD
|
|
res(0)=len
|
|
RETURN
|
|
|
|
PROC Main()
|
|
CARD ARRAY data=[1990 2008 5555 1666 3888 3999]
|
|
BYTE i
|
|
CHAR ARRAY r(20)
|
|
|
|
InitRoman()
|
|
FOR i=0 TO 5
|
|
DO
|
|
EncodeRomanNumber(data(i),r)
|
|
PrintF("%U=%S%E",data(i),r)
|
|
OD
|
|
RETURN
|