-
Notifications
You must be signed in to change notification settings - Fork 0
/
rman_to_decimal.f95
79 lines (67 loc) · 1.54 KB
/
rman_to_decimal.f95
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
!THIS PROGRAM FINDING THE DECIMAL EQUIVALENT OF A ROMAN NUMBER
!I=1,II=2,III=3,IV=4,V=5,VI=6,VII=7,VIII=8,IX=9,X=10,XL=40,L=50,XC=90,C=100
!CM=900,M=1000,V_BAR=5000,X_BAR=10000,C_BAR=100000,M_BAR=1000000;;XLIV==44;LXXXII=82
PROGRAM ROM_TO_DEC
IMPLICIT NONE
INTEGER::DEC=0,I,J,L,DIG(1:10),BIG_DIG=0,BIG_POS
CHARACTER(LEN=10)::ROM,ROM_DIG
INTEGER::ROMAN_DIGIT
!INITIALISE ALL DIGIT TO ZERO
DO I=1,10
DIG(I)=0
END DO
PRINT *,"ENTER A ROMAN NUMBER"
READ 10,ROM
10 FORMAT(A10)
ROM=TRIM(ROM)
L=LEN_TRIM(ROM)!this is trimming for any space
!NOW FINDOUT THE DIGIT OF ROMAN NUMBER
DO I=1,L
ROM_DIG=ROM(I:I)
DIG(I)=ROMAN_DIGIT(ROM_DIG)
IF(DIG(I)>BIG_DIG)THEN
BIG_DIG=DIG(I)
BIG_POS=I
ENDIF
END DO
DO I=1,L
IF(I<BIG_POS)THEN
DEC=DEC-DIG(I)
ELSE
DEC=DEC+DIG(I)
ENDIF
END DO
PRINT 100,DEC
100 FORMAT(2X,"DECIMAL EQUIVALENT NUMBER IS:",I4)
END PROGRAM ROM_TO_DEC
INTEGER FUNCTION ROMAN_DIGIT(N)
IMPLICIT NONE
CHARACTER(LEN=1),INTENT(IN)::N
! SELECT CASE(N)
! CASE("I")
! ROMAN_DIGIT=1
! CASE("V")
! ROMAN_DIGIT=5
! CASE("X")
! ROMAN_DIGIT=10
! CASE("L")
! ROMAN_DIGIT=50
! CASE("C") !this function finding each digit of roman number into decimal equivalent number
! ROMAN_DIGIT=100
! CASE("M")
! ROMAN_DIGIT=1000
! END SELECT
IF(N=="I" .OR. N=="i")THEN
ROMAN_DIGIT=1
ELSEIF(N=="V" .OR. N=="v")THEN
ROMAN_DIGIT=5
ELSEIF(N=="X" .OR. N=="x")THEN
ROMAN_DIGIT=10
ELSEIF(N=="L" .OR. N=="l")THEN
ROMAN_DIGIT=50
ELSEIF(N=="C" .OR. N=="c")THEN
ROMAN_DIGIT=100
ELSEIF(N=="M" .OR. N=="m")THEN
ROMAN_DIGIT=1000
ENDIF
END FUNCTION ROMAN_DIGIT