Re: Мiльон гривень. Готiвкою



Posted by Валентин, Донецк (213.130.10.172) on December 07, 2001 at 14:40:39:

In Reply to: Re: Мiльон гривень. Готiвкою posted by Анатолий Анимица on December 07, 2001 at 13:37:10:

Здесь совмещены Ваш и мой примеры.
Единственно, в середине суммы прописью
два не меняется на двi или один на одна.
Я подумаю. А как Вы считаете, направление
с минимальными потерями верное?
*****************************************************************************
Тест WNUA
pi .. pi^18
i=3.141592665;j=i
for k=1 to 18
s=i
call wnua Ваша Подпрограмма
call MyProgram Переход на Подпрограмму Перименования ОДИН на ОДНА и т.д.
IN = [intsn i]
*^^^^^^^^^^^^^^^^^^^^^ne ^^LD ^^^^^^^^^IN
^^^^^^^^^^^s^^ ^^LD ^^^^^^t1 ^^t2 ^^t3 ^ce ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^b
i=i*j
endfor
stop
******************* ПЕРЕИМЕНОВАНИЕ ОДИН НА ОДНА и т.д. ********************
: MyProgram
*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^b
PS = [ps 'грн',b]
ne = [cp b,PS,13] Неизменяемая Часть Вывода Суммы прописью
a = [wn s] ; LD = [length a] ; L2 = [length b]-12
! a = 'Один ' b = 'Одна ' +ne ; goto Dal
! a = 'Два ' b = 'Двi ' +ne ; goto Dal
! [cp a,LD-4,4] = 'один' b = [cp b,1,L2-5]+'одна '+ne ; goto Dal
! [cp a,LD-3,3] = 'два' b = [cp b,1,L2-4]+'двi ' +ne
: Dal
return
*****************************************************************************
stop
*****************************************************************************
: wnua подпрограмма формирования суммы прописью вход S выход B для UA
*****************************************************************************
if s > 2000000000 b = 'шалена купа грошей - звернiться до програмиста'
return
endif
*****************************************************************************
e1 = 'одтчпшсв' ; e2 = 'ОДТЧПШСВ' константы заглавной буквы числа прописью
[a 1,'один','два','три','чотири','п'+[ch 39]+'ять','шiсть','сiм','вiсiм','дев'+[ch 39]+'ять','десять','одинадцять','дванадцять','тринадцять','чотирнадцять','п'+[ch 39]+'ятнадцять','шiстнадцять','сiмнадцять','вIсIмнадцять','дев'+[ch 39]+'ятнадцять']
[b 1,'двадцять','тридцять','сорок','п'+[ch 39]+'ятдесят','шiстдесят','сiмдесят','вiсiмдесят','дев'+[ch 39]+'яносто']
[c 1,'сто','двiстi','триста','чотириста','п'+[ch 39]+'ятсот','шiстсот','сiмсот','вiсiмсот','дев'+[ch 39]+'ятсот']
b = ' ' заглушка число прописью
p1 = ' ' ; p2 = ' ' ; p3 = ' ' заглушки триад числа прописью
tr = [tr S] ; ce = [ce S]; гривнi й копiйки
t1 = 0 ; t2 = 0 ; t3 = 0 триады миллионы тысячи единицы
*****************************************************************************
if tr >= 1000000 t1 = [tr tr/1000000] ; t2 = tr-t1*1000000
else t2 = tr ; t1 = 0 ; endif
if t2 >= 1000 t3 = t2 ; t2 = [tr t2/1000]
t3 = t3-t2*1000
else t3 = t2 ; t2 = 0
endif
*****************************************************************************
if t1 tp=[intsn t1];tr=[cp [intsn 1000+t1],2,3];tc=[cp tr,3,1];call uatriada;b=[strip b+' '+tp]
if tc='1' b=b+' мiльон';elseif [ps tc,'234'] b=b+' мiльони';else b=b+' мiльонiв';endif
endif
if t2 tp=[intsn t2];tr=[cp [intsn 1000+t2],2,3];tc=[cp tr,3,1];call uatriada;b=[strip b+' '+tp]
if tc='1' b=b+' тисяча';elseif [ps tc,'234'] b=b+' тисячi';else b=b+' тисяч';endif
endif
if t3 tp=[intsn t3];call uatriada;b=[strip [strip b]+' '+tp];endif
b=[strip b]+' грн. '+[cp [intsn 100+ce],2,2]+' коп.'
ps=[ps [cp b,1,1],e1];b=[strip [cp e2,ps,1]]+[strip [cp b,2,200]]
return wnua
:uatriada вход tp число строкой 1..999 три цифры выход число прописью tp
to=' '
if [length tp]=3 to=[strip to+' '+[c [vl [cp tp,1,1]]]];tp=[cp tp,2,2];endif
if [length tp]=2
cp=[cp tp,1,1];if cp='0' to=[strip to+' '+[a [vl [cp tp,2,1]]]];tp=to;return;endif;if [ps cp,'23456789']
to=[strip to+' '+[b [vl cp]-1]];te=[cp tp,2,1];if [ps te,'123456789'] to=[strip to+' '+[a [vl te]]];endif
elseif [ps tp,'00|10|11|12|13|14|15|16|17|18|19'] to=[strip to+' '+[b [vl tp]]]
else to=to+' '+[b [vl [cp tp,2,1]]]
endif
else to=to+' '+[a [vl tp]]+' '
endif
tp=[strip to]
return


Пpишедшие ответы: