Roman numerals/Decode: Difference between revisions
Content added Content deleted
(RPL: add section) |
(Roman numerals/Decode in Chipmunk Basic, MSX Basic, GW-BASIC and XBasic) |
||
Line 1,141: | Line 1,141: | ||
MDCLXVI 1666 |
MDCLXVI 1666 |
||
MMMDCCCLXXXVIII 3888</pre> |
MMMDCCCLXXXVIII 3888</pre> |
||
==={{header|Chipmunk Basic}}=== |
|||
====Through IF-THEN statements==== |
|||
{{works with|Chipmunk Basic|3.6.4}} |
|||
{{works with|Applesoft BASIC}} |
|||
{{works with|MSX_BASIC}} |
|||
{{works with|QBasic}} |
|||
<syntaxhighlight lang="qbasic">100 cls : rem 100 home for Applesoft BASIC |
|||
110 roman$ = "MCMXCIX" : print roman$,"=> "; : gosub 170 : print decimal '1999 |
|||
120 roman$ = "XXV" : print roman$,"=> "; : gosub 170 : print decimal '25 |
|||
130 roman$ = "CMLIV" : print roman$,"=> "; : gosub 170 : print decimal '954 |
|||
140 roman$ = "MMXI" : print roman$,"=> "; : gosub 170 : print decimal '2011 |
|||
150 end |
|||
160 rem Decode from roman |
|||
170 decimal = 0 |
|||
180 predecimal = 0 |
|||
190 for i = len(roman$) to 1 step -1 |
|||
200 x$ = mid$(roman$,i,1) |
|||
210 if x$ = "M" then n = 1000 : goto 280 |
|||
220 if x$ = "D" then n = 500 : goto 280 |
|||
230 if x$ = "C" then n = 100 : goto 280 |
|||
240 if x$ = "L" then n = 50 : goto 280 |
|||
250 if x$ = "X" then n = 10 : goto 280 |
|||
260 if x$ = "V" then n = 5 : goto 280 |
|||
270 if x$ = "I" then n = 1 |
|||
280 if n < predecimal then decimal = decimal-n |
|||
285 if n >= predecimal then decimal = decimal+n |
|||
290 predecimal = n |
|||
300 next i |
|||
310 return</syntaxhighlight> |
|||
====Through SELECT CASE statement==== |
|||
{{works with|Chipmunk Basic|3.6.4}} |
|||
<syntaxhighlight lang="qbasic">100 cls |
|||
110 roman$ = "MCMXCIX" : print roman$,"=> "; : gosub 170 : print decimal '1999 |
|||
120 roman$ = "XXV" : print roman$,"=> "; : gosub 170 : print decimal '25 |
|||
130 roman$ = "CMLIV" : print roman$,"=> "; : gosub 170 : print decimal '954 |
|||
140 roman$ = "MMXI" : print roman$,"=> "; : gosub 170 : print decimal '2011 |
|||
150 end |
|||
160 rem Decode from roman |
|||
170 decimal = 0 |
|||
180 predecimal = 0 |
|||
190 for i = len(roman$) to 1 step -1 |
|||
200 x$ = mid$(roman$,i,1) |
|||
210 select case x$ |
|||
220 case "M" : n = 1000 |
|||
230 case "D" : n = 500 |
|||
240 case "C" : n = 100 |
|||
250 case "L" : n = 50 |
|||
260 case "X" : n = 10 |
|||
270 case "V" : n = 5 |
|||
280 case "I" : n = 1 |
|||
290 case else : print "not a roman numeral" : end |
|||
300 end select |
|||
310 if n < predecimal then decimal = decimal-n else decimal = decimal+n |
|||
320 predecimal = n |
|||
330 next i |
|||
340 return</syntaxhighlight> |
|||
==={{header|FreeBASIC}}=== |
==={{header|FreeBASIC}}=== |
||
Line 1,329: | Line 1,387: | ||
End</syntaxhighlight> |
End</syntaxhighlight> |
||
'''[http://www.cogier.com/gambas/Roman%20Numeral%20converter.png Click here for image of running code]''' |
'''[http://www.cogier.com/gambas/Roman%20Numeral%20converter.png Click here for image of running code]''' |
||
==={{header|GW-BASIC}}=== |
|||
The [[#Chipmunk_Basic|Chipmunk Basic]] [[#Through_IF-THEN_statements|through IF-THEN statements]] solution works without any changes. |
|||
==={{header|Liberty BASIC}}=== |
==={{header|Liberty BASIC}}=== |
||
Line 1,381: | Line 1,442: | ||
CMLIV = 954 |
CMLIV = 954 |
||
MMXI = 2011</pre> |
MMXI = 2011</pre> |
||
==={{header|MSX Basic}}=== |
|||
The [[#Chipmunk_Basic|Chipmunk Basic]] [[#Through_IF-THEN_statements|through IF-THEN statements]] solution works without any changes. |
|||
==={{header|PureBasic}}=== |
==={{header|PureBasic}}=== |
||
Line 1,671: | Line 1,735: | ||
PRINT "MMXI = "; romToDec("MMXI") !2011 |
PRINT "MMXI = "; romToDec("MMXI") !2011 |
||
END</syntaxhighlight> |
END</syntaxhighlight> |
||
==={{header|XBasic}}=== |
|||
{{works with|Windows XBasic}} |
|||
<syntaxhighlight lang="qbasic">PROGRAM "romandec" |
|||
VERSION "0.0000" |
|||
DECLARE FUNCTION Entry () |
|||
DECLARE FUNCTION romToDec (roman$) |
|||
FUNCTION Entry () |
|||
PRINT "MCMXCIX = "; romToDec("MCMXCIX") |
|||
PRINT "MDCLXVI = "; romToDec("MDCLXVI") |
|||
PRINT "XXV = "; romToDec("XXV") |
|||
PRINT "CMLIV = "; romToDec("CMLIV") |
|||
PRINT "MMXI = "; romToDec("MMXI") |
|||
END FUNCTION |
|||
FUNCTION romToDec (roman$) |
|||
num = 0 |
|||
prenum = 0 |
|||
FOR i = LEN(roman$) TO 1 STEP -1 |
|||
x$ = MID$(roman$, i, 1) |
|||
SELECT CASE x$ |
|||
CASE "M" : n = 1000 |
|||
CASE "D" : n = 500 |
|||
CASE "C" : n = 100 |
|||
CASE "L" : n = 50 |
|||
CASE "X" : n = 10 |
|||
CASE "V" : n = 5 |
|||
CASE "I" : n = 1 |
|||
END SELECT |
|||
IF n < prenum THEN num = num-n ELSE num = num+n |
|||
prenum = n |
|||
NEXT i |
|||
RETURN num |
|||
END FUNCTION |
|||
END PROGRAM</syntaxhighlight> |
|||
==={{header|Yabasic}}=== |
==={{header|Yabasic}}=== |