<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=40487&amp;view=findpost&amp;p=262504</guid>
        <pubDate>Sat, 13 Dec 2003 06:14:24 +0000</pubDate>
        <title>Числа прописью</title>
        <link>https://forum.sources.ru/index.php?showtopic=40487&amp;view=findpost&amp;p=262504</link>
        <description><![CDATA[Song: Вот несколько решений.<br>
<br>
Автор Александр <br>
<br>
{------------------------ Деньги прописью ---------------------} <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">function TextSum(S: double): string; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; function Conv999(M: longint; fm: integer): string; </div><div class="code_line">&nbsp; const </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;   c1to9m: array[1..9] of string[6] = </div><div class="code_line">&nbsp;   (&#39;один&#39;, &#39;два&#39;, &#39;три&#39;, &#39;четыре&#39;, &#39;пять&#39;, &#39;шесть&#39;, &#39;семь&#39;, &#39;восемь&#39;, &#39;девять&#39;); </div><div class="code_line">&nbsp;   c1to9f: array[1..9] of string[6] = </div><div class="code_line">&nbsp;   (&#39;одна&#39;, &#39;две&#39;, &#39;три&#39;, &#39;четыре&#39;, &#39;пять&#39;, &#39;шесть&#39;, &#39;семь&#39;, &#39;восемь&#39;, &#39;девять&#39;); </div><div class="code_line">&nbsp;   c11to19: array[1..9] of string[12] = </div><div class="code_line">&nbsp;   (&#39;одиннадцать&#39;, &#39;двенадцать&#39;, &#39;тринадцать&#39;, &#39;четырнадцать&#39;, &#39;пятнадцать&#39;, </div><div class="code_line">&nbsp;     &#39;шестнадцать&#39;, &#39;семнадцать&#39;, &#39;восемнадцать&#39;, &#39;девятнадцать&#39;); </div><div class="code_line">&nbsp;   c10to90: array[1..9] of string[11] = </div><div class="code_line">&nbsp;   (&#39;десять&#39;, &#39;двадцать&#39;, &#39;тридцать&#39;, &#39;сорок&#39;, &#39;пятьдесят&#39;, &#39;шестьдесят&#39;, </div><div class="code_line">&nbsp;     &#39;семьдесят&#39;, &#39;восемьдесят&#39;, &#39;девяносто&#39;); </div><div class="code_line">&nbsp;   c100to900: array[1..9] of string[9] = </div><div class="code_line">&nbsp;   (&#39;сто&#39;, &#39;двести&#39;, &#39;триста&#39;, &#39;четыреста&#39;, &#39;пятьсот&#39;, &#39;шестьсот&#39;, &#39;семьсот&#39;, </div><div class="code_line">&nbsp;     &#39;восемьсот&#39;, &#39;девятьсот&#39;); </div><div class="code_line">&nbsp; var </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;   s: string; </div><div class="code_line">&nbsp;   i: longint; </div><div class="code_line">&nbsp; begin </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;   s := &#39;&#39;; </div><div class="code_line">&nbsp;   i := M div 100; </div><div class="code_line">&nbsp;   if i &#60;&#62; 0 then s := c100to900[i] + &#39; &#39;; </div><div class="code_line">&nbsp;   M := M mod 100; </div><div class="code_line">&nbsp;   i := M div 10; </div><div class="code_line">&nbsp;   if (M &#62; 10) and (M &#60; 20) then </div><div class="code_line">&nbsp;     s := s + c11to19[M - 10] + &#39; &#39; </div><div class="code_line">&nbsp;   else </div><div class="code_line">&nbsp;     begin </div><div class="code_line">&nbsp;       if i &#60;&#62; 0 then s := s + c10to90[i] + &#39; &#39;; </div><div class="code_line">&nbsp;       M := M mod 10; </div><div class="code_line">&nbsp;       if M &#60;&#62; 0 then </div><div class="code_line">&nbsp;         if fm = 0 then </div><div class="code_line">&nbsp;           s := s + c1to9f[M] + &#39; &#39; </div><div class="code_line">&nbsp;         else </div><div class="code_line">&nbsp;           s := s + c1to9m[M] + &#39; &#39;; </div><div class="code_line">&nbsp;     end; </div><div class="code_line">&nbsp;   Conv999 := s; </div><div class="code_line">&nbsp; end; </div><div class="code_line">&nbsp;</div><div class="code_line">{--------------------------------------------------------------} </div><div class="code_line">var </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; i: longint; </div><div class="code_line">&nbsp; j: longint; </div><div class="code_line">&nbsp; r: real; </div><div class="code_line">&nbsp; t: string; </div><div class="code_line">&nbsp;</div><div class="code_line">begin </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; t := &#39;&#39;; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; j := Trunc(S / 1000000000.0); </div><div class="code_line">&nbsp; r := j; </div><div class="code_line">&nbsp; r := S - r * 1000000000.0; </div><div class="code_line">&nbsp; i := Trunc(r); </div><div class="code_line">&nbsp; if j &#60;&#62; 0 then </div><div class="code_line">&nbsp;   begin </div><div class="code_line">&nbsp;     t := t + Conv999(j, 1) + &#39;миллиард&#39;; </div><div class="code_line">&nbsp;     j := j mod 100; </div><div class="code_line">&nbsp;     if (j &#62; 10) and (j &#60; 20) then </div><div class="code_line">&nbsp;       t := t + &#39;ов &#39; </div><div class="code_line">&nbsp;     else </div><div class="code_line">&nbsp;       case j mod 10 of </div><div class="code_line">&nbsp;         0: t := t + &#39;ов &#39;; </div><div class="code_line">&nbsp;         1: t := t + &#39; &#39;; </div><div class="code_line">&nbsp;         2..4: t := t + &#39;а &#39;; </div><div class="code_line">&nbsp;         5..9: t := t + &#39;ов &#39;; </div><div class="code_line">&nbsp;       end; </div><div class="code_line">&nbsp;   end; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; j := i div 1000000; </div><div class="code_line">&nbsp; if j &#60;&#62; 0 then </div><div class="code_line">&nbsp;   begin </div><div class="code_line">&nbsp;     t := t + Conv999(j, 1) + &#39;миллион&#39;; </div><div class="code_line">&nbsp;     j := j mod 100; </div><div class="code_line">&nbsp;     if (j &#62; 10) and (j &#60; 20) then </div><div class="code_line">&nbsp;       t := t + &#39;ов &#39; </div><div class="code_line">&nbsp;     else </div><div class="code_line">&nbsp;       case j mod 10 of </div><div class="code_line">&nbsp;         0: t := t + &#39;ов &#39;; </div><div class="code_line">&nbsp;         1: t := t + &#39; &#39;; </div><div class="code_line">&nbsp;         2..4: t := t + &#39;а &#39;; </div><div class="code_line">&nbsp;         5..9: t := t + &#39;ов &#39;; </div><div class="code_line">&nbsp;       end; </div><div class="code_line">&nbsp;   end; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; i := i mod 1000000; </div><div class="code_line">&nbsp; j := i div 1000; </div><div class="code_line">&nbsp; if j &#60;&#62; 0 then </div><div class="code_line">&nbsp;   begin </div><div class="code_line">&nbsp;     t := t + Conv999(j, 0) + &#39;тысяч&#39;; </div><div class="code_line">&nbsp;     j := j mod 100; </div><div class="code_line">&nbsp;     if (j &#62; 10) and (j &#60; 20) then </div><div class="code_line">&nbsp;       t := t + &#39; &#39; </div><div class="code_line">&nbsp;     else </div><div class="code_line">&nbsp;       case j mod 10 of </div><div class="code_line">&nbsp;         0: t := t + &#39; &#39;; </div><div class="code_line">&nbsp;         1: t := t + &#39;а &#39;; </div><div class="code_line">&nbsp;         2..4: t := t + &#39;и &#39;; </div><div class="code_line">&nbsp;         5..9: t := t + &#39; &#39;; </div><div class="code_line">&nbsp;       end; </div><div class="code_line">&nbsp;   end; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; i := i mod 1000; </div><div class="code_line">&nbsp; j := i; </div><div class="code_line">&nbsp; if j &#60;&#62; 0 then t := t + Conv999(j, 1); </div><div class="code_line">&nbsp; t := t + &#39;руб. &#39;; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; i := Round(Frac(S) * 100.0); </div><div class="code_line">&nbsp; t := t + Long2Str(i) + &#39; коп.&#39;; </div><div class="code_line">&nbsp; TextSum := t; </div><div class="code_line">end; </div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
--------------------------------------------------------------------------------<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit RoubleUnit; </div><div class="code_line">{$D Пропись © Близнец Антон &#39;99 http:\anton-bl.chat.ru\delphi01.htm } </div><div class="code_line">{ 1000011.01-&#62;&#39;Один миллион одинадцать рублей 01 копейка&#39;               } </div><div class="code_line">interface </div><div class="code_line">function RealToRouble(c: Extended): string; </div><div class="code_line">implementation </div><div class="code_line">uses SysUtils, math; </div><div class="code_line">const Max000 = 6; {Кол-во триплетов - 000} </div><div class="code_line">&nbsp; MaxPosition = Max000 * 3; {Кол-во знаков в числе } </div><div class="code_line">//Аналог IIF в Dbase есть в proc.pas для основных типов, частично объявлена тут для независимости </div><div class="code_line">function IIF(i: Boolean; s1, s2: Char): Char; overload; begin if i then </div><div class="code_line">&nbsp;   result := s1 </div><div class="code_line">&nbsp; else </div><div class="code_line">&nbsp;   result := s2 end; </div><div class="code_line">function IIF(i: Boolean; s1, s2: string): string; overload; begin if i then </div><div class="code_line">&nbsp;   result := s1 </div><div class="code_line">&nbsp; else </div><div class="code_line">&nbsp;   result := s2 end; </div><div class="code_line">&nbsp;</div><div class="code_line">function NumToStr(s: string): string; {Возвращает число прописью} </div><div class="code_line">const c1000: array[0..Max000] of string = (&#39;&#39;, &#39;тысяч&#39;, &#39;миллион&#39;, &#39;миллиард&#39;, &#39;триллион&#39;, &#39;квадраллион&#39;, &#39;квинтиллион&#39;); </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; c1000w: array[0..Max000] of Boolean = (False, True, False, False, False, False, False); </div><div class="code_line">&nbsp; w: array[False..True, &#39;0&#39;..&#39;9&#39;] of string[3] = ((&#39;ов &#39;, &#39; &#39;, &#39;а &#39;, &#39;а &#39;, &#39;а &#39;, &#39;ов &#39;, &#39;ов &#39;, &#39;ов &#39;, &#39;ов &#39;, &#39;ов &#39;), </div><div class="code_line">&nbsp;   (&#39; &#39;, &#39;а &#39;, &#39;и &#39;, &#39;и &#39;, &#39;и &#39;, &#39; &#39;, &#39; &#39;, &#39; &#39;, &#39; &#39;, &#39; &#39;)); </div><div class="code_line">&nbsp; function Num000toStr(S: string; woman: Boolean): string; {Num000toStr возвращает число для триплета} </div><div class="code_line">&nbsp; const c100: array[&#39;0&#39;..&#39;9&#39;] of string = (&#39;&#39;, &#39;сто &#39;, &#39;двести &#39;, &#39;триста &#39;, &#39;четыреста &#39;, &#39;пятьсот &#39;, &#39;шестьсот &#39;, &#39;семьсот &#39;, &#39;восемьсот &#39;, &#39;девятьсот &#39;); </div><div class="code_line">&nbsp;   c10: array[&#39;0&#39;..&#39;9&#39;] of string = (&#39;&#39;, &#39;десять &#39;, &#39;двадцать &#39;, &#39;тридцать &#39;, &#39;сорок &#39;, &#39;пятьдесят &#39;, &#39;шестьдесят &#39;, &#39;семьдесят &#39;, &#39;восемьдесят &#39;, &#39;девяносто &#39;); </div><div class="code_line">&nbsp;   c11: array[&#39;0&#39;..&#39;9&#39;] of string = (&#39;&#39;, &#39;один&#39;, &#39;две&#39;, &#39;три&#39;, &#39;четыр&#39;, &#39;пят&#39;, &#39;шест&#39;, &#39;сем&#39;, &#39;восем&#39;, &#39;девят&#39;); </div><div class="code_line">&nbsp;   c1: array[False..True, &#39;0&#39;..&#39;9&#39;] of string = ((&#39;&#39;, &#39;один &#39;, &#39;два &#39;, &#39;три &#39;, &#39;четыре &#39;, &#39;пять &#39;, &#39;шесть &#39;, &#39;семь &#39;, &#39;восемь &#39;, &#39;девять &#39;), </div><div class="code_line">&nbsp;     (&#39;&#39;, &#39;одна &#39;, &#39;две &#39;, &#39;три &#39;, &#39;четыре &#39;, &#39;пять &#39;, &#39;шесть &#39;, &#39;семь &#39;, &#39;восемь &#39;, &#39;девять &#39;)); </div><div class="code_line">&nbsp; begin {Num000toStr} </div><div class="code_line">&nbsp;   Result := c100[s[1]] + iif((s[2] = &#39;1&#39;) and (s[3] &#62; &#39;0&#39;), c11[s[3]] + &#39;надцать &#39;, c10[s[2]] + c1[woman, s[3]]); </div><div class="code_line">&nbsp; end; {Num000toStr} </div><div class="code_line">&nbsp;</div><div class="code_line">var s000: string[3]; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; isw, isMinus: Boolean; </div><div class="code_line">&nbsp; i: integer; //Счётчик триплетов </div><div class="code_line">begin </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; Result := &#39;&#39;; i := 0; </div><div class="code_line">&nbsp; isMinus := (s &#60;&#62; &#39;&#39;) and (s[1] = &#39;-&#39;); </div><div class="code_line">&nbsp; if isMinus then s := Copy(s, 2, Length(s) - 1); </div><div class="code_line">&nbsp; while not ((i &#62;= Ceil(Length(s) / 3)) or (i &#62;= Max000)) do </div><div class="code_line">&nbsp;   begin </div><div class="code_line">&nbsp;     s000 := Copy(&#39;00&#39; + s, Length(s) - i * 3, 3); </div><div class="code_line">&nbsp;     isw := c1000w[i]; </div><div class="code_line">&nbsp;     if (i &#62; 0) and (s000 &#60;&#62; &#39;000&#39;) then //тысячи и т.д. </div><div class="code_line">&nbsp;       Result := c1000[i] + w[Isw, iif(s000[2] = &#39;1&#39;, &#39;0&#39;, s000[3])] + Result; </div><div class="code_line">&nbsp;     Result := Num000toStr(s000, isw) + Result; </div><div class="code_line">&nbsp;     Inc(i) </div><div class="code_line">&nbsp;   end; </div><div class="code_line">&nbsp; if Result = &#39;&#39; then Result := &#39;ноль&#39;; </div><div class="code_line">&nbsp; if isMinus then Result := &#39;минус &#39; + Result; </div><div class="code_line">end; {NumToStr} </div><div class="code_line">&nbsp;</div><div class="code_line">function RealToRouble(c: Extended): string; </div><div class="code_line">&nbsp;</div><div class="code_line">const ruble: array[&#39;0&#39;..&#39;9&#39;] of string[2] = (&#39;ей&#39;, &#39;ь&#39;, &#39;я&#39;, &#39;я&#39;, &#39;я&#39;, &#39;ей&#39;, &#39;ей&#39;, &#39;ей&#39;, &#39;ей&#39;, &#39;ей&#39;); </div><div class="code_line">&nbsp; Kopeek: array[&#39;0&#39;..&#39;9&#39;] of string[3] = (&#39;ек&#39;, &#39;йка&#39;, &#39;йки&#39;, &#39;йки&#39;, &#39;йки&#39;, &#39;ек&#39;, &#39;ек&#39;, &#39;ек&#39;, &#39;ек&#39;, &#39;ек&#39;); </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; function ending(const s: string): Char; </div><div class="code_line">&nbsp; var l: Integer; //С l на 8 байт коротче -&#62;-&#62;F </div><div class="code_line">&nbsp; begin //Возвращает индекс окончания </div><div class="code_line">&nbsp;   l := Length(s); </div><div class="code_line">&nbsp;   Result := iif((l &#62; 1) and (s[l - 1] = &#39;1&#39;), &#39;0&#39;, s[l]); </div><div class="code_line">&nbsp; end; </div><div class="code_line">&nbsp;</div><div class="code_line">var rub: string[MaxPosition + 3]; kop: string[2]; </div><div class="code_line">begin {Возвращает число прописью с рублями и копейками} </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; Str(c: MaxPosition + 3: 2, Result); </div><div class="code_line">&nbsp; if Pos(&#39;E&#39;, Result) = 0 then //Если число можно представить в строке &#60;&#62;1E+99 </div><div class="code_line">&nbsp;   begin </div><div class="code_line">&nbsp;     rub := TrimLeft(Copy(Result, 1, Length(Result) - 3)); </div><div class="code_line">&nbsp;     kop := Copy(Result, Length(Result) - 1, 2); </div><div class="code_line">&nbsp;     Result := NumToStr(rub) + &#39; рубл&#39; + ruble[ending(rub)] </div><div class="code_line">&nbsp;       + &#39; &#39; + kop + &#39; копе&#39; + Kopeek[ending(kop)]; </div><div class="code_line">&nbsp;     Result := AnsiUpperCase(Result[1]) + Copy(Result, 2, Length(Result) - 1); </div><div class="code_line">&nbsp;   end; </div><div class="code_line">end; </div><div class="code_line">end. </div></ol></div></div></div></div><br>
<br>
--------------------------------------------------------------------------------<br>
<br>
Редянов Денис <br>
<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">function CifrToStr(Cifr: string; Pr: Integer; Padeg: Integer): string; </div><div class="code_line">{Функция возвращает прописью 1 цифры признак 3-единицы 2-десятки 1-сотни 4-11-19 </div><div class="code_line">&nbsp;</div><div class="code_line">Padeg - 1-нормально 2- одна, две } </div><div class="code_line">var i: Integer; </div><div class="code_line">begin </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; i := StrToInt(Cifr); </div><div class="code_line">&nbsp; if Pr = 1 then </div><div class="code_line">&nbsp;   case i of </div><div class="code_line">&nbsp;     1: CifrToStr := &#39;сто&#39;; </div><div class="code_line">&nbsp;     2: CifrToStr := &#39;двести&#39;; </div><div class="code_line">&nbsp;     3: CifrToStr := &#39;триста&#39;; </div><div class="code_line">&nbsp;     4: CifrToStr := &#39;четыреста&#39;; </div><div class="code_line">&nbsp;     5: CifrToStr := &#39;пятьсот&#39;; </div><div class="code_line">&nbsp;     6: CifrToStr := &#39;шестьсот&#39;; </div><div class="code_line">&nbsp;     7: CifrToStr := &#39;семьсот&#39;; </div><div class="code_line">&nbsp;     8: CifrToStr := &#39;восемьсот&#39;; </div><div class="code_line">&nbsp;     9: CifrToStr := &#39;девятьсот&#39;; </div><div class="code_line">&nbsp;     0: CifrToStr := &#39;&#39;; </div><div class="code_line">&nbsp;   end </div><div class="code_line">&nbsp; else if Pr = 2 then </div><div class="code_line">&nbsp;   case i of </div><div class="code_line">&nbsp;     1: CifrToStr := &#39;&#39;; </div><div class="code_line">&nbsp;     2: CifrToStr := &#39;двадцать&#39;; </div><div class="code_line">&nbsp;     3: CifrToStr := &#39;тридцать&#39;; </div><div class="code_line">&nbsp;     4: CifrToStr := &#39;сорок&#39;; </div><div class="code_line">&nbsp;     5: CifrToStr := &#39;пятьдесят&#39;; </div><div class="code_line">&nbsp;     6: CifrToStr := &#39;шестьдесят&#39;; </div><div class="code_line">&nbsp;     7: CifrToStr := &#39;семьдесят&#39;; </div><div class="code_line">&nbsp;     8: CifrToStr := &#39;восемьдесят&#39;; </div><div class="code_line">&nbsp;     9: CifrToStr := &#39;девяносто&#39;; </div><div class="code_line">&nbsp;     0: CifrToStr := &#39;&#39;; </div><div class="code_line">&nbsp;   end </div><div class="code_line">&nbsp; else if Pr = 3 then </div><div class="code_line">&nbsp;   case i of </div><div class="code_line">&nbsp;     1: if Padeg = 1 then </div><div class="code_line">&nbsp;         CifrToStr := &#39;один&#39; </div><div class="code_line">&nbsp;       else </div><div class="code_line">&nbsp;         CifrToStr := &#39;одна&#39;; </div><div class="code_line">&nbsp;     2: if Padeg = 1 then </div><div class="code_line">&nbsp;         CifrToStr := &#39;два&#39; </div><div class="code_line">&nbsp;       else </div><div class="code_line">&nbsp;         CifrToStr := &#39;две&#39;; </div><div class="code_line">&nbsp;     3: CifrToStr := &#39;три&#39;; </div><div class="code_line">&nbsp;     4: CifrToStr := &#39;четыре&#39;; </div><div class="code_line">&nbsp;     5: CifrToStr := &#39;пять&#39;; </div><div class="code_line">&nbsp;     6: CifrToStr := &#39;шесть&#39;; </div><div class="code_line">&nbsp;     7: CifrToStr := &#39;семь&#39;; </div><div class="code_line">&nbsp;     8: CifrToStr := &#39;восемь&#39;; </div><div class="code_line">&nbsp;     9: CifrToStr := &#39;девять&#39;; </div><div class="code_line">&nbsp;     0: CifrToStr := &#39;&#39;; </div><div class="code_line">&nbsp;   end </div><div class="code_line">&nbsp; else if Pr = 4 then </div><div class="code_line">&nbsp;   case i of </div><div class="code_line">&nbsp;     1: CifrToStr := &#39;одиннадцать&#39;; </div><div class="code_line">&nbsp;     2: CifrToStr := &#39;двенадцать&#39;; </div><div class="code_line">&nbsp;     3: CifrToStr := &#39;тринадцать&#39;; </div><div class="code_line">&nbsp;     4: CifrToStr := &#39;четырнадцать&#39;; </div><div class="code_line">&nbsp;     5: CifrToStr := &#39;пятнадцать&#39;; </div><div class="code_line">&nbsp;     6: CifrToStr := &#39;шестнадцать&#39;; </div><div class="code_line">&nbsp;     7: CifrToStr := &#39;семнадцать&#39;; </div><div class="code_line">&nbsp;     8: CifrToStr := &#39;восемнадцать&#39;; </div><div class="code_line">&nbsp;     9: CifrToStr := &#39;девятнадцать&#39;; </div><div class="code_line">&nbsp;     0: CifrToStr := &#39;десять&#39;; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;   end; </div><div class="code_line">end; </div><div class="code_line">&nbsp;</div><div class="code_line">function Rasryad(K: Integer; V: string): string; </div><div class="code_line">{Функция возвращает наименование разряда в зависимости от последних 2 цифр его} </div><div class="code_line">var j: Integer; </div><div class="code_line">begin </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; j := StrToInt(Copy(v, Length(v), 1)); </div><div class="code_line">&nbsp; if (StrToInt(Copy(v, Length(v) - 1, 2)) &#62; 9) and (StrToInt(Copy(v, Length(v) - 1, 2)) &#60; 20) then </div><div class="code_line">&nbsp;   case K of </div><div class="code_line">&nbsp;     0: Rasryad := &#39;&#39;; </div><div class="code_line">&nbsp;     1: Rasryad := &#39;тысяч&#39;; </div><div class="code_line">&nbsp;     2: Rasryad := &#39;миллионов&#39;; </div><div class="code_line">&nbsp;     3: Rasryad := &#39;миллиардов&#39;; </div><div class="code_line">&nbsp;     4: Rasryad := &#39;триллионов&#39;; </div><div class="code_line">&nbsp;   end </div><div class="code_line">&nbsp; else </div><div class="code_line">&nbsp;   case K of </div><div class="code_line">&nbsp;     0: Rasryad := &#39;&#39;; </div><div class="code_line">&nbsp;     1: case j of </div><div class="code_line">&nbsp;         1: Rasryad := &#39;тысяча&#39;; </div><div class="code_line">&nbsp;         2..4: Rasryad := &#39;тысячи&#39;; </div><div class="code_line">&nbsp;       else </div><div class="code_line">&nbsp;         Rasryad := &#39;тысяч&#39;; </div><div class="code_line">&nbsp;       end; </div><div class="code_line">&nbsp;     2: case j of </div><div class="code_line">&nbsp;         1: Rasryad := &#39;миллион&#39;; </div><div class="code_line">&nbsp;         2..4: Rasryad := &#39;миллионa&#39;; </div><div class="code_line">&nbsp;       else </div><div class="code_line">&nbsp;         Rasryad := &#39;миллионов&#39;; </div><div class="code_line">&nbsp;       end; </div><div class="code_line">&nbsp;     3: case j of </div><div class="code_line">&nbsp;         1: Rasryad := &#39;миллиард&#39;; </div><div class="code_line">&nbsp;         2..4: Rasryad := &#39;миллиарда&#39;; </div><div class="code_line">&nbsp;       else </div><div class="code_line">&nbsp;         Rasryad := &#39;миллиардов&#39;; </div><div class="code_line">&nbsp;       end; </div><div class="code_line">&nbsp;     4: case j of </div><div class="code_line">&nbsp;         1: Rasryad := &#39;триллион&#39;; </div><div class="code_line">&nbsp;         2..4: Rasryad := &#39;триллиона&#39;; </div><div class="code_line">&nbsp;       else </div><div class="code_line">&nbsp;         Rasryad := &#39;триллионов&#39;; </div><div class="code_line">&nbsp;       end; </div><div class="code_line">&nbsp;   end; </div><div class="code_line">end; </div><div class="code_line">&nbsp;</div><div class="code_line">function GroupToStr(Group: string; Padeg: Integer): string; </div><div class="code_line">{Функция возвращает прописью 3 цифры} </div><div class="code_line">var i: Integer; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; S: string; </div><div class="code_line">begin </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; S := &#39;&#39;; </div><div class="code_line">&nbsp; if (StrToInt(Copy(Group, Length(Group) - 1, 2)) &#62; 9) and (StrToInt(Copy(Group, Length(Group) - 1, 2)) &#60; 20) then </div><div class="code_line">&nbsp;   begin </div><div class="code_line">&nbsp;     if Length(Group) = 3 then </div><div class="code_line">&nbsp;       S := S + &#39; &#39; + CifrToStr(Copy(Group, 1, 1), 1, Padeg); </div><div class="code_line">&nbsp;     S := S + &#39; &#39; + CifrToStr(Copy(Group, Length(Group), 1), 4, Padeg); </div><div class="code_line">&nbsp;   end </div><div class="code_line">&nbsp; else </div><div class="code_line">&nbsp;   for i := 1 to Length(Group) do </div><div class="code_line">&nbsp;     S := S + &#39; &#39; + CifrToStr(Copy(Group, i, 1), i - Length(Group) + 3, Padeg); </div><div class="code_line">&nbsp; GroupToStr := S; </div><div class="code_line">end; </div><div class="code_line">&nbsp;</div><div class="code_line">{Функция возвращает сумму прописью} </div><div class="code_line">function RubToStr(Rubs: Currency; Rub, Kop: string): string; </div><div class="code_line">var i, j: Integer; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; R, K, S: string; </div><div class="code_line">begin </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; S := CurrToStr(Rubs); </div><div class="code_line">&nbsp; S := Trim(S); </div><div class="code_line">&nbsp; if Pos(&#39;,&#39;, S) = 0 then </div><div class="code_line">&nbsp;   begin </div><div class="code_line">&nbsp;     R := S; </div><div class="code_line">&nbsp;     K := &#39;00&#39;; </div><div class="code_line">&nbsp;   end </div><div class="code_line">&nbsp; else </div><div class="code_line">&nbsp;   begin </div><div class="code_line">&nbsp;     R := Copy(S, 0, (Pos(&#39;,&#39;, S) - 1)); </div><div class="code_line">&nbsp;     K := Copy(S, (Pos(&#39;,&#39;, S) + 1), Length(S)); </div><div class="code_line">&nbsp;   end; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; S := &#39;&#39;; </div><div class="code_line">&nbsp; i := 0; </div><div class="code_line">&nbsp; j := 1; </div><div class="code_line">&nbsp; while Length(R) &#62; 3 do </div><div class="code_line">&nbsp;   begin </div><div class="code_line">&nbsp;     if i = 1 then </div><div class="code_line">&nbsp;       j := 2 </div><div class="code_line">&nbsp;     else </div><div class="code_line">&nbsp;       j := 1; </div><div class="code_line">&nbsp;     S := GroupToStr(Copy(R, Length(R) - 2, 3), j) + &#39; &#39; + Rasryad(i, Copy(R, Length(R) - 2, 3)) + &#39; &#39; + S; </div><div class="code_line">&nbsp;     R := Copy(R, 1, Length(R) - 3); </div><div class="code_line">&nbsp;     i := i + 1; </div><div class="code_line">&nbsp;   end; </div><div class="code_line">&nbsp; if i = 1 then </div><div class="code_line">&nbsp;   j := 2 </div><div class="code_line">&nbsp; else </div><div class="code_line">&nbsp;   j := 1; </div><div class="code_line">&nbsp; S := Trim(GroupToStr(R, j) + &#39; &#39; + Rasryad(i, R) + &#39; &#39; + S + &#39; &#39; + Rub + &#39; &#39; + K + &#39; &#39; + Kop); </div><div class="code_line">&nbsp; S := ANSIUpperCase(Copy(S, 1, 1)) + Copy(S, 2, Length(S) - 1); </div><div class="code_line">&nbsp; RubToStr := S; </div><div class="code_line">end; </div></ol></div></div></div></div><br>
<br>
--------------------------------------------------------------------------------<br>
<br>
Вот еще одно решение, присланное Олегом Клюкач. <br>
<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Numinwrd; </div><div class="code_line">&nbsp;</div><div class="code_line">interface </div><div class="code_line">function sMoneyInWords(Nin: currency): string; export; </div><div class="code_line">function szMoneyInWords(Nin: currency): PChar; export; </div><div class="code_line">{ Денежная сумма Nin в рублях и копейках прописью </div><div class="code_line">&nbsp;</div><div class="code_line">1997, в.2.1, by О.В.Болдырев} </div><div class="code_line">&nbsp;</div><div class="code_line">implementation </div><div class="code_line">uses SysUtils, Dialogs, Math; </div><div class="code_line">&nbsp;</div><div class="code_line">type </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; tri = string[4]; </div><div class="code_line">&nbsp; mood = 1..2; </div><div class="code_line">&nbsp; gender = (m, f); </div><div class="code_line">&nbsp; uns = array[0..9] of string[7]; </div><div class="code_line">&nbsp; tns = array[0..9] of string[13]; </div><div class="code_line">&nbsp; decs = array[0..9] of string[12]; </div><div class="code_line">&nbsp; huns = array[0..9] of string[10]; </div><div class="code_line">&nbsp; nums = array[0..4] of string[8]; </div><div class="code_line">&nbsp; money = array[1..2] of string[5]; </div><div class="code_line">&nbsp; endings = array[gender, mood, 1..3] of tri; {окончания числительных и денег} </div><div class="code_line">&nbsp;</div><div class="code_line">const </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; units: uns = (&#39;&#39;, &#39;один &#39;, &#39;два &#39;, &#39;три &#39;, &#39;четыре &#39;, &#39;пять &#39;, </div><div class="code_line">&nbsp;   &#39;шесть &#39;, &#39;семь &#39;, &#39;восемь &#39;, &#39;девять &#39;); </div><div class="code_line">&nbsp; unitsf: uns = (&#39;&#39;, &#39;одна &#39;, &#39;две &#39;, &#39;три &#39;, &#39;четыре &#39;, &#39;пять &#39;, </div><div class="code_line">&nbsp;   &#39;шесть &#39;, &#39;семь &#39;, &#39;восемь &#39;, &#39;девять &#39;); </div><div class="code_line">&nbsp; teens: tns = (&#39;десять &#39;, &#39;одиннадцать &#39;, &#39;двенадцать &#39;, &#39;тринадцать &#39;, </div><div class="code_line">&nbsp;   &#39;четырнадцать &#39;, &#39;пятнадцать &#39;, &#39;шестнадцать &#39;, </div><div class="code_line">&nbsp;   &#39;семнадцать &#39;, &#39;восемнадцать &#39;, &#39;девятнадцать &#39;); </div><div class="code_line">&nbsp; decades: decs = (&#39;&#39;, &#39;десять &#39;, &#39;двадцать &#39;, &#39;тридцать &#39;, &#39;сорок &#39;, </div><div class="code_line">&nbsp;   &#39;пятьдесят &#39;, &#39;шестьдесят &#39;, &#39;семьдесят &#39;, &#39;восемьдесят &#39;, </div><div class="code_line">&nbsp;   &#39;девяносто &#39;); </div><div class="code_line">&nbsp; hundreds: huns = (&#39;&#39;, &#39;сто &#39;, &#39;двести &#39;, &#39;триста &#39;, &#39;четыреста &#39;, </div><div class="code_line">&nbsp;   &#39;пятьсот &#39;, &#39;шестьсот &#39;, &#39;семьсот &#39;, &#39;восемьсот &#39;, </div><div class="code_line">&nbsp;   &#39;девятьсот &#39;); </div><div class="code_line">&nbsp; numericals: nums = (&#39;&#39;, &#39;тысяч&#39;, &#39;миллион&#39;, &#39;миллиард&#39;, &#39;триллион&#39;); </div><div class="code_line">&nbsp; RusMon: money = (&#39;рубл&#39;, &#39;копе&#39;); </div><div class="code_line">&nbsp; ends: endings = (((&#39;&#39;, &#39;а&#39;, &#39;ов&#39;), (&#39;ь&#39;, &#39;я&#39;, &#39;ей&#39;)), </div><div class="code_line">&nbsp;   ((&#39;а&#39;, &#39;и&#39;, &#39;&#39;), (&#39;йка&#39;, &#39;йки&#39;, &#39;ек&#39;))); </div><div class="code_line">threadvar </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; str: string; </div><div class="code_line">&nbsp;</div><div class="code_line">function EndingIndex(Arg: integer): integer; </div><div class="code_line">begin </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; if ((Arg div 10) mod 10) &#60;&#62; 1 then </div><div class="code_line">&nbsp;   case (Arg mod 10) of </div><div class="code_line">&nbsp;     1: Result := 1; </div><div class="code_line">&nbsp;     2..4: Result := 2; </div><div class="code_line">&nbsp;   else </div><div class="code_line">&nbsp;     Result := 3; </div><div class="code_line">&nbsp;   end </div><div class="code_line">&nbsp; else </div><div class="code_line">&nbsp;   Result := 3; </div><div class="code_line">end; </div><div class="code_line">&nbsp;</div><div class="code_line">function sMoneyInWords(Nin: currency): string; { Число Nin прописью, как функция } </div><div class="code_line">var </div><div class="code_line">//  str: string; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; g: gender; //род </div><div class="code_line">&nbsp; Nr: comp; {целая часть числа} </div><div class="code_line">&nbsp; Fr: integer; {дробная часть числа} </div><div class="code_line">&nbsp; i, iTri, Order: longint; {триада} </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; procedure Triad; </div><div class="code_line">&nbsp; var </div><div class="code_line">&nbsp;   iTri2: integer; </div><div class="code_line">&nbsp;   un, de, ce: byte; //единицы, десятки, сотни </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;   function GetDigit: byte; </div><div class="code_line">&nbsp;   begin </div><div class="code_line">&nbsp;     Result := iTri2 mod 10; </div><div class="code_line">&nbsp;     iTri2 := iTri2 div 10; </div><div class="code_line">&nbsp;   end; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; begin </div><div class="code_line">&nbsp;   iTri := trunc(Nr / IntPower(1000, i)); </div><div class="code_line">&nbsp;   Nr := Nr - int(iTri * IntPower(1000, i)); </div><div class="code_line">&nbsp;   iTri2 := iTri; </div><div class="code_line">&nbsp;   if iTri &#62; 0 then </div><div class="code_line">&nbsp;     begin </div><div class="code_line">&nbsp;       un := GetDigit; </div><div class="code_line">&nbsp;       de := GetDigit; </div><div class="code_line">&nbsp;       ce := GetDigit; </div><div class="code_line">&nbsp;       if i = 1 then </div><div class="code_line">&nbsp;         g := f </div><div class="code_line">&nbsp;       else </div><div class="code_line">&nbsp;         g := m; {женского рода только тысяча} </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;       str := TrimRight(str) + &#39; &#39; + Hundreds[ce]; </div><div class="code_line">&nbsp;       if de = 1 then </div><div class="code_line">&nbsp;         str := TrimRight(str) + &#39; &#39; + Teens[un] </div><div class="code_line">&nbsp;       else </div><div class="code_line">&nbsp;         begin </div><div class="code_line">&nbsp;           str := TrimRight(str) + &#39; &#39; + Decades[de]; </div><div class="code_line">&nbsp;           case g of </div><div class="code_line">&nbsp;             m: str := TrimRight(str) + &#39; &#39; + Units[un]; </div><div class="code_line">&nbsp;             f: str := TrimRight(str) + &#39; &#39; + UnitsF[un]; </div><div class="code_line">&nbsp;           end; </div><div class="code_line">&nbsp;         end; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;       if length(numericals[i]) &#62; 1 then </div><div class="code_line">&nbsp;         begin </div><div class="code_line">&nbsp;           str := TrimRight(str) + &#39; &#39; + numericals[i]; </div><div class="code_line">&nbsp;           str := TrimRight(str) + ends[g, 1, EndingIndex(iTri)]; </div><div class="code_line">&nbsp;         end; </div><div class="code_line">&nbsp;     end; //triad is 0 ? </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;   if i = 0 then Exit; </div><div class="code_line">&nbsp;   Dec(i); </div><div class="code_line">&nbsp;   Triad; </div><div class="code_line">&nbsp; end; </div><div class="code_line">&nbsp;</div><div class="code_line">begin </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; str := &#39;&#39;; </div><div class="code_line">&nbsp; Nr := int(Nin); </div><div class="code_line">&nbsp; Fr := round(Nin * 100 + 0.00000001) mod 100; </div><div class="code_line">&nbsp; if Nr &#62; 0 then </div><div class="code_line">&nbsp;   Order := trunc(Log10(Nr) / 3) </div><div class="code_line">&nbsp; else </div><div class="code_line">&nbsp;   begin </div><div class="code_line">&nbsp;     str := &#39;ноль&#39;; </div><div class="code_line">&nbsp;     Order := 0 </div><div class="code_line">&nbsp;   end; </div><div class="code_line">&nbsp; if Order &#62; High(numericals) then </div><div class="code_line">&nbsp;   raise Exception.Create(&#39;Слишком большое число для суммы прописью&#39;); </div><div class="code_line">&nbsp; i := Order; </div><div class="code_line">&nbsp; Triad; </div><div class="code_line">&nbsp; str := </div><div class="code_line">&nbsp;   Format(&#39;%s %s%s %.2d %s%s&#39;, [Trim(str), RusMon[1], ends[m, 2, EndingIndex(iTri)], </div><div class="code_line">&nbsp;   Fr, RusMon[2], ends[f, 2, EndingIndex(Fr)]]); </div><div class="code_line">&nbsp; str[1] := (ANSIUpperCase(copy(str, 1, 1)))[1]; </div><div class="code_line">&nbsp; str[Length(str) + 1] := #0; </div><div class="code_line">&nbsp; Result := str; </div><div class="code_line">end; </div><div class="code_line">&nbsp;</div><div class="code_line">function szMoneyInWords(Nin: currency): PChar; </div><div class="code_line">begin </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp; sMoneyInWords(Nin); </div><div class="code_line">&nbsp; Result := @(str[1]); </div><div class="code_line">end; </div><div class="code_line">&nbsp;</div><div class="code_line">end. </div></ol></div></div></div></div><br>
<br>
Взято из Советов по Delphi от Валентина Озерова <br>
Сборник Kuliba<br>
<br>
<span class="tag-color tag-color-named" data-value="blue" style="color: blue"><strong class='tag-b'>Большая просьба: протестировать, лучший вариант я положу в FAQ</strong></span>]]></description>
        <author>Song</author>
        <category>Алгоритмы</category>
      </item>
	
      </channel>
      </rss>
	