36 lines
962 B
Text
36 lines
962 B
Text
$ include "seed7_05.s7i";
|
|
|
|
const func integer: ROMAN parse (in string: roman) is func
|
|
result
|
|
var integer: arabic is 0;
|
|
local
|
|
var integer: index is 0;
|
|
var integer: number is 0;
|
|
var integer: lastval is 0;
|
|
begin
|
|
for index range length(roman) downto 1 do
|
|
case roman[index] of
|
|
when {'M', 'm'}: number := 1000;
|
|
when {'D', 'd'}: number := 500;
|
|
when {'C', 'c'}: number := 100;
|
|
when {'L', 'l'}: number := 50;
|
|
when {'X', 'x'}: number := 10;
|
|
when {'V', 'v'}: number := 5;
|
|
when {'I', 'i'}: number := 1;
|
|
otherwise: raise RANGE_ERROR;
|
|
end case;
|
|
if number < lastval then
|
|
arabic -:= number;
|
|
else
|
|
arabic +:= number;
|
|
end if;
|
|
lastval := number;
|
|
end for;
|
|
end func;
|
|
|
|
const proc: main is func
|
|
begin
|
|
writeln(ROMAN parse "MCMXC");
|
|
writeln(ROMAN parse "MMVIII");
|
|
writeln(ROMAN parse "MDCLXVI");
|
|
end func;
|