Em um novo projeto, adicione ao formulário um componente Edit, um Button e um Label, um abaixo ao outro nesta ordem. Agora vá no source do projeto e declare a seguinte função que fará a conversão dos valores:
function TForm1.DecimalToRomano(Decimal: Longint): string;
const
Numeros: array[1..13] of Integer =
(1, 4, 5, 9, 10, 40, 50, 90, 100,
400, 500, 900, 1000);
Romanos: 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 >= Numeros[i]) do
begin
Decimal := Decimal - Numeros[i];
Result := Result + Romanos[i];
end;
end;
Nesta função temos duas constantes (listas de Strings) que armazenam os valores do tipo decimal e o valor a ela correspondente. Em seguida, o sistema entra num laço, que de acordo com a quantidade de números vai realizando a substituição do número decimal pelo algarismo romano. Para chamar a rotina, adicione ao evento OnClick do botão o código a seguir, que irá jogar o resultado da função para o componente Label. Como parâmetro passamos à função o número decimal digitado no Edit.
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption := DecimalToRomano(StrToInt(Edit1.Text))
end;
Para garantir que o usuário digite apenas números no Edit e não letras, vamos adicionar uma validação de caracteres ao evento KeyPress do Edit, conforme código que segue:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['1'..'9',#8]) then
abort;
end;

Codificado todo o sistema, compile e execute o projeto e realize a conversão dos números. Abraço.
Um comentário:
Show de bola....
Postar um comentário