Недавно добавленные исходники

•  TDictionary Custom Sort  535

•  Fast Watermark Sources  900

•  3D Designer  1 828

•  Sik Screen Capture  1 474

•  Patch Maker  1 482

•  Айболит (remote control)  1 406

•  ListBox Drag & Drop  1 175

•  Доска для игры Реверси  21 825

•  Графические эффекты  1 354

•  Рисование по маске  1 295

•  Перетаскивание изображений  1 096

•  Canvas Drawing  968

•  Рисование Луны  814

•  Поворот изображения  770

•  Рисование стержней  814

•  Paint on Shape  493

•  Генератор кроссвордов  762

•  Головоломка Paletto  667

•  Теорема Монжа об окружностях  855

•  Пазл Numbrix  617

•  Заборы и коммивояжеры  848

•  Игра HIP  557

•  Игра Go (Го)  527

•  Симулятор лифта  548

•  Программа укладки плитки  509

•  Генератор лабиринта  565

•  Проверка числового ввода  524

•  HEX View  600

•  Физический маятник  528

•  Задача коммивояжера  560

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Перевод целого неотрицательного числа из строкового представления в прописное



Автор: Александр

{ **** 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)));







Copyright © 2004-2022 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте   Facebook   Ссылка на Twitter   Ссылка на Telegram