function ShortNum(num: word; razr: integer): string;
const
hundreds: array [0..9] of string =
("", " сто", " двести", " триста",
" четыреста", " пятьсот", " шестьсот", " семьсот", " восемьсот",
" девятьсот");
tens: array [0..9] of string =
("", "", " двадцать", " тридцать",
" сорок", " пятьдесят", " шестьдесят", " семьдесят", " восемьдесят",
" девяносто");
ones: array [3..19] of string =
(" три", " четыре", " пять", " шесть",
" семь", " восемь", " девять", " десять", " одиннадцать",
" двенадцать", " тринадцать", " четырнадцать", " пятнадцать",
" шестнадцать", " семнадцать", " восемнадцать", " девятнадцать");
razryad: array [0..6] of string =
("", " тысяч", " миллион", " миллиард",
" триллион", " квадриллион", " квинтиллион");
var
t: byte; // десятки
o: byte; // единицы
begin
result := hundreds[num div 100];
if num = 0 then
Exit;
t := (num mod 100) div 10;
o := num mod 10;
if t <> 1 then
begin
result := result + tens[t];
case o of
1:
if razr = 1 then
result := result + " одна"
else
result := result + " один";
2:
if razr = 1 then
result := result + " две"
else
result := result + " два";
3..9:
result := result + ones[o];
end;
result := result + razryad[razr];
case o of
1:
if razr = 1 then
result := result + "а";
2..4:
if razr = 1 then
result := result + "и"
else
if razr > 1 then
result := result + "а";
else
if razr > 1 then
result := result + "ов";
end;
end
else
begin
result := result + ones[num mod 100];
result := result + razryad[razr];
if razr > 1 then
result := result + "ов";
end;
end;
function IntToWords(s: string): string;
var
i, count: integer;
begin
if (Length(s) <= 0) or (s = "0") then
begin
result := "ноль";
Exit;
end;
count := (Length(s) + 2) div 3;
if count > 7 then
begin
result := "Value is too large";
Exit;
end;
result := "";
s := "00" + s;
for i := 1 to count do
result := ShortNum(StrToInt(copy(s, Length(s) - 3 * i + 1, 3)),
i - 1) + result;
if Length(result) > 0 then
delete(result, 1, 1);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text := IntToWords(Edit1.Text);
end;
|