QR-код |
 |
Категории раздела |
Программирование на языке Паскаль
[26]
В данной категории представлены новые функции, созданные на языке Паскаль, которые могут пригодиться при написании своих программ
|
Программирование на Delphi
[19]
В данной категории представлены полезные подпрограммы, которые могут пригодиться при написании своих программ, а также рассматриваются примеры готовых проектов, создаваемых в среде программирования Delphi
|
Программирование на HTML
[1]
В данной категории рассматриваются примеры готовых проектов, создаваемых на языке HTML
|
Мои программы
[1]
Описание разработанных автором программ.
|
Online-программы
[2]
|
Прочее
[42]
Свободная тематика
|
|
Наш опрос |
|
Статистика |
Онлайн всего: 1 Гостей: 1 Пользователей: 0
|
|
Запись числа прописью
function NumberWords(n: int64): string;
const Number1000: array[1..6, 0..2] of string =
(('тысяча', 'тысячи', 'тысяч'),
('миллион', 'миллиона', 'миллионов'),
('миллиард', 'миллиарда', 'миллиардов'),
('триллион', 'триллиона', 'триллионов'),
('квадриллион', 'квадриллиона', 'квадриллионов'),
('квинтиллион', 'квинтиллиона', 'квинтиллионов'));
Number100: array[1..9] of string =
('сто', 'двести', 'триста', 'четыреста', 'пятьсот',
'шестьсот', 'семьсот', 'восемьсот', 'девятьсот');
Number10: array[2..9] of string =
('двадцать', 'тридцать', 'сорок', 'пятьдесят',
'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто');
Number1: array[0..19] of string =
('ноль', 'один', 'два', 'три', 'четыре', 'пять',
'шесть', 'семь', 'восемь', 'девять', 'десять', 'одиннадцать',
'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать',
'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать');
Number1_2: array[1..2] of string = ('одна', 'две');
var n1000: byte;
s, znak: string;
function Length3(a, n1000: integer): string;
var b: byte;
s: string;
begin
a:=a mod 1000; // для защиты
b:=a div 100;
a:=a mod 100;
if b>0 then
Result:=Number100[b] else
Result:='';
if (a>0) and (Result<>'') then
Result:=Result+' ';
if a>=20 then
begin
b:=a div 10;
a:=a mod 10;
if b>0 then
Result:=Result+Number10[b];
if a>0 then
begin
if Result<>'' then
Result:=Result+' ';
s:=Number1[a]; // два миллиона
if (n1000=1) and (a>=1) and (a<=2) then // один или одна (два или две)
s:=Number1_2[a]; // две тысячи
Result:=Result+s;
end;
end else
if a>0 then
begin
s:=Number1[a]; // два миллиона
if (n1000=1) and (a>=1) and (a<=2) then // один или одна (два или две)
s:=Number1_2[a]; // две тысячи
Result:=Result+s;
end;
if (n1000>0) and (Result<>'') then
begin
Result:=Result+' ';
if n1000>High(Number1000) then
begin
Result:=Format('%s(x 10^%d)', [Result, 3*n1000]);
Exit;
end;
s:=Number1000[n1000, 2];
if a=1 then
s:=Number1000[n1000, 0];
if (a>=2) and (a<=4) then
s:=Number1000[n1000, 1];
Result:=Result+s;
end;
end;
begin
Result:='';
if n<0 then
znak:='минус ' else
znak:='';
n:=Abs(n);
n1000:=0;
while n>0 do
begin
s:=Length3(n mod 1000, n1000);
Inc(n1000);
if s<>'' then
begin
if Result<>'' then
Result:=' '+Result;
Result:=s+Result;
end;
n:=n div 1000;
end;
Result:=znak+Result;
if Result='' then
Result:=Number1[0];
end;
где:
Например,
NumberWords(0) выведет
'ноль';
NumberWords(-2000) выведет
'минус две тысячи';
NumberWords(2000000) выведет
'два миллиона';
NumberWords(974012500000641000) выведет
'девятьсот семьдесят четыре квадриллиона двенадцать
триллионов пятьсот миллиардов шестьсот сорок одна тысяча';
NumberWords(High(Int64)) выведет
'девять квинтиллионов двести двадцать три квадриллиона
триста семьдесят два триллиона тридцать шесть миллиардов восемьсот пятьдесят
четыре миллиона семьсот семьдесят пять тысяч восемьсот семь'.
|
Категория: Программирование на языке Паскаль | Добавил: newerow1989 (06.08.2017)
|
Просмотров: 1493
| Рейтинг: 0.0/0 |
|
|
|