465 lines
15 KiB
ObjectPascal
465 lines
15 KiB
ObjectPascal
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.
|