Autor Beitrag
mathias
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 58
Erhaltene Danke: 3



BeitragVerfasst: So 16.06.02 15:05 
Um Zahlen in das Römische-Zahlenformation umzuwandeln (und zurück) kann man die beiden folgenden Funktionen benutzen:
ausblenden volle Höhe Delphi-Quelltext
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:
function DecToRoman (iDecimal: longint): string;
const
  aRomans: array [ 1..13 ] of string =
   ( 'I''IV''V''IX''X''XL''L''XC''C''CD''D''CM''M' );
  aArabics: array [ 1..13 ] of integer =
   ( 1459104050901004005009001000 );
var
  i : integer;
begin
  for i := 13 downto 1 do 
    while (iDecimal >= aArabics[i]) do 
      begin
        iDecimal := iDecimal - aArabics[i];
        Result   := Result   + aRomans[i];
      end;
end;

function RomanToDec (iRoman: string): integer;
const
  aRomans: array [ 1..13 ] of string =
   ( 'I''V''IV''X''IX''L''XL''C''XC''D''CD''M''CM' );
  aArabics: array [ 1..13 ] of integer =
   ( 1541095040100905004001000900 );
var
  i : integer;

  procedure ConvertDigit (var AText: stringvar IntRes: integer;
    const Rom: stringconst Arab: integer);
  var
    p : integer;
  begin
    for p := 1 to Length (AText) do 
      AText[p] := UpCase(AText[p]);

    Repeat
      p := Pos (Rom, AText);
      if P > 0 then begin
        inc (IntRes, Arab);
        Delete (AText, p, Length (Rom));
      end;
    until P=0;
  end;

begin
  Result := 0;
  for i := 13 downto 1 do 
    ConvertDigit (iRoman, Result, aRomans[i], aArabics[i]);
end;

Aufgerufen können die beiden Funktionen zum Beispiel wie folgt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption := DecToRoman (StrToInt (Edit1.Text));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Label2.Caption := IntToStr (RomanToDec (Edit2.Text));
end;
:)