![]() |
![]() ![]() ![]() ![]() |
|
Перевод целого неотрицательного числа из строкового представления в прописноеDelphi , Синтаксис , Преобразования
Автор: Александр
{ **** UBPFD *********** by delphibase.endimus.com ****
>>
дык выше было, не попавшее туда будет в примере
примечание: код легко расширяется как на знак входных данных так и на диапазон
Зависимости: ничего сверхестественного
Автор: Александр
Copyright: default
Дата: 14 февраля 2004 г.
***************************************************** }
const
Mas1: array['0'..'9', 1..3] of string =
(('', '', ''),
('сто ', '', 'один '),
('двести ', 'двадцать ', 'два '),
('триста ', 'тридцать ', 'три '),
('четыреста ', 'сорок ', 'четыре '),
('пятьсот ', 'пятьдесят ', 'пять '),
('шестьсот ', 'шестьдесят ', 'шесть '),
('семьсот ', 'семьдесят ', 'семь '),
('восемьсот ', 'восемьдесят ', 'восемь '),
('девятьсот ', 'девяносто ', 'девять '));
Mas2: array['0'..'9'] of string =
('десять ', 'одиннадцать ', 'двенадцать ', 'тринадцать ',
'четырнадцать ', 'пятнадцать ', 'шестнадцать ', 'семнадцать ',
'восемнадцать ', 'девятнадцать ');
Mas3: array['1'..'2'] of string = ('одна ', 'две ');
Mas4: array['0'..'9', 1..4] of string =
(('', 'тысяч ', 'миллионов ', 'миллиардов '),
('', 'тысяча ', 'миллион ', 'миллиард '),
('', 'тысячи ', 'миллиона ', 'миллиарда '),
('', 'тысячи ', 'миллиона ', 'миллиарда '),
('', 'тысячи ', 'миллиона ', 'миллиарда '),
('', 'тысяч ', 'миллионов ', 'миллиардов '),
('', 'тысяч ', 'миллионов ', 'миллиардов '),
('', 'тысяч ', 'миллионов ', 'миллиардов '),
('', 'тысяч ', 'миллионов ', 'миллиардов '),
('', 'тысяч ', 'миллионов ', 'миллиардов '));
function GetRepresentationInWords(S: string): string;
var
i: Byte;
Str: PChar;
begin
Result := '';
if S = '' then
Exit;
for i := 1 to Length(S) do
if S[i] <> '0' then
Break;
if i = Length(S) + 1 then
begin
Result := 'Ноль';
Exit
end;
Str := @S[1];
while Length(S) mod 3 <> 0 do
Insert('0', S, 1);
for i := Length(S) div 3 downto 1 do
begin
if (Str[0] = '0') and (Str[1] = '0') and (Str[2] = '0') then
begin
Inc(Str, 3);
Continue;
end;
Result := Result + Mas1[Str[0], 1];
if Str[1] = '1' then
Result := Result + Mas2[Str[2]] + Mas4['0', i]
else
begin
Result := Result + Mas1[Str[1], 2];
if (i = 2) and (Str[2] in ['1'..'2']) then
Result := Result + Mas3[Str[2]]
else
Result := Result + Mas1[Str[2], 3];
Result := Result + Mas4[Str[2], i];
end;
Inc(Str, 3)
end;
SetLength(Result, Length(Result) - 1)
end;
Пример использования: Memo1.Lines.Text := GetRepresentationInWords(IntToStr(High(Cardinal))); Перевод контента на русский язык: Программа Delphi конвертирует целое число в его словесное представление, используя четыре массива Описание работы кода:
Пример использования в конце кода показывает, как использовать эту функцию для конвертации наибольшего возможного кардинального числа ( Альтернативное решение с использованием рекурсивных функций и более элегантной подхода: В этом коде используются два вспомогательных функции В статье описывается алгоритм перевода целого неотрицательного числа из строкового представления в прописное. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш :: Главная :: Преобразования ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 | ||||