Einzelnen Beitrag anzeigen
Alt 14.06.09, 15:16   #41 (permalink)
Lesco
Senior Member
 
Registriert seit: 03.09.05
Lesco Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Wenn ich wieder Unsinn gebaut habe: Über konstruktive Verbesserungsvorschläge freue ich mich immer!
Ich halte es für eine nicht so gute Idee, die Ausgabe mit in der Umwandlungsfunktion zu erledigen, da es dann keine "normale" Funktion mehr ist(Stattdessen hat sie dann als Rückgabetyp `IO String'), und du sie schlechter in anderen Berechnungen verwenden kannst. Stattdessen würde ich rome als Integer -> String umsetzen und die Ein/Ausgabe dann in main oder sonstwo erledigen.
Hier noch eine Variante in Haskell, die ich noch auf der Platte rumliegen hatte(keine Prüfung auf ungültige Eingaben):
Code:
import Data.List
import Data.Ord

digits = [("A",5000),("MA",4000),("M",1000),("CM",900),("D",500),("CD",400),("C",100),
          ("XC",90),("L",50),("XL",40),("X",10),("IX",9),("V",5),("IV",4),("I",1)]

toRoman 0 = ""
toRoman d = let match = head $ filter ((<=d) . snd) digits
            in fst match ++ (toRoman $ d - snd match)

toDec [] = 0
toDec str = let table = reverse $ sortBy (comparing (length . fst)) digits
                match = head $ filter ((`isPrefixOf` str) . fst) table
            in snd match + (toDec $ drop (length $ fst match) str)
Lesco ist offline   Mit Zitat antworten
 

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