Неверов Евгений Викторович
Меню сайта
Категории раздела
Программирование на языке Паскаль [27]
В данной категории представлены новые функции, созданные на языке Паскаль, которые могут пригодиться при написании своих программ
Программирование на Delphi [18]
В данной категории представлены полезные подпрограммы, которые могут пригодиться при написании своих программ, а также рассматриваются примеры готовых проектов, создаваемых в среде программирования Delphi
Программирование на HTML [0]
В данной категории рассматриваются примеры готовых проектов, создаваемых на языке HTML
Прочее [0]
Свободная тематика
Мини-чат
200
Наш опрос
Как Вы думаете, сколько времени люди проживут на Земле?
Всего ответов: 32
Статистика

Рейтинг@Mail.ru
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » Статьи » Программирование на языке Паскаль [ Добавить статью ]

Запись числа прописью
function ChisloPropis(n: int64): string;
const Chislo1000: array[1..6, 0..2] of string = (('тысяча', 'тысячи', 'тысяч'),
         ('миллион', 'миллиона', 'миллионов'),
         ('миллиард', 'миллиарда', 'миллиардов'),
         ('триллион', 'триллиона', 'триллионов'),
         ('квадриллион', 'квадриллиона', 'квадриллионов'),
         ('квинтиллион', 'квинтиллиона', 'квинтиллионов'));
      Chislo100: array[1..9] of string = ('сто', 'двести', 'триста',
         'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот',
         'девятьсот');
      Chislo10: array[2..9] of string = ('двадцать', 'тридцать', 'сорок',
         'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто');
      Chislo1: array[0..19] of string = ('ноль', 'один', 'два', 'три', 'четыре',
         'пять', 'шесть', 'семь', 'восемь', 'девять', 'десять', 'одиннадцать',
         'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать',
         'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать');
      Chislo1_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:=Chislo100[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+Chislo10[b];
         If a>0 then
         begin
            If Result<>'' then
               Result:=Result+' ';
            s:=Chislo1[a]; //два миллиона
            If (n1000=1) and (a>=1) and (a<=2) then //один или одна (два или две)
               s:=Chislo1_2[a]; //две тысячи
            Result:=Result+s;
         end;
      end else
         If a>0 then
         begin
            s:=Chislo1[a]; //два миллиона
            If (n1000=1) and (a>=1) and (a<=2) then //один или одна (два или две)
               s:=Chislo1_2[a]; //две тысячи
            Result:=Result+s;
         end;
      If (n1000>0) and (Result<>'') then
      begin
         Result:=Result+' ';
         If n1000>High(Chislo1000) then
         begin
            Result:=Format('%s(x 10^%d)', [Result, 3*n1000]);
            Exit;
         end;
         s:=Chislo1000[n1000, 2];
         If a=1 then
            s:=Chislo1000[n1000, 0];
         If (a>=2) and (a<=4) then
            s:=Chislo1000[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:=Chislo1[0];
end;

где

n - исходное число.

Например, ChisloPropis(0) выведет 'ноль'; ChisloPropis(-2000) выведет 'минус две тысячи'; ChisloPropis(2000000) выведет 'два миллиона'; ChisloPropis(974012500000641000) выведет 'девятьсот семьдесят четыре квадриллиона двенадцать триллионов пятьсот миллиардов шестьсот сорок одна тысяча'; ChisloPropis(High(Int64)) выведет 'девять квинтиллионов двести двадцать три квадриллиона триста семьдесят два триллиона тридцать шесть миллиардов восемьсот пятьдесят четыре миллиона семьсот семьдесят пять тысяч восемьсот семь'.

Категория: Программирование на языке Паскаль | Добавил: newerow1989 (06.08.2017 11:05 )
Просмотров: 185 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Все смайлы
Код *:
Поиск
Друзья сайта
  • Создать сайт
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Все проекты компании
  • Copyright MyCorp © 2018
    Автор этого сайта: Неверов Евгений Викторович

    Мои координаты
    Бесплатный конструктор сайтов - uCozЯндекс.Метрика