Autor Beitrag
mak1991
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Di 01.11.11 02:05 
Hallo,
also ich soll ein programm entwickeln das das kann.

hier mal meine function:
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:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
function zahlrtoa(zahl1: string): string;
var
  buchstaben: array [1 .. 13of string;
  zahlen: array [1 .. 13of integer;
  x, y: byte;
  zahl: cardinal;
begin
  zahlen[1] := 1000;
  zahlen[2] := 900;
  zahlen[3] := 500;
  zahlen[4] := 400;
  zahlen[5] := 100;
  zahlen[6] := 90;
  zahlen[7] := 50;
  zahlen[8] := 40;
  zahlen[9] := 10;
  zahlen[10] := 9;
  zahlen[11] := 5;
  zahlen[12] := 4;
  zahlen[13] := 1;
  buchstaben[1] := 'M';
  buchstaben[2] := 'CM';
  buchstaben[3] := 'D';
  buchstaben[4] := 'CD';
  buchstaben[5] := 'C';
  buchstaben[6] := 'XC';
  buchstaben[7] := 'L';
  buchstaben[8] := 'XL';
  buchstaben[9] := 'X';
  buchstaben[10] := 'IX';
  buchstaben[11] := 'V';
  buchstaben[12] := 'IV';
  buchstaben[13] := 'I';
  x := 0;
  zahl := 0;
  repeat
    inc(x);
    repeat
      if (pos(buchstaben[x], zahl1) <> 0and (pos(buchstaben[x + 1], zahl1) = 0)
      then
      begin
        y := pos(buchstaben[x], zahl1);
        zahl := zahl + zahlen[x];
        delete(zahl1, y, 1);
      end
      else
      begin
        repeat
          inc(x);
          y := pos(buchstaben[x], zahl1);
          zahl := zahl + zahlen[x];
          delete(zahl1, y, length(buchstaben[x]));
          dec(x)
        until pos(buchstaben[x], zahl1) = 0;
      end;
    until pos(buchstaben[x], zahl1) = 0;
  until zahl1 = '';
  zahlrtoa := inttostr(zahl);
end;

nehmen wir einfach die zahl: MCMLXII sollte 1962 raus kommen doch es kommt 3110 raus :(


Moderiert von user profile iconMartok: Topic aus VCL (Visual Component Library) verschoben am Di 01.11.2011 um 07:04
Moderiert von user profile iconNarses: Zusätzliche Quote-Tags entfernt.
Teekeks
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 211
Erhaltene Danke: 23



BeitragVerfasst: Di 01.11.11 09:20 
Das liegt daran dass du nicht auswertest ob nach einem Buchstaben (bei dir z.B. C) nicht noch ein höherwertiger kommt (also M) wodurch das C und M nicht einfach hinzu addiert werden dürfen, sondern du den wert von M-C dazu addieren musst.
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: Di 01.11.11 12:56 
Die Umwandlung kannst du gut mit einer Schleife lösen: Dazu gehst du die römische Zahl von rechts nach links durch. Ist an der aktuellen Stelle ein Zeichen mit Wert größer oder gleich dem zuletzt gelesenen, wird der Wert zur Gesamtsumme hinzuaddiert, andernfalls subtrahiert. Versteht sich von selbst, dass die Zahl ganz rechts immer hinzuaddiert wird ;)