unit numberinwords; interface function number999(number: integer; gender: integer; declension: integer): string; function number999_ord(number: integer; gender: integer; declension: integer): string; implementation function number900(centi: integer; declension: integer): string; begin case centi of 0:; 1: case declension of 0: Result := 'сто'; 1: Result := 'ста'; 2: Result := 'ста'; 3: Result := 'сто'; 4: Result := 'ста'; 5: Result := 'ста'; end; 2: case declension of 0: Result := 'двести'; 1: Result := 'двухсот'; 2: Result := 'двумстам'; 3: Result := 'двести'; 4: Result := 'двумястами'; 5: Result := 'двухстах'; end; 3: case declension of 0: Result := 'триста'; 1: Result := 'трехсот'; 2: Result := 'тремстам'; 3: Result := 'триста'; 4: Result := 'тремястами'; 5: Result := 'трехстах'; end; 4: case declension of 0: Result := 'четыреста'; 1: Result := 'четырехсот'; 2: Result := 'четыремстам'; 3: Result := 'четыреста'; 4: Result := 'четырьмястами'; 5: Result := 'четырехстах'; end; 5: case declension of 0: Result := 'пятьсот'; 1: Result := 'пятисот'; 2: Result := 'пятистам'; 3: Result := 'пятьсот'; 4: Result := 'пятьюстами'; 5: Result := 'пятистах'; end; 6: case declension of 0: Result := 'шестьсот'; 1: Result := 'шестисот'; 2: Result := 'шестистам'; 3: Result := 'шестьсот'; 4: Result := 'шестьюстами'; 5: Result := 'шестистах'; end; 7: case declension of 0: Result := 'семьсот'; 1: Result := 'семисот'; 2: Result := 'семистам'; 3: Result := 'семьсот'; 4: Result := 'семьюстами'; 5: Result := 'семистах'; end; 8: case declension of 0: Result := 'восемьсот'; 1: Result := 'восьмисот'; 2: Result := 'восьмистам'; 3: Result := 'восемьсот'; 4: Result := 'восемьюстами'; 5: Result := 'восьмистах'; end; 9: case declension of 0: Result := 'девятьсот'; 1: Result := 'девятисот'; 2: Result := 'девятистам'; 3: Result := 'девятьсот'; 4: Result := 'девятьюстами'; 5: Result := 'девятистах'; end; end; end; function Adjective1(gender,declension: integer): string; begin case declension of 0: case gender of 0: result := 'ый'; 1: result := 'ая'; 2: result := 'ое'; end; 1: case gender of 0: result := 'ого'; 1: result := 'ой'; 2: result := 'ого'; end; 2: case gender of 0: result := 'ому'; 1: result := 'ой'; 2: result := 'ому'; end; 3: case gender of 0: result := 'ый'; 1: result := 'ую'; 2: result := 'ое'; end; 4: case gender of 0: result := 'ым'; 1: result := 'ой'; 2: result := 'ым'; end; 5: case gender of 0: result := 'ом'; 1: result := 'ой'; 2: result := 'ом'; end; end; end; function Adjective2(gender,declension: integer): string; begin if (gender=0) and (declension in [0,3]) then result := 'ой' else result := Adjective1(gender,declension); end; function Adjective3(gender,declension: integer): string; begin case declension of 0: case gender of 0: result := 'ий'; 1: result := 'яя'; 2: result := 'ье'; end; 1: case gender of 0: result := 'ьего'; 1: result := 'ей'; 2: result := 'ьего'; end; 2: case gender of 0: result := 'ьему'; 1: result := 'ей'; 2: result := 'ьему'; end; 3: case gender of 0: result := 'ий'; 1: result := 'ью'; 2: result := 'ье'; end; 4: case gender of 0: result := 'ьим'; 1: result := 'ьей'; 2: result := 'ьим'; end; 5: case gender of 0: result := 'ьем'; 1: result := 'ьей'; 2: result := 'ьем'; end; end; end; function number900_ord(centi: integer; gender: integer; declension: integer): string; begin case centi of 0:; 1: result := 'сот'+Adjective1( gender, declension); 2: result := 'двухсот'+Adjective1( gender, declension); 3: result := 'трехсот'+Adjective1( gender, declension); 4: result := 'четырехсот'+Adjective1( gender, declension); 5: result := 'пятисот'+Adjective1( gender, declension); 6: result := 'шестисот'+Adjective1( gender, declension); 7: result := 'семисот'+Adjective1( gender, declension); 8: result := 'восьмисот'+Adjective1( gender, declension); 9: result := 'девятисот'+Adjective1( gender, declension); end; end; function number90(decades: integer; declension: integer): string; begin case decades of 0,1:; 2: case declension of 0: Result := 'двадцать'; 1: Result := 'двадцати'; 2: Result := 'двадцати'; 3: Result := 'двадцать'; 4: Result := 'двадцатью'; 5: Result := 'двадцати'; end; 3: case declension of 0: Result := 'тридцать'; 1: Result := 'тридцати'; 2: Result := 'тридцати'; 3: Result := 'тридцать'; 4: Result := 'тридцатью'; 5: Result := 'тридцати'; end; 4: case declension of 0: Result := 'сорок'; 1: Result := 'сорока'; 2: Result := 'сорока'; 3: Result := 'сорок'; 4: Result := 'сорока'; 5: Result := 'сорока'; end; 5: case declension of 0: Result := 'пятьдесят'; 1: Result := 'пятидесяти'; 2: Result := 'пятидесяти'; 3: Result := 'пятьдесят'; 4: Result := 'пятьюдесятью'; 5: Result := 'пятидесяти'; end; 6: case declension of 0: Result := 'шестьдесят'; 1: Result := 'шестидесяти'; 2: Result := 'шестидесяти'; 3: Result := 'шестьдесят'; 4: Result := 'шестьюдесятью'; 5: Result := 'шестидесяти'; end; 7: case declension of 0: Result := 'семьдесят'; 1: Result := 'семидесяти'; 2: Result := 'семидесяти'; 3: Result := 'семьдесят'; 4: Result := 'семьюдесятью'; 5: Result := 'семидесяти'; end; 8: case declension of 0: Result := 'восемьдесят'; 1: Result := 'восьмидесяти'; 2: Result := 'восьмидесяти'; 3: Result := 'восемьдесят'; 4: Result := 'восьмьюдесятью'; 5: Result := 'восьмидесяти'; end; 9: case declension of 0: Result := 'девяносто'; 1: Result := 'девяноста'; 2: Result := 'девяноста'; 3: Result := 'девяносто'; 4: Result := 'девяноста'; 5: Result := 'девяноста'; end; end; end; function number90_ord(decades: integer; gender: integer; declension: integer): string; begin case decades of 0,1:; 2: Result := 'двадцат' + Adjective1(gender,declension); 3: Result := 'тридцат' + Adjective1(gender,declension); 4: Result := 'сороков' + Adjective2(gender,declension); 5: Result := 'пятидесят' + Adjective1(gender,declension); 6: Result := 'шестидесят' + Adjective1(gender,declension); 7: Result := 'седидесят' + Adjective1(gender,declension); 8: Result := 'восьмидесят' + Adjective1(gender,declension); 9: Result := 'девяност' + Adjective1(gender,declension); end; end; function number19(number: integer; declension: integer): string; var p1,p2: string; begin case declension of 0: p2 := 'надцать'; 1: p2 := 'надцати'; 2: p2 := 'надцати'; 3: p2 := 'надцать'; 4: p2 := 'надцатью'; 5: p2 := 'надцати'; end; case number of 11: p1 := 'один'; 12: p1 := 'две'; 13: p1 := 'три'; 14: p1 := 'четыр'; 15: p1 := 'пят'; 16: p1 := 'шест'; 17: p1 := 'семь'; 18: p1 := 'восемь'; 19: p1 := 'девят'; end; Result := p1 + p2; end; function number19_ord(number: integer; gender: integer; declension: integer): string; var p1: string; begin case number of 11: p1 := 'один'; 12: p1 := 'две'; 13: p1 := 'три'; 14: p1 := 'четыр'; 15: p1 := 'пят'; 16: p1 := 'шест'; 17: p1 := 'семь'; 18: p1 := 'восемь'; 19: p1 := 'девят'; end; Result := Result +'надцат'+Adjective1(gender,declension) end; function number9(number: integer; gender: integer; declension: integer): string; begin case number of 0:; 1: case declension of 0: case gender of 0: Result := 'один'; 1: Result := 'одна'; 2: Result := 'одно'; end; 1: case gender of 0: Result := 'одного'; 1: Result := 'одной'; 2: Result := 'одного'; end; 2: case gender of 0: Result := 'одному'; 1: Result := 'одной'; 2: Result := 'одному'; end; 3: case gender of 0: Result := 'один'; 1: Result := 'одну'; 2: Result := 'одно'; end; 4: case gender of 0: Result := 'одним'; 1: Result := 'одной'; 2: Result := 'одним'; end; 5: case gender of 0: Result := 'одном'; 1: Result := 'одной'; 2: Result := 'одном'; end; end; 2: case declension of 0: case gender of 0,2: Result := 'два'; 1: Result := 'две'; end; 1: Result := 'двух'; 2: Result := 'двум'; 3: Result := 'двух'; 4: Result := 'двумя'; 5: Result := 'двух'; end; 3: case declension of 0: Result := 'три'; 1: Result := 'трех'; 2: Result := 'трем'; 3: Result := 'три'; 4: Result := 'тремя'; 5: Result := 'трех'; end; 4: case declension of 0: Result := 'четыре'; 1: Result := 'четырех'; 2: Result := 'четырем'; 3: Result := 'четыре'; 4: Result := 'четырьмя'; 5: Result := 'четырех'; end; 5: case declension of 0: Result := 'пять'; 1: Result := 'пяти'; 2: Result := 'пяти'; 3: Result := 'пять'; 4: Result := 'пятью'; 5: Result := 'пяти'; end; 6: case declension of 0: Result := 'шесть'; 1: Result := 'шести'; 2: Result := 'шести'; 3: Result := 'шесть'; 4: Result := 'шестью'; 5: Result := 'шести'; end; 7: case declension of 0: Result := 'семь'; 1: Result := 'семи'; 2: Result := 'семи'; 3: Result := 'семь'; 4: Result := 'семью'; 5: Result := 'семи'; end; 8: case declension of 0: Result := 'восемь'; 1: Result := 'восьми'; 2: Result := 'восьми'; 3: Result := 'восемь'; 4: Result := 'восемью'; 5: Result := 'восьми'; end; 9: case declension of 0: Result := 'девять'; 1: Result := 'девяти'; 2: Result := 'девяти'; 3: Result := 'девять'; 4: Result := 'девятью'; 5: Result := 'девяти'; end; end; end; function number9_ord(number: integer; gender: integer; declension: integer): string; begin case number of 1: result := 'перв' + Adjective1(gender,declension); 2: result := 'втор' + Adjective2(gender,declension); 3: result := 'трет' + Adjective3(gender,declension); 4: result := 'четверт' + Adjective1(gender,declension); 5: result := 'пят' + Adjective1(gender,declension); 6: result := 'шест' + Adjective2(gender,declension); 7: result := 'седьм' + Adjective2(gender,declension); 8: result := 'восьм' + Adjective2(gender,declension); 9: result := 'девят' + Adjective1(gender,declension); end; end; function number999(number: integer; gender: integer; declension: integer): string; begin result := number900(number div 100, declension); number := number mod 100; case number of 0..9: result := result + ' ' + number9(number,gender,declension); 11..19: result := result + ' ' + number19(number,declension); else begin result := result +' '+ number90(number div 10,declension); number := number mod 10; result := result +' '+ number9(number,gender,declension); end; end; end; function number999_ord(number: integer; gender: integer; declension: integer): string; var top,rem: integer; begin top := number div 100; rem := number mod 100; if rem = 0 then begin result := number900_ord(top,gender,declension); exit; end; result := number900(top,0); top := rem; rem := top mod 10; case top of 1..9: result := result + ' ' + number9_ord(top,gender,declension); 11..19: result := result + ' ' + number19_ord(top,gender,declension); else begin if rem = 0 then result := result +' '+ number90_ord(top div 10,gender,declension) else result := result +' '+ number90(top div 10, 0) + ' ' + number9_ord(rem,gender,declension); end; end; end; end.