Römische Zahlen
Verfasst: 08.11.2008 20:00
Kleiner Codeschnipsel, um dezimal Zahlen in römische Zahlen zu konvertieren und umgekehrt.
Dieser Schnipsel benötigt PB4.30 oder neuer.
Code: Alles auswählen
Procedure.s RomDec(dec.l)
Protected i.b, j.l, max.b, ind.w, num.w, chr.w, rom.s
Restore RomNum : Read.b max
For i = 1 To max
Read.w ind : Read.w num : Read.w chr
For j = 1 To Round((dec / num), #PB_Round_Down)
rom + Chr(chr)
Next : dec % num
Next
ProcedureReturn rom
EndProcedure
Procedure.l DecRom(rom.s)
Protected i.b, j.w, max.b, ind.w, num.w, chr.w, dec.l
Restore RomNum : Read.b max
For i = 1 To max
Read.w ind : Read.w num : Read.w chr
For j = 0 To Len(rom)-1
If PeekC(@rom+j) = chr : PokeC(@rom+j, ind)
If j And PeekC(@rom+(j-1)) < ind : dec - num
Else : dec + num : EndIf
EndIf
Next
Next
ProcedureReturn dec
EndProcedure
DataSection
RomNum:
Data.b 7 ; Total
Data.w 7, 1000, 'M'
Data.w 6, 500, 'D'
Data.w 5, 100, 'C'
Data.w 4, 50, 'L'
Data.w 3, 10, 'X'
Data.w 2, 5, 'V'
Data.w 1, 1, 'I'
EndDataSection
r.s = RomDec(1949)
d.l = DecRom(r)
Debug d
Debug r