|
|||||
Математика: Разное.Запись числа прописью.Алгоритм, имхо, очевиден.Вот исходник на Паскале. function GetByWords(L: Longint): string; const _1_2: array[1..2] of string[5] = ('одна ','две '); _1_19: array[1..19] of string[13] = ( 'один ', 'два ', 'три ', 'четыре ', 'пять ', 'шесть ', 'семь ', 'восемь ', 'девять ', 'десять ', 'одиннадцать ','двенадцать ', 'тринадцать ','четырнадцать ', 'пятнадцать ','шестнадцать ', 'семнадцать ','восемнадцать ', 'девятнадцать '); des: array[2..9] of string[12] = ( 'двадцать ', 'тридцать ', 'сорок ', 'пятьдесят ', 'шестьдесят ', 'семьдесят ', 'восемьдесят ','девяносто '); hang: array[1..9] of string[15] = ( 'сто ', 'двести ', 'триста ', 'четыреста ', 'пятьсот ', 'шестьсот ', 'семьсот ', 'восемьсот ', 'девятьсот '); NameRub: array[1..3] of string[7] = ('рубль ','рубля ','рублей '); NameTho: array[1..3] of string[7] = ('тысяча ','тысячи ','тысяч '); NameMil: array[1..3] of string[10] = ('миллион ','миллиона ','миллионов '); NameMrd: array[1..3] of string[11] = ('миллиард ','миллиарда ','миллиардов '); var S,S1: string; Many: Byte; procedure Semantic(I: Longint; var Words: string; var Fem: Byte); begin Words:=''; if I>=100then begin Words:=Concat(Words,hang[I div 100]); I:=I mod 100; end; if I>19then begin Words:= Concat(Words,des[I div 10]); I:=I mod 10; end; if I<>0then if (I<3)and (Fem<>0)then Words:=Concat(Words,_1_2[I]) else Words:=Concat( Words,_1_19[I]); case I of 1: Fem:=1; 2..4: Fem:=2; else Fem:=3; end; end; begin S:=''; if L>=1000000000then begin Many:=0; Semantic(L div 1000000000,S1,Many); S:=Concat(S1,NameMrd[Many]); L:=L mod 1000000000; end; if L >=1000000 then begin Many:=0; Semantic(L div 1000000,S1,Many); S:=Concat(S1,NameMil[Many]); L:=L mod 1000000; end; if L >=1000 then begin Many:=1; SeMantic(L div 1000,S1,Many); S:=Concat(S,S1,NameTho[Many]); L:=L mod 1000; end; if L >=1 then begin Many:=0; Semantic(L ,S1,Many); S:= Concat( S,S1,NameRub[Many]); end; GetByWords:=S; end; Вверх по странице, к оглавлению и навигации.
|