46 lines
1.1 KiB
Plaintext
46 lines
1.1 KiB
Plaintext
BEGIN
|
|
|
|
INTEGER PROCEDURE FROMROMAN(S); TEXT S;
|
|
BEGIN
|
|
PROCEDURE P(INTVAL, NUM); INTEGER INTVAL; TEXT NUM;
|
|
BEGIN
|
|
INTEGER NLEN;
|
|
NLEN := NUM.LENGTH;
|
|
WHILE INDEX + NLEN - 1 <= SLEN AND THEN
|
|
S.SUB(INDEX, NLEN) = NUM DO
|
|
BEGIN
|
|
RESULT := RESULT + INTVAL;
|
|
INDEX := INDEX + NLEN;
|
|
END WHILE;
|
|
END P;
|
|
INTEGER RESULT, INDEX, SLEN;
|
|
SLEN := S.LENGTH;
|
|
INDEX := 1;
|
|
P( 1000, "M" );
|
|
P( 900, "CM" );
|
|
P( 500, "D" );
|
|
P( 400, "CD" );
|
|
P( 100, "C" );
|
|
P( 90, "XC" );
|
|
P( 50, "L" );
|
|
P( 40, "XL" );
|
|
P( 10, "X" );
|
|
P( 9, "IX" );
|
|
P( 5, "V" );
|
|
P( 4, "IV" );
|
|
P( 1, "I" );
|
|
FROMROMAN := RESULT;
|
|
END FROMROMAN;
|
|
|
|
TEXT T;
|
|
FOR T :- "MCMXC", "MMVIII", "MDCLXVI" DO
|
|
BEGIN
|
|
OUTTEXT("ROMAN """);
|
|
OUTTEXT(T);
|
|
OUTTEXT(""" => ");
|
|
OUTINT(FROMROMAN(T), 0);
|
|
OUTIMAGE;
|
|
END FOR;
|
|
|
|
END PROGRAM;
|