hp41programs

Roman Roman Numerals for the HP-41
 

Overview
 

-Roman numerals use the following equivalences:                       M = 1000 ; D = 500 ; C = 100 ; L = 50 ; X = 10 ; V = 5 ; I = 1
-These letters are sorted in decreasing order
 and the numerical values are added, for instance:                       MCCXV = 1000 + 100 + 100 + 10 + 5 = 1215
-However, if a smaller numeral appears before a larger one,
  it must be subtracted instead of added, for example:                 XC = -10 + 100 = 90   ;    MCMXLIV =  1000 - 100 + 1000 - 10 + 50 - 1 + 5 = 1944
-These 2 rules are used in the following conversion programs.
 

1°)  Arabic Numerals  >>>  Roman Numerals
 

Data Registers: /
Flags: /
Subroutines: /

-The append character is denoted  ~
 
 

01  LBL "A-R"
02  " "      
03  LBL 01
04   E3
05  X>Y?
06  GTO 00
07  -
08  "~M"   
09  GTO 01
10  LBL 00
11  CLX
12  900
13  X<=Y?
14  "~CM" 
15  X>Y?
16  CLX
17  -
18  500
19  X<=Y?
20  "~D"   
21  X>Y?
22  CLX
23  -
24  400
25  X<=Y?
26  "~CD"   
27  X>Y?
28  CLX
29  -
30  LBL 02
31   E2
32  X>Y?
33  GTO 00    
34  -
35  "~C"   
36  GTO 02
37  LBL 00
38  CLX
39  90
40  X<=Y?
41  "~XC" 
42  X>Y?
43  CLX
44  -
45  50
46  X<=Y?
47  "~L"   
48  X>Y?
49  CLX
50  -
51  40
52  X<=Y?
53  "~XL"  
54  X>Y?
55  CLX
56  -
57  LBL 03     
58  10
59  X>Y?
60  GTO 00
61  -
62  "~X"
63  GTO 03    
64  LBL 00
65  DSE X
66  X<=Y?
67  "~IX" 
68  X>Y?
69  CLX
70  -
71  5
72  X<=Y?
73  "~V"  
74  X>Y?
75  CLX
76  -
77  4
78  X<=Y?
79  "~IV"   
80  X>Y?
81  CLX
82  -
83  LBL 04
84  1
85  X>Y?
86  GTO 00    
87  -
88  "~I"  
89  GTO 04
90  LBL 00
91  AVIEW
92  END

 
   ( 154 bytes / SIZE 000 )
 
 

      STACK        INPUTS      OUTPUTS
           X        Number             /

 
Examples:

    1444   XEQ "A-R"  >>>>   MCDXLIV                            ( in 3 seconds )
    4888         R/S         >>>>   MMMMDCCCLXXXVIII    ( in 9 seconds )
    2345         R/S         >>>>   MMCCCXLV                       ( in 4 seconds )
 

-The result is in the alpha register and it is displayed line 91.
 

2°)  Roman Numerals  >>>  Arabic Numerals    ( X-Functions Module required )
 

Data Registers: /
Flags: /
Subroutines: /
 
 

01  LBL "R-A"
02  CLST
03  *
04  LBL 01
05  ATOX
06  X=0?
07  GTO 09
08  77
09  X=Y?
10  GTO 02
11  DSE X
12  X=Y?
13  GTO 03
14  CLX
15  68
16  X=Y?
17  GTO 04   
18  DSE X
19  X=Y?
20  GTO 05
21  CLX
22  88
23  X=Y?
24  GTO 06
25  CLX
26  86
27  X=Y?
28  GTO 07
29  CLX
30  73
31  X#Y?
32  CLX
33  X#0?
34  SIGN
35  ENTER^
36  GTO 08   
37  LBL 02
38   E3
39  GTO 08
40  LBL 03
41  50
42  GTO 08
43  LBL 04
44  500
45  GTO 08
46  LBL 05
47   E2
48  GTO 08   
49  LBL 06
50  10
51  GTO 08
52  LBL 07
53  5
54  LBL 08
55  R^
56  X<>Y
57  LASTX
58  X<Y?
59  X<0?
60  CLX
61  ST+ X
62  ST- Z
63  RDN
64  +
65  GTO 01   
66  LBL 09
67  X<>Y
68  END

 
    ( 106 bytes / SIZE 000 )
 
 

      STACK        INPUTS      OUTPUTS
           X              /        Number

 
Examples:

    [ alpha ]   MMMMDCCCLXXXVIII   [ alpha ]   XEQ "R-A"  >>>>  4888   ( in 16 seconds )
    [ alpha ]   MCDXLIV  [ alpha ]                                    R/S       >>>>  1444   ( in 7 seconds )
    [ alpha ]   MMCCCXLV  [ alpha ]                               R/S       >>>>  2345   ( in 8 seconds )
 

-If the alpha string contains other symbols, they will be neglected ( = zero )
-When the program stops, the alpha register is cleared.
-Here is a shorter & faster version of this program:
 
 

01  LBL "R-A"
02  CLST
03  LBL 01
04  ATOX
05  X=0?
06  GTO 00
07  RDN
08  XEQ IND T
09  X<>Y
10  X<Y?
11  CHS
12  ST+ Z
13  RDN
14  GTO 01       
15  LBL 77
16   E3
17  RTN
18  LBL 68
19  500
20  RTN
21  LBL 67       
22   E2
23  RTN
24  LBL 76
25  50
26  RTN
27  LBL 88
28  10
29  RTN
30  LBL 86       
31  5
32  RTN
33  LBL 73
34  1
35  RTN
36  LBL 00       
37  +
38  +
39  END       

 
   ( 65 bytes / SIZE 000 )
 
 

      STACK        INPUTS      OUTPUTS
           X              /        Number

 
Examples:

    [ alpha ]   MMMMDCCCLXXXVIII   [ alpha ]   XEQ "R-A"  >>>>  4888   ( in 9 seconds )
    [ alpha ]   MCDXLIV  [ alpha ]                                    R/S       >>>>  1444   ( in 4 seconds )
    [ alpha ]   MMCCCXLV  [ alpha ]                               R/S       >>>>  2345   ( in 5 seconds )

Note:

-Here, there will be a NONEXISTENT message if the alpha register contains other characters.