Число прописью на узбекском языке.

Опубликовал Salim Mukhtorov (nwstudent) в раздел Программирование - Практика программирования

Функция  ЧислоПрописьюУзб(simv) Экспорт преобразует число, число с прописью.

Можно поместить в общую модуль, и обращаться к этой функции. Буквы к, х, у, г остались не измененным, то есть например число 40 пишется как  «кирк» .  

Функция  ЧислоПрописьюУзб(simv) Экспорт преобразует число, число с прописью.

Можно поместить в общую модуль, и обращаться к этой функции. Буквы к, х, у, г остались не измененным, то есть например число 40 пишется как  «кирк» .  

 Функция ЧислоПрописьюУзб(simv) Экспорт
        s1 = Новый массив(22);
        s2 = Новый массив(12);
        s4 = Новый массив(12);
        s1[1] = "бир";    
        s1[2] = "икки";    
        s1[3] = "уч";    
        s1[4] = "турт";    
        s1[5] = "беш";    
        s1[6] = "олти";    
        s1[7] = "етти";    
        s1[8] = "саккиз";    
        s1[9] = "туккиз";    
        s1[10] = "ун";    
        s1[11]="ун бир";
        s1[12]="ун икки";
        s1[13]="ун уч";
        s1[14]="ун турт";
        s1[15]="ун беш";
        s1[16]="ун олти";
        s1[17]="ун етти";
        s1[18]="ун саккиз";
        s1[19]="ун туккиз";
        s1[20]="йигирма";
        s1[21]="";
        
        s2[1] = "ун";    
        s2[2] = "йигирма";    
        s2[3] = "уттиз";    
        s2[4] = "кирк";    
        s2[5] = "эллик";    
        s2[6] = "олтмиш";    
        s2[7] = "етмиш";    
        s2[8] = "саксон";    
        s2[9] = "туксон";    
        s2[10] = "юз";    
        s2[11] = "";

        s4[1] = "бир юз";    
        s4[2] = "икки юз";    
        s4[3] = "уч юз";    
        s4[4] = "турт юз";    
        s4[5] = "беш юз";    
        s4[6] = "олти юз";    
        s4[7] = "етти юз";    
        s4[8] = "саккиз юз";    
        s4[9] = "туккиз юз";    
        s4[10] = "минг";    
        s4[11] = "";

        slova = "";
        word = "";
        ss0 = СтрЗаменить(simv,Символы.НПП,"");
        ss1 = Цел(Число(ss0));
        k = СтрДлина(ss1);
        if  k > 9 then
            n = k-9;
            mlrd = лев(ss1,n);
            word=aniq(mlrd,s1,s2,s4);
            slova=word+" миллиaрд";
            mln=Сред(СокрЛП(ss1),n+1,3);
            if Число(mln)=0 then
              word="";
              slova=slova+" "+word;
            else
              word = aniq(mln,s1,s2,s4);
              slova=slova+" "+word+" миллион";
            endif;
            ming=Сред(СокрЛП(ss1),n+4,3);
            if Число(ming)=0 then
               word="";
               slova=slova+" "+word;
            else
               word = aniq(ming,s1,s2,s4);
               slova=slova+" "+word+" минг";
            endif;
            uz=Сред(СокрЛП(ss1),n+7,3);
            if Число(uz)=0 then
               word="";
               slova=slova+" "+word+" сум";
            else
               word = aniq(uz,s1,s2,s4);
               slova=slova+" "+word+" сум";
            endif
        else
           if 6               n=k-6;
               mln=Сред(СокрЛП(ss1),1,n);
               word = aniq(mln,s1,s2,s4);
               slova=СокрЛП(slova)+" "+word+" миллион";
               ming=Сред(СокрЛП(ss1),n+1,3);
               mm=0;
               if Число(ming)=0 then
                  word="";
                  slova=slova+" "+word;
               else
                  mm=1;
                  word = aniq(ming,s1,s2,s4);
                  slova=slova+" "+word+" минг";
               endif;
               uz=Сред(СокрЛП(ss1),n+4,3);
               if Число(uz)=0 then
                  word="";
                  slova=slova+" "+word+" сум";
               else
                   word = aniq(uz,s1,s2,s4);
                   slova=slova+" "+word+" сум";
               endif;
           else
               if 3                    n=k-3;
                    ming=Сред(СокрЛП(ss1),1,n);
                    if Число(ming)=0 then
                       word="";
                    else
                       word= aniq(ming,s1,s2,s4);
                       slova=СокрЛП(slova)+" "+word+" минг";
                    endif;
                    uz=Сред(СокрЛП(ss1),n+1,3);
                    if Число(uz)=0 then
                       word="";
                       slova=slova+" "+word+" сум";
                    else
                        word = aniq(uz,s1,s2,s4);
                        slova=slova+" "+word+" сум";
                    endif;
               else
                   if k                        n=k-3;
                        uz=Сред(СокрЛП(ss1),1,k);
                        if Число(uz)=0 then
                           word="";
                           slova=slova+" "+word+" сум";
                        else
                            word = aniq(uz,s1,s2,s4);
                            slova=slova+" "+word+" сум";
                        endif;
                   endif;
               endif;
           endif;
endif;
monet=simv-цел(simv);
if monet>0 then
  slova=СокрЛП(slova)+" "+Строка(monet*100)+" тийин.";
endif;
nn=СтрДлина(СокрЛП(slova));
fist_lit=" ";
fist_lit = Сред(СокрЛП(slova),1,1);
slova=ВРег(fist_lit)+Сред(СокрЛП(slova),2,nn-1);
return СокрЛП(slova);

КонецФункции    
Функция aniq(numb,s1,s2,s4)
   k_1 = СтрДлина(СокрЛП(numb));
   if k_1=3 then
   n_1=Сред(numb,1,1);
   n_1_=Число(n_1);
   if n_1_=0 then
      n_1_=11;
   endif;
   n_2=Сред(numb,2,2);
   n_2_=Число(n_2);
   if n_2_>19 then
      n_2=Сред(numb,2,1);
   endif;
   n_2_=Число(n_2);
   if n_2_=0 then
      n_2_=21;
   endif;
   n_3=Сред(numb,3,1);
   n_3_=Число(n_3);
   if n_3_=0 then
      n_3_=21;
   endif;
   if СтрДлина(n_2)     word=s4[n_1_]+" "+s2[n_2_]+" "+s1[n_3_];
   else
     word=s4[n_1_]+" "+s1[n_2_];
   endif;
   возврат word;
else
   if k_1=2 then
      n_2=Сред(numb,1,2);
      n_2_=Число(n_2);
      if n_2_>19 then
         n_2=Сред(numb,1,1);
      endif;
      n_3=Сред(numb,2,1);
      n_3_=Число(n_3);
      n_2_=Число(n_2);
      if n_2_=0 then
         n_2_=11;
         n2=11;
      endif;
      if n_3_=0 then
         n_3_=21;
      endif;
      if СтрДлина(n_2)        word=s2[n_2_]+" "+s1[n_3_];
      else
        word=s1[n_2_];
      endif;
      return word;
   else
      if k_1=1 then
         n_3=Сред(numb,1,1);
         n_3_=Число(n_3);
         if n_3_=0 then
            n_3_=11;
         endif;
            word=s1[n_3_];
         return word;
      endif;
   endif;
КонецЕсли;    
КонецФункции    

См. также

Добавить вознаграждение
Комментарии
1. Эмиль Карапетян (amon_ra) 2 18.06.14 15:45 Сейчас в теме
о, какая диковинная публикация)
2. Антон Стеклов (asved.ru) 31 19.06.14 07:09 Сейчас в теме
Это прекрасно!

Но, к сожалению, несколько запоздало - первое апреля прошло :( Ждем следующего года.

Утащил в жежешечку. Со ссылками, естессна.
3. Игнат Романов (romign) 20.06.14 14:33 Сейчас в теме
Плохим пользователям, которые неправильно вводят документы, будем выдавать число прописью на узбекском!
4. Валерий Дегрик (mars207) 20 25.06.14 15:25 Сейчас в теме
И не лень же было так стараться))
5. Алексей Жуков (alexsey777) 26.06.14 16:46 Сейчас в теме
Заморочился человек=)
romign,+1. Наказывать будем=)