Главная страницаОбратная связьКарта сайта

Сумма прописью - Способ 3


unit sumstr;

interface

uses
  SysUtils, StrUtils;

function SumToString(Value: string): string;

implementation
const

a: array[0..8,0..9] of string=(
("","один ","два ","три ","четыре ","пять ","шесть ","семь ","восемь ","девять "),
("","","двадцать ","тридцать ","сорок ","пятьдесят ","шестьдесят ","семьдесят ","восемьдесят ","девяносто "),
("","сто ","двести ","триста ","четыреста ","пятьсот ","шестьсот ","семьсот ","восемьсот ","девятьсот "),
("тысяч ","тысяча ","две тысячи ","три тысячи ","четыре тысячи ","пять тысячь ","шесть тысячь ","семь тысячь ",
"восемь тысячь ","девять тысячь "),
("","","двадцать ","тридцать ","сорок ","пятьдесят ","шестьдесят ","семьдесят ","восемьдесят ","девяносто "),
("","сто ","двести ","триста ","четыреста ","пятьсот ","шестьсот ","семьсот ","восемьсот ","девятьсот "),
("миллионов ","один миллион ","два миллиона ","три миллиона ","четыре миллиона ","пять миллионов ",
"шесть миллионов ","семь миллионов ","восемь миллионов ","девять миллионов "),
("","","двадцать ","тридцать ","сорок ","пятьдесят ","шестьдесят ","семьдесят ","восемьдесят ","девяносто "),
("","сто ","двести ","триста ","четыреста ","пятьсот ","шестьсот ","семьсот ","восемьсот ","девятьсот "));

b: array[0..9] of string=
("десять ","одинадцать ","двенадцать ","тринадцать ","четырнадцать ","пятьнадцать ","шестьнадцать ",
"семьнадцать ","восемьнадцать ","девятьнадцать ");

function SumToStrin(Value: string): string;
var
  s, t: string;
  p, pp, i, k: integer;
begin
  s:=value;
  if s="0" then
    t:="Ноль "
  else
  begin
    p:=length(s);
    pp:=p;
    if p>1 then
      if (s[p-1]="1") and (s[p]>"0") then
      begin
        t:=b[strtoint(s[p])];
        pp:=pp-2;
      end;
    i:=pp;
    while i>0 do
    begin
      if (i=p-3) and (p>4) then
        if s[p-4]="1" then
        begin
          t:=b[strtoint(s[p-3])]+"тысяч "+t;
          i:=i-2;
        end;
      if (i=p-6) and (p>7) then
        if s[p-7]="1" then
        begin
          t:=b[strtoint(s[p-6])]+"миллионов "+t;
          i:=i-2;
        end;
      if i>0 then
      begin
        k:=strtoint(s[i]);
        t:=a[p-i,k]+t;
        i:=i-1;
      end;
    end;
  end;
  result:=t;
end;

procedure get2str(value: string; var hi, lo: string);
var
  p: integer;
begin
  p:=pos(",", value);
  lo:="";
  hi:="";
  if p=0 then
    p:=pos(".", value);
  if p<>0 then
    delete(value,p,1);
  if p=0 then
  begin
    hi:=value;
    lo:="00";
  end;
  if p>length(value) then
  begin
    hi:=value;
    lo:="00";
  end;
  if p=1 then
  begin
    hi:="0";
    lo:=value;
  end;
  if (p>1) and (p then
  begin
    hi:=copy(value,1,p-1);
    lo:=copy(value,p,length(value));
  end;
end;

function sumtostring(value: string): string;
var
  hi, lo: string;
  pr, er: integer;
begin
  get2str(value,hi,lo);
  if (hi="") or (lo="") then
  begin
    result:="";
    exit;
  end;
  val(hi,pr,er);
  if er<>0 then
  begin
    result:="";
    exit;
  end;
  hi:=sumtostrin(inttostr(pr))+"руб. ";
  if lo<>"00" then
  begin
    val(lo,pr,er);
    if er<>0 then
    begin
      result:="";
      exit;
    end;
    lo:=inttostr(pr);
  end;
  lo:=lo+" коп. ";
  hi[1]:=AnsiUpperCase(hi[1])[1];
  result:=hi+lo;
end;

end.


Обсудить статью на форуме


Если Вас заинтересовала или понравилась информация по разработке на Delph - "Сумма прописью - Способ 3", Вы можете поставить закладку в социальной сети или в своём блоге на данную страницу:

Так же Вы можете задать вопрос по работе этого модуля или примера через форму обратной связи, в сообщение обязательно указывайте название или ссылку на статью!
   


Copyright © 2008 - 2024 Дискета.info