Römische Zahlen
Hier mein Versuch:
- Das 5000er Zeichen habe ich nicht berücksichtigt!
- Die römische Zahl wird nicht auf Korrektheit überprüft!
- Falsche Zeichen in der römischen Zahl werden ignoriert!
cu, guido
Code: Alles auswählen
EnableExplicit
Procedure.s Dec2Rom(Dec.i)
Protected Rom.s = ""
Protected stepDec.i = 1000
While stepDec
If Dec >= stepDec
Select stepDec
Case 1000 : Rom + "M"
Case 900 : Rom + "CM"
Case 500 : Rom + "D"
Case 400 : Rom + "CD"
Case 100 : Rom + "C"
Case 90 : Rom + "XC"
Case 50 : Rom + "L"
Case 40 : Rom + "XL"
Case 10 : Rom + "X"
Case 9 : Rom + "IX"
Case 5 : Rom + "V"
Case 4 : Rom + "IV"
Case 1 : Rom + "I"
EndSelect
Dec - stepDec
Else
Select stepDec
Case 1000 : stepDec = 900
Case 900 : stepDec = 500
Case 500 : stepDec = 400
Case 400 : stepDec = 100
Case 100 : stepDec = 90
Case 90 : stepDec = 50
Case 50 : stepDec = 40
Case 40 : stepDec = 10
Case 10 : stepDec = 9
Case 9 : stepDec = 5
Case 5 : stepDec = 4
Case 4 : stepDec = 1
Case 1 : stepDec = 0
EndSelect
EndIf
Wend
ProcedureReturn Rom
EndProcedure
Procedure.i Rom2Dec(Rom.s)
Protected Dec.i = 0
Protected cut.i
Rom = UCase(Rom)
While Rom <> ""
If Left(Rom,1) = "M" : Dec + 1000 : cut = 1
ElseIf Left(Rom,2) = "CM" : Dec + 900 : cut = 2
ElseIf Left(Rom,1) = "D" : Dec + 500 : cut = 1
ElseIf Left(Rom,2) = "CD" : Dec + 400 : cut = 2
ElseIf Left(Rom,1) = "C" : Dec + 100 : cut = 1
ElseIf Left(Rom,2) = "XC" : Dec + 90 : cut = 2
ElseIf Left(Rom,1) = "L" : Dec + 50 : cut = 1
ElseIf Left(Rom,2) = "XL" : Dec + 40 : cut = 2
ElseIf Left(Rom,1) = "X" : Dec + 10 : cut = 1
ElseIf Left(Rom,2) = "IX" : Dec + 9 : cut = 2
ElseIf Left(Rom,1) = "V" : Dec + 5 : cut = 1
ElseIf Left(Rom,2) = "IV" : Dec + 4 : cut = 2
ElseIf Left(Rom,1) = "I" : Dec + 1 : cut = 1
Else : cut = 1
EndIf
Rom = Right(Rom, Len(Rom)-cut)
Wend
ProcedureReturn Dec
EndProcedure
Define rom.s
Macro TEST(__number__)
rom = Dec2Rom(__number__)
Debug Str(__number__) + " => " + rom + " => " + Str(Rom2Dec(rom))
EndMacro
TEST(1)
TEST(2)
TEST(3)
TEST(4)
TEST(5)
TEST(6)
TEST(9)
TEST(10)
TEST(11)
TEST(14)
TEST(19)
TEST(20)
TEST(1984)
TEST(1780)
TEST(1799)
TEST(1497)
- Die römische Zahl wird nicht auf Korrektheit überprüft!
- Falsche Zeichen in der römischen Zahl werden ignoriert!
cu, guido
Windows 10
PB Last Final / (Sometimes testing Beta versions)
PB Last Final / (Sometimes testing Beta versions)
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22