Autor Beitrag
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mo 18.09.06 14:40 
hi, ich habe eben einen Algorithmus zum Umwandeln von Römischen Zahlen in Dezimalzahlen geschrieben, was kann ich da noch dran optimieren ?
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:
49:
function RomanToDec(iRoman: string): integer;
const
  aRomans: array [1..7of string = ('I''V''X''L''C''D''M');
  aArabics: array [1..7of integer = (1510501005001000);
var
  i, j, k, l: integer;
  addition: boolean;
begin
//Bei einer Länge von 1
  if length(iRoman) = 1 then
  for i := 7 downto 1 do
    if aRomans[i] = iRoman[1then
    begin
      result := aArabics[i];
      exit;
    end;
//
  result := 0;
//Schleife, beginnend bei Stringende bis 2
  i := length(iRoman);
  while i > 1 do
  begin
    //Wert an der Stelle i ermitteln
    for j := 1 to 7 do
      if (aRomans[j] = iRoman[i]) then
      begin
        addition := false;
        //Prüfen ob ein kleinerer Wert vorrausgeht
        for k := 1 to 7 do
          if (aRomans[k] = iRoman[i-1]) then
            if (aArabics[k] < aArabics[j]) then
            begin
              //Berechnung
              result := result + (aArabics[j] - aArabics[k]);
              addition := true;
              dec(i);
            end;
        //Berechnung, falls kein kleinerer Wert vorangegangen ist
        if addition = false then
          result := result + aArabics[j];
        //Berechnung der ersten Stelle  
        if (i = 2then
          for l := 7 downto 1 do
            if aRomans[l] = iRoman[1then
              result := result + aArabics[l];
      end;
    dec(i);
  end;
end;


mfg
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Mo 18.09.06 15:28 
So wie es aussieht geht's auch ohne 3-fache Schleife. Einige andere Sources zum Vergleich:
www.koders.com/?s=ro...%3Ala=*&_%3Ali=*