DelphiSite

Главная страница > Алгоритмы > Алгоритм записи числа прописью
 

Алгоритм записи числа прописью

function convert(nm:cardinal):string;
const s100:array[0..9] of string = ('','сто','двести','триста','четыреста',
'пятьсот','шестьсот','семьсот','восемьсот','девятьсот');
s10:array[0..9] of string = ('','','двадцать','тридцать','сорок',
'пятьдесят','шестьдесят','семьдесят','восемьдесят','девяносто');
s11:array[0..9] of string = ('десять','одиннадцать','двенадцать','тринадцать','четырнадцать',
'пятнадцать','шестнадцать','семнадцать','восемнадцать','девятнадцать');
s1:array[0..9,0..1] of string = (('',''),('один','одна'),('два','две'),('три','три'),
('четыре','четыре'),('пять','пять'),('шесть','шесть'),
('семь','семь'),('восемь','восемь'),('девять','девять'));
s1000:array[0..4,0..2] of string = (('триллионов','триллион','триллиона')
,('миллиардов','миллиард','миллиарда'),('миллионов','миллион','миллиона'),
('тысяч','тысяча','тысячи'),('','',''));
var r:string; i:integer; num:string;
procedure ins(sr:string);
begin
if sr<>'' then r:=r+' '+sr;
end;
function chtoint(ch:char):byte;
begin
result:=0;
case ch of
'0':result:=0;
'1':result:=1;
'2':result:=2;
'3':result:=3;
'4':result:=4;
'5':result:=5;
'6':result:=6;
'7':result:=7;
'8':result:=8;
'9':result:=9;
end;
end;
begin
num:=inttostr(nm);
r:='';
for i:=1 to 15-length(num) do insert('0',num,1);
for i:=0 to 4 do begin
if copy(num,i*3+1,3)='000' then continue;
ins(s100[chtoint(num[i*3+1])]);
if num[i*3+2]='1' then begin
ins(s11[chtoint(num[i*3+3])]);
ins(s1000[i,0]);
continue;
end;
ins(s10[chtoint(num[i*3+2])]);
if i=3 then ins(s1[chtoint(num[i*3+3]),1])
else ins(s1[chtoint(num[i*3+3]),0]);
case num[i*3+3] of
'0','5','6','7','8','9':ins(s1000[i,0]);
'1':ins(s1000[i,1]);
'2','3','4':ins(s1000[i,2]);
end;
end;
if r<>'' then if r[1]=' ' then delete(r,1,1);
result:=r;
result[1]:=upchar(result[1]);
end;

Сайт управляется системой uCoz