| 
 QR-код
  | 
 
 
  
  | 
 
 
 | 
 Категории раздела
  | 
 
 
 
					| 
						Программирование на языке Паскаль  [26] 
 В данной категории представлены новые функции, созданные на языке Паскаль, которые могут пригодиться при написании своих программ 
					 |  
					| 
						Программирование на Delphi  [19] 
 В данной категории представлены полезные подпрограммы, которые могут пригодиться при написании своих программ, а также рассматриваются примеры готовых проектов, создаваемых в среде программирования Delphi 
					 |  
					| 
						Программирование на HTML  [1] 
 В данной категории рассматриваются примеры готовых проектов, создаваемых на языке HTML 
					 |  
					| 
						Мои программы  [1] 
 Описание разработанных автором программ. 
					 |  
					| 
						Online-программы  [2] 
					 |  
					| 
						Прочее  [42] 
 Свободная тематика 
					 |   
  | 
 
 
 | 
 Наш опрос
  | 
 
 | 
 
  | 
 
 
 | 
 Статистика
  | 
 
 
 
 Онлайн всего: 1  Гостей: 1  Пользователей: 0  
  | 
 
 
 
 | 
 
 
  
 
 Запись числа прописью 
 
 
 
 
 function NumberWords(n: int64): string;
const Words1000: array[1..6, 0..2] of string =
        (('тысяча', 'тысячи', 'тысяч'),
         ('миллион', 'миллиона', 'миллионов'),
         ('миллиард', 'миллиарда', 'миллиардов'),
         ('триллион', 'триллиона', 'триллионов'),
         ('квадриллион', 'квадриллиона', 'квадриллионов'),
         ('квинтиллион', 'квинтиллиона', 'квинтиллионов'));
      Words100: array[1..9] of string =
        ('сто', 'двести', 'триста', 'четыреста', 'пятьсот',
         'шестьсот', 'семьсот', 'восемьсот', 'девятьсот');
      Words10: array[2..9] of string =
        ('двадцать', 'тридцать', 'сорок', 'пятьдесят',
         'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто');
      Words1: array[0..19] of string =
        ('ноль', 'один', 'два', 'три', 'четыре', 'пять',
         'шесть', 'семь', 'восемь', 'девять', 'десять', 'одиннадцать',
         'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать',
         'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать');
      Words1_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:=Words100[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+Words10[b];
         if a>0 then
         begin
            if Result<>'' then
               Result:=Result+' ';
            s:=Words1[a]; // два миллиона
            if (n1000=1) and (a>=1) and (a<=2) then // один или одна (два или две)
               s:=Words1_2[a]; // две тысячи
            Result:=Result+s;
         end;
      end else
         if a>0 then
         begin
            s:=Words1[a]; // два миллиона
            if (n1000=1) and (a>=1) and (a<=2) then // один или одна (два или две)
               s:=Words1_2[a]; // две тысячи
            Result:=Result+s;
         end;
      if (n1000>0) and (Result<>'') then
      begin
         Result:=Result+' ';
         if n1000>High(Words1000) then
         begin
            Result:=Format('%s(x 10^%d)', [Result, 3*n1000]);
            Exit;
         end;
         s:=Words1000[n1000, 2];
         if a=1 then
            s:=Words1000[n1000, 0];
         if (a>=2) and (a<=4) then
            s:=Words1000[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:=Words1[0];
end;
  
 где: 
 
 Например, 
 
 NumberWords(0) выведет
 'ноль'; 
 NumberWords(-2000) выведет
 'минус две тысячи'; 
 NumberWords(2000000) выведет
 'два миллиона'; 
 NumberWords(974012500000641000) выведет
 'девятьсот семьдесят четыре квадриллиона двенадцать
 триллионов пятьсот миллиардов шестьсот сорок одна тысяча'; 
 NumberWords(High(Int64)) выведет
 'девять квинтиллионов двести двадцать три квадриллиона
 триста семьдесят два триллиона тридцать шесть миллиардов восемьсот пятьдесят
 четыре миллиона семьсот семьдесят пять тысяч восемьсот семь'. 
  
		
	 
 
  | 
  
 
 | 
 
 Категория: 
 Программирование на языке Паскаль
  | 
 Добавил: 
 newerow1989
  | 
  
  
 
  | 
  
 
 | 
 Просмотров: 
 1535 
 
 
  | 
 Рейтинг: 
 0.0/0
  | 
  
  
 
 
 
 
  | 
  
  
 | 
 
 |