Gladir.com - PL/1 - Histoire - Chiffre romain


Les chiffres romain bien que peut efficace sont très utilisés encore aujourd'hui pour numéroter des annexes, suite de films et des pages de prélude. Voici leur représentation classique:
Nombre Romain Nombre décimal Nombre octal Nombre hexadécimal
I 1 1 1
II 2 2 2
III 3 3 3
IV 4 4 4
V 5 5 5
VI 6 6 6
VII 7 7 7
VIII 8 10 8
IX 9 11 9
X 10 12 A
XI 11 13 B
XII 12 14 C
XIII 13 15 D
XIV 14 16 E
XV 15 17 F
... ... ... ...
Toutefois, il est a noter que les chiffres romain ne dépasse que de très peu les milliers en terme de numérotation. Pour pouvoir générer automatiquent les nombres à partir de l'équivalence numérique, vous trouverez la réponse que vous souhaitez, à l'aide du code source PL/1 suivant:
Corps: PROC options(main); 
    DCL (i) fixed;
    DO i = 1 to 100;
        display(i||' = '||Num2Rom(i));
    END;
 END Corps;

 Num2Rom: PROC(x) RETURNS (char(10) varying); 
     DCL (x) fixed;
     DCL (s) char(10) varying;
     s = '';
     SELECT (FLOOR(MOD(x,1000) / 100));
         when(9)
         DO;
          s=s||'CM';
            END;
         when(8)
            DO;
          s=s||'DCCC';
         END;
         when(7)
         DO;
          s=s||'DCC';
         END; 
         when(6)
         DO;
          s=s||'DC';
            END;
         when(5)
         DO;
          s=s||'D';
         END;
         when(4)
         DO;
          s=s||'CD';
         END;
         when(3)
         DO;
          s=s||'CCC';
         END;
         when(2)
         DO;
          s=s||'CC';
         END;
         when(1)
         DO;
          s=s||'C';
         END;
      Otherwise
         DO;
         END;
     END;
     SELECT(FLOOR(MOD(x,100) / 10));
         when(9)
         DO;
          s=s||'XC';
            END;
         when(8)
         DO;
          s=s||'LXXX';
            END;
         when(7)
         DO;
          s=s||'LXX';
         END;
         when(6)
         DO;
          s=s||'LX';
         END;
         when(5)
         DO;
          s=s||'L';
         END;
         when(4)
         DO;
          s=s||'XL';
         END;
         when(3)
         DO;
          s=s||'XXX';
         END;
         when(2)
         DO;
          s=s||'XX';
         END;
         when(1)
         DO;
          s=s||'X';
         END;
      Otherwise
         DO;
         END;
     END;
     SELECT(MOD(x,10));
         when(9)
         DO;
          s=s||'IX';
         END;
         when(8)
         DO;
          s=s||'VIII';
         END;
         when(7)
         DO;
          s=s||'VII';
         END;
         when(6)
         DO;
          s=s||'VI';
         END;
         when(5)
         DO;
          s=s||'V';
         END;
         when(4)
         DO;
          s=s||'IV';
         END;
         when(3)
         DO;
          s=s||'III';
         END;
         when(2)
         DO;
          s=s||'II';
         END;
         when(1)
         DO;
          s=s||'I';
         END;
      Otherwise
         DO;
         END;
     END;
     RETURN(s);
 END Num2Rom;
on obtiendra le résultat suivant:
1 = I
2 = II
3 = III
4 = IV
5 = V
6 = VI
7 = VII
8 = VIII
9 = IX
10 = X
11 = XI
12 = XII
13 = XIII
14 = XIV
15 = XV
16 = XVI
17 = XVII
18 = XVIII
19 = XIX
20 = XX
21 = XXI
22 = XXII
23 = XXIII
24 = XXIV
25 = XXV
26 = XXVI
27 = XXVII
28 = XXVIII
29 = XXIX
30 = XXX
31 = XXXI
32 = XXXII
33 = XXXIII
34 = XXXIV
35 = XXXV
36 = XXXVI
37 = XXXVII
38 = XXXVIII
39 = XXXIX
40 = XL
41 = XLI
42 = XLII
43 = XLIII
44 = XLIV
45 = XLV
46 = XLVI
47 = XLVII
48 = XLVIII
49 = XLIX
50 = L
51 = LI
52 = LII
53 = LIII
54 = LIV
55 = LV
56 = LVI
57 = LVII
58 = LVIII
59 = LIX
60 = LX
61 = LXI
62 = LXII
63 = LXIII
64 = LXIV
65 = LXV
66 = LXVI
67 = LXVII
68 = LXVIII
69 = LXIX
70 = LXX
71 = LXXI
72 = LXXII
73 = LXXIII
74 = LXXIV
75 = LXXV
76 = LXXVI
77 = LXXVII
78 = LXXVIII
79 = LXXIX
80 = LXXX
81 = LXXXI
82 = LXXXII
83 = LXXXIII
84 = LXXXIV
85 = LXXXV
86 = LXXXVI
87 = LXXXVII
88 = LXXXVIII
89 = LXXXIX
90 = XC
91 = XCI
92 = XCII
93 = XCIII
94 = XCIV
95 = XCV
96 = XCVI
97 = XCVII
98 = XCVIII
99 = XCIX
100 = C


Dernière mise à jour: Mardi, le 7 février 2006