49 lines
1.3 KiB
Plaintext
49 lines
1.3 KiB
Plaintext
Main:
|
|
!------------------------------------------------
|
|
! CALLS THE romToDec FUNCTION WITH THE ROMAN
|
|
! NUMERALS AND RETURNS ITS DECIMAL EQUIVELENT.
|
|
!
|
|
|
|
PRINT "MCMXC = "; romToDec("MCMXC") !1990
|
|
PRINT "MMVIII = "; romToDec("MMVIII") !2008
|
|
PRINT "MDCLXVI = "; romToDec("MDCLXVI") !1666
|
|
PRINT:PRINT
|
|
PRINT "Here are other solutions not from the TASK:"
|
|
PRINT "MCMXCIX = "; romToDec("MCMXCIX") !1999
|
|
PRINT "XXV = "; romToDec("XXV") !25
|
|
PRINT "CMLIV = "; romToDec("CMLIV") !954
|
|
PRINT "MMXI = "; romToDec("MMXI") !2011
|
|
PRINT:PRINT
|
|
PRINT "Without error checking, this also is 2011, but is wrong"
|
|
PRINT "MMIIIX = "; romToDec("MMIIIX") !INVAID, 2011
|
|
|
|
STOP
|
|
|
|
|
|
FUNCTION romToDec(roman AS STRING) AS INTEGER
|
|
!------------------------------------------------------
|
|
! FUNCTION THAT CONVERTS ANY ROMAN NUMERAL TO A DECIMAL
|
|
!
|
|
prenum=0!num=0
|
|
ln=LEN(roman)
|
|
FOR i=ln TO 1 STEP -1
|
|
x$=MID(roman,i,1)
|
|
n=1000
|
|
SELECT CASE x$
|
|
CASE "M":n=n/1
|
|
CASE "D":n=n/2
|
|
CASE "C":n=n/10
|
|
CASE "L":n=n/20
|
|
CASE "X":n=n/100
|
|
CASE "V":n=n/200
|
|
CASE "I":n=n/n
|
|
CASE ELSE:n=0
|
|
END SELECT
|
|
IF n < preNum THEN num=num-n ELSE num=num+n
|
|
preNum=n
|
|
next i
|
|
|
|
romToDec=num
|
|
|
|
END FUNCTION
|