Roman numerals/Decode: Difference between revisions
Content added Content deleted
Not a robot (talk | contribs) (Add Modula-2) |
(Added solution for Action!) |
||
Line 237: | Line 237: | ||
bufdef: db 16,0 |
bufdef: db 16,0 |
||
buf: ds 17</lang> |
buf: ds 17</lang> |
||
=={{header|Action!}}== |
|||
<lang Action!>CARD FUNC DecodeRomanDigit(CHAR c) |
|||
IF c='I THEN RETURN (1) |
|||
ELSEIF c='V THEN RETURN (5) |
|||
ELSEIF c='X THEN RETURN (10) |
|||
ELSEIF c='L THEN RETURN (50) |
|||
ELSEIF c='C THEN RETURN (100) |
|||
ELSEIF c='D THEN RETURN (500) |
|||
ELSEIF c='M THEN RETURN (1000) |
|||
FI |
|||
RETURN (0) |
|||
CARD FUNC DecodeRomanNumber(CHAR ARRAY s) |
|||
CARD res,curr,prev |
|||
BYTE i |
|||
res=0 prev=0 i=s(0) |
|||
WHILE i>0 |
|||
DO |
|||
curr=DecodeRomanDigit(s(i)) |
|||
IF curr<prev THEN |
|||
res==-curr |
|||
ELSE |
|||
res==+curr |
|||
FI |
|||
prev=curr |
|||
i==-1 |
|||
OD |
|||
RETURN (res) |
|||
PROC Test(CHAR ARRAY s) |
|||
CARD n |
|||
n=DecodeRomanNumber(s) |
|||
PrintF("%S=%U%E",s,n) |
|||
RETURN |
|||
PROC Main() |
|||
Test("MCMXC") |
|||
Test("MMVIII") |
|||
Test("MDCLXVI") |
|||
Test("MMMDCCCLXXXVIII") |
|||
Test("MMMCMXCIX") |
|||
RETURN</lang> |
|||
{{out}} |
|||
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Roman_numerals_decode.png Screenshot from Atari 8-bit computer] |
|||
<pre> |
|||
MCMXC=1990 |
|||
MMVIII=2008 |
|||
MDCLXVI=1666 |
|||
MMMDCCCLXXXVIII=3888 |
|||
MMMCMXCIX=3999 |
|||
</pre> |
|||
=={{header|Ada}}== |
=={{header|Ada}}== |