{$I KEYS } unit RupUnit; interface function EqStrRup(var s1,s2 :string) :boolean; function StrNum(R :longint) :string; const RupTab :array [char] of char = ( #0, #1, #2, #3, #4, #5, #6, #7, #8, #9, #10, #11, #12, #13, #14, #15, #16, #17, #18, #19, #20, #21, #22, #23, #24, #25, #26, #27, #28, #29, #30, #31, #32, #33, #34, #35, #36, #37, #38, #39, #40, #41, #42, #43, #44, #45, #46, #47, #48, #49, #50, #51, #52, #53, #54, #55, #56, #57, #58, #59, #60, #61, #62, #63, #64, #65, #66, #67, #68, #69, #70, #71, #72, #73, #74, #75, #76, #77, #78, #79, #80, #81, #82, #83, #84, #85, #86, #87, #88, #89, #90, #91, #92, #93, #94, #95, #96, #65, #66, #67, #68, #69, #70, #71, #72, #73, #74, #75, #76, #77, #78, #79, #80, #81, #82, #83, #84, #85, #86, #87, #88, #89, #90, #123, #124, #125, #126, #127, #65, #129, #66, #131, #132, #69, #134, #135, #136, #137, #75, #139, #77, #72, #79, #143, #80, #67, #84, #147, #148, #88, #150, #151, #152, #153, #154, #155, #156, #157, #158, #159, #65, #129, #66, #131, #132, #69, #134, #135, #136, #137, #75, #139, #77, #72, #79, #143, #176, #177, #178, #179, #180, #181, #182, #183, #184, #185, #186, #187, #188, #189, #190, #191, #192, #193, #194, #195, #196, #197, #198, #199, #200, #201, #202, #203, #204, #205, #206, #207, #208, #209, #210, #211, #212, #213, #214, #215, #216, #217, #218, #219, #220, #221, #222, #223, #80, #67, #84, #147, #148, #88, #150, #151, #152, #153, #154, #155, #156, #157, #158, #159, #240, #241, #242, #243, #244, #245, #246, #247, #248, #249, #250, #251, #252, #253, #254, #255); implementation uses Interna; function EqStrRup(var s1,s2 :string) :boolean; label 1,2,L,EX; var i,j, ii,jj :integer; b :boolean; begin b:=true; for ii:=length(s1) downto 1 do if s1[ii] <> ' ' then goto 1; b:=false; goto EX; 1: for jj:=length(s2) downto 1 do if s2[jj] <> ' ' then goto 2; b:=false; goto EX; 2: i:=1; j:=1; L: if s1[i]='\' then begin inc(i); goto L end; if s2[j]='\' then begin inc(j); goto L end; if RupTab[s1[i]] <> RupTab[s2[j]] then begin b:=false; goto EX end; if i=ii then if j=jj then goto EX else begin b:=false; goto EX end; if j=jj then begin b:=false; goto EX end; inc(i); inc(j); goto L; EX: EqStrRup:=b end; type Sex = (male,female); function StrNumS(R :longint; f :Sex) :string; var N,L :longint; s :string; const D0 :array [0..19] of string[20] = ('', its_61001 { 'один' } , its_61002 { 'два' } , its_61003 { 'тpи' } , its_61004 { 'четыpе' } , its_61005 { 'пять' } , its_61006 { 'шесть' } , its_61007 { 'семь' } , its_61008 { 'восемь' } , its_61009 { 'девять' } , its_61010 { 'десять' } , its_61011 { 'одиннадцать' } , its_61012 { 'двенадцать' } , its_61013 { 'тpинадцать' } , its_61014 { 'четыpнадцать' } , its_61015 { 'пятнадцать' } , its_61016 { 'шестнадцать' } , its_61017 { 'семнадцать' } , its_61018 { 'восемнадцать' } , its_61019 { 'девятнадцать' } ); D1 :array [1..9] of string[20] = ( its_61020 { 'десять' } , its_61021 { 'двадцать' } , its_61022 { 'тpидцать' } , its_61023 { 'соpок' } , its_61024 { 'пятьдесят' } , its_61025 { 'шестьдесят' } , its_61026 { 'семьдесят' } , its_61027 { 'восемьдесят' } , its_61028 { 'девяносто' } ); D2 :array [1..9] of string[20] = ( its_61029 { 'сто' } , its_61030 { 'двести' } , its_61031 { 'тpиста' } , its_61032 { 'четыpеста' } , its_61033 { 'пятьсот' } , its_61034 { 'шестьсот' } , its_61035 { 'семьсот' } , its_61036 { 'восемьсот' } , its_61037 { 'девятьсот' } ); var sss1, sss2 :string; begin if R < 0 then StrNumS:= its_61038 { 'Минус ' } + StrNumS(-R,f) else if R = 0 then StrNumS:='' else if R <= 19 then begin StrNumS:=D0[R]+' '; if f=female then if R = 1 then StrNumS:= its_61039 { 'одна ' } else if R = 2 then StrNumS:= its_61040 { 'две ' } ; end else if R <= 99 then StrNumS:=D1[R div 10] + ' ' + StrNumS(R mod 10,f) else if R <= 999 then begin sss1:=D2[R div 100]; sss2:=StrNumS(R mod 100,f); if (sss1 <> '') and (sss2 <> '') then StrNumS:=sss1 + its_61100 + sss2 else StrNums:=sss1 + ' ' + sss2; { StrNumS:=D2[R div 100] + ' ' + StrNumS(R mod 100,f) } end else if R <= 999999 then begin L:=R div 1000; N:=L mod 10; s:= its_61041 { 'тысяч ' } ; if N = 1 then s:= its_61042 { 'тысяча ' } ; if N in [2,3,4] then s:= its_61043 { 'тысячи ' } ; if (L mod 100) in [11,12,13,14] then s:= its_61044 { 'тысяч ' } ; StrNumS:=StrNumS(L,female) + s + StrNumS(R mod 1000,f); end else if R <= 999999999 then begin L:=R div 1000000; N:=L mod 10; s:= its_61045 { 'миллионов ' } ; if N = 1 then s:= its_61046 { 'миллион ' } ; if N in [2,3,4] then s:= its_61047 { 'миллиона ' } ; if (L mod 100) in [11,12,13,14] then s:= its_61048 { 'миллионов ' } ; StrNumS:=StrNumS(L,male) + s + StrNumS(R mod 1000000,f); end else if R <= 1999999999 then StrNumS:= its_61049 { 'Один миллиаpд ' } + StrNumS(R mod 1000000000,f) else StrNumS:='****** N > 1,999,999,999 ******'; end; function StrNum(R :longint) :string; var t :string; begin t:=StrNumS(R,male); if t <> '' then t[1]:=RupTab[t[1]] else t:=' '; StrNum:=t; end; begin end.