• Lenguaje

    Pascal

  • Descripción

    Pide un número romano y lo convierte a notación arábiga

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
program prog_arabigo;
uses crt;

const romanos : array[0..3,0..8] of string = (
    ('M', 'MM', 'MMM',   '',  '',   '',    '',     '',   ''),
    ('C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM'),
    ('X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'),
    ('I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX')
);
var arabigo, i, j, tamano, multiplo : integer;
var original, romano : string;
var tecla : char;

begin
    arabigo := 0;
    multiplo := 1000;
    write ('Ingrese un n'#163'mero romano: ');
    readln (original);
    for i:=1 to length (original) do
        original[i] := upcase (original[i]);
    romano := original;
    for i:=0 to 3 do
        begin
            if i = 0 then
                j := 2
            else
                j := 8;
            while j>=0 do
                begin
                    tamano := length (romanos[i][j]);
                    if romanos[i][j] = copy (romano, 1, tamano) then
                        begin
                            arabigo := arabigo + (j + 1) * multiplo;
                            romano := copy (romano, tamano+1, length (romano));
                            j := 0;
                        end;
                    dec (j);
                end;
            multiplo := multiplo div 10;
        end;
    if length (romano) = 0 then
        writeln (#10#13, original, ' = ', arabigo)
    else
        writeln (#10#13'El n'#163'mero romano ''', original, ''' es incorrecto.');
    write (#10#13'Presione una tecla para terminar . . . ');
    tecla := readkey;
end.