You are not logged in.

  • Login

1

Friday, June 15th 2007, 10:29pm

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:

Quoted


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.

2

Friday, June 15th 2007, 11:08pm

Ich habe das mal gemacht:

Delphi Quellcode

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
62
63
64
65
66
67
{
#Einlesen der Römerzahl
}
function TForm1.fromRoem(): Integer;
var
  tmp, rest: String;
  erster, zweiter: Integer;
begin
  Result := 0;
  rest := Edit_Roem.Text;
  zweiter := RoemV(rest[1]);
  //Zeichen ist keine Ziffer der Römerzahlen
  if zweiter = -1 then
  begin
    Result := -1;
    exit;
  end;
  //Rest wird um das zeichen gekürzt
  rest := Copy(rest, 2, Length(rest)-1);
  while length(rest) <> 0 do
  begin
    erster := zweiter;
    zweiter := RoemV(rest[1]);
    if zweiter = -1 then
    begin
      Result := -1;
      exit;
    end;
    rest := Copy(rest, 2, Length(rest)-1);
 
    //fals die Zweite Zahl größer als die erste ist kommt die Substraktionsregel zum tragen
    if zweiter > erster then
    begin
      Result := Result + (zweiter - erster);
      //Da beide Zeichen "Verbraucht" wurden muss schon hier wieder eines eingelesen werden
      if length(rest) <> 0 then
      begin
        zweiter := RoemV(rest[1]);
        if zweiter = -1 then
        begin
          Result := -1;
          exit;
        end;
        rest := Copy(rest, 2, Length(rest)-1);
      end
      else zweiter := 0;
    end
    //Da die Substraktionsregel nicht gilt wird normal verfahren
    else Result := Result + erster;
  end;
  Result := Result + zweiter;
end;
 
{
#Hilfsfunktion, die den Wert einer Stelle im Römersystem ermmittelt
}
function TForm1.RoemV(inp: String): Integer;
begin
  if inp = 'M' then Result := 1000
  else if inp = 'D' then Result := 500
  else if inp = 'C' then Result := 100
  else if inp = 'L' then Result := 50
  else if inp = 'X' then Result := 10
  else if inp = 'V' then Result := 5
  else if inp = 'I' then Result := 1
  else Result := -1;
end;

3

Saturday, June 16th 2007, 6:06pm

Danke dir für die schnelle und gute Hilfe !!!!!! :!: :!: :)

4

Saturday, June 16th 2007, 8:29pm

kein Problem ;) :D

Social bookmarks