Avatar billede lsc Nybegynder
17. oktober 2005 - 18:26 Der er 6 kommentarer og
2 løsninger

Funktion til beregning af romertal

Er der nogle der ligger inde med en gennerel funktion til konvertering fra integer til romertal?

Altså:

function romertal(t : integer) : string;
begin
{ kode }
end;
Avatar billede jpvj Nybegynder
17. oktober 2005 - 18:29 #1
Avatar billede snowball Novice
17. oktober 2005 - 18:31 #2
function DecToRoman(Decimal: Longint): string;
const
  Numbers: array[1..13] of Integer =
    (1, 4, 5, 9, 10, 40, 50, 90, 100,
    400, 500, 900, 1000);
  Romans: array[1..13] of string =
    ('I', 'IV', 'V', 'IX', 'X', 'XL',
    'L', 'XC', 'C', 'CD', 'D', 'CM', 'M');
var
  i: Integer;
begin
  Result := '';
  for i := 13 downto 1 do
    while (Decimal >= Numbers[i]) do
    begin
      Decimal := Decimal - Numbers[i];
      Result  := Result + Romans[i];
    end;
end;


//Example:
//Beispiel:

procedure TForm1.Button1Click(Sender: TObject);
begin
  label1.Caption := DecToRoman(5);
  Label2.Caption := DecToRoman(458);
end;
Avatar billede lsc Nybegynder
17. oktober 2005 - 18:43 #3
Det må jeg nok sige - sikke et hurtigt svar.

Jeg takker mange gange.

/lsc
17. oktober 2005 - 19:25 #4
Nu skriver lsc jo godt nok en generel rutine.
Den, af snowball, beskrevne er meget generel, den viser i pricippet romertal der er læselige, men ikke nødvendigvis de rigtige.
Hvis man skriver DecToRoman(1999) får man MCMXCIC (M for 1000, CM for 900, XC for 90 og IC for 9).
Istedet for det korrekte MIM (M for 1000 og IM for 999).
Avatar billede doc404 Novice
17. oktober 2005 - 22:20 #5
anton:

Jeg vil ikke mene det er korrekt det du skriver. MIM er 2001.

Se fodnote 3 her:
http://www2.inetdirect.net/~charta/Roman_numerals.html
Avatar billede lsc Nybegynder
18. oktober 2005 - 10:42 #6
Her fik jeg nok sat en debat igang.
I følge doo404's fodnote, ser det ud til at fortolkningen af romertal har ændret sig gennem tiderne. (Det er måske en af mange grunde til at man normalt ikke bruger dem mere).
Snowball's funktion er simpel og elegant, så den vil jeg foreløbig holde mig til.
Mange tak for interessen til alle.

/lsc
Avatar billede vejmand Juniormester
18. oktober 2005 - 10:56 #7
anton >> 1999 = MCMXCIX
doc404 >> 2001 = MMI

Kilde: http://www.saack.dk/romertal.shtml
18. oktober 2005 - 21:43 #8
Men dog, men dog. Her gik jeg og troede at jeg havde forstand på romertal, men man lærer jo (heldigvis) imens man lever.
Jeg siger tak til doc404 for linket.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester