Römische Zahlen in arabische Umrechnen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Römische Zahlen in arabische Umrechnen

    So ich wende mich an euch nach langen Versuchen^^ Leider hat bisher nichts geklappt bzw. das was ich habe Funktioniert nur sehr schlecht /mangelhaft.
    Hier mal mein Quelltext:

    procedure TForm1.BitBtn1Click(Sender: TObject);
    var ZKette:String;
    DZahl,j:Integer;
    begin
    DZahl:=0;
    ZKette:=Edit1.Text;
    for j:=1 to Length(ZKette) do
    begin
    Case (ZKette[j]) of
    'a' : DZahl:=DZahl +5000;
    'm' : DZahl:=DZahl +1000;
    'd' : DZahl:=DZahl +500;
    'c' : DZahl:=DZahl +100;
    'l' : DZahl:=DZahl +50;
    'x' : DZahl:=DZahl +10;
    'v' : DZahl:=DZahl +5;
    'i' : DZahl:=DZahl +1;
    end;



    Edit2.Text:=FloatToStr(DZahl);

    end;
    end;


    Leider kann ich Zahlen wie ix (also 9) nicht ausrechnen lassen, weil dann immer 11 als ergebnis angezeigt wird. Wär cool wenn mir da wer heflen kann.
  • Ich habe das mal gemacht:

    Quellcode

    1. {
    2. #Einlesen der Römerzahl
    3. }
    4. function TForm1.fromRoem(): Integer;
    5. var
    6. tmp, rest: String;
    7. erster, zweiter: Integer;
    8. begin
    9. Result := 0;
    10. rest := Edit_Roem.Text;
    11. zweiter := RoemV(rest[1]);
    12. //Zeichen ist keine Ziffer der Römerzahlen
    13. if zweiter = -1 then
    14. begin
    15. Result := -1;
    16. exit;
    17. end;
    18. //Rest wird um das zeichen gekürzt
    19. rest := Copy(rest, 2, Length(rest)-1);
    20. while length(rest) <> 0 do
    21. begin
    22. erster := zweiter;
    23. zweiter := RoemV(rest[1]);
    24. if zweiter = -1 then
    25. begin
    26. Result := -1;
    27. exit;
    28. end;
    29. rest := Copy(rest, 2, Length(rest)-1);
    30. //fals die Zweite Zahl größer als die erste ist kommt die Substraktionsregel zum tragen
    31. if zweiter > erster then
    32. begin
    33. Result := Result + (zweiter - erster);
    34. //Da beide Zeichen "Verbraucht" wurden muss schon hier wieder eines eingelesen werden
    35. if length(rest) <> 0 then
    36. begin
    37. zweiter := RoemV(rest[1]);
    38. if zweiter = -1 then
    39. begin
    40. Result := -1;
    41. exit;
    42. end;
    43. rest := Copy(rest, 2, Length(rest)-1);
    44. end
    45. else zweiter := 0;
    46. end
    47. //Da die Substraktionsregel nicht gilt wird normal verfahren
    48. else Result := Result + erster;
    49. end;
    50. Result := Result + zweiter;
    51. end;
    52. {
    53. #Hilfsfunktion, die den Wert einer Stelle im Römersystem ermmittelt
    54. }
    55. function TForm1.RoemV(inp: String): Integer;
    56. begin
    57. if inp = 'M' then Result := 1000
    58. else if inp = 'D' then Result := 500
    59. else if inp = 'C' then Result := 100
    60. else if inp = 'L' then Result := 50
    61. else if inp = 'X' then Result := 10
    62. else if inp = 'V' then Result := 5
    63. else if inp = 'I' then Result := 1
    64. else Result := -1;
    65. end;
    Alles anzeigen
    There are only 10 types of people in the world: Those who understand binary, and those who don't.

    Download meines ersten Spiels:HIER
    Über Feedback würde ich mich freuen ;)