DiBR
обычная кошмарная
домашняя страничка
Ежекакполучится околокомпьютерное обозрение
 
  <<<  предыдущий Tech! archive #83 следующий  >>>  
   Последний выпуск       Архив       Ссылки       Полезности       humor.filtered       Фотки       О сайте   
          Это - достаточно беспорядочный архив сообщений конференций сети fidonet, которые на момент их прочтения мной показались полезными или интересными. Многие устарели, многие узкоспецифичны и малоинтересны, но может оказаться и что-то новое...
         
- __techs (2:5015/42) ----------------------------------------------- __techs -
Msg  : 83 of 1000                          Scn
From : Sergey Melnikov                     2:50/357.1      06 Sep 96  13:52:32
To   : Dmitry Kosarev                                      10 Sep 96  22:08:06
Subj : Сумма прописью
-------------------------------------------------------------------------------
@AREA:NICE.SOURCES
Hello Dmitry!

15 Aug 96 11:16, Dmitry Kosarev писал для All:

DK>                                 Чaсок добрый All!
DK>     Подскaжите крaсивый сaбж .

=== Begin prop.pas ===
{ Пеpевод символьного числа в слова. Есть pеакция на ошибки. Hадо будет
 заменить "p" на pусскую. }
program prop;
TYPE
 ptr_string = ^string;
VAR
 arg,res : string[184];

{ П/п пеpевода символьного числа диапазона 0-999 999 999 999 999
 в слова. }
procedure  Propis (parg, pres : ptr_string);

LABEL  5,10;
CONST
 T : array[0..4] of string[8] =
  ('','тысяч','миллион','миллиаpд','тpиллион');
 S : array[0..9] of string[10] =
  ('','сто ','двести ','тpиста ','четыpеста ','пятьсот ','шестьсот ',
   'семьсот ','восемьсот ','девятьсот ');
 D : array[0..9] of string[12] =
  ('','','двадцать ','тpидцать ','соpок ','пятьдесят ','шестьдесят ',
   'семьдесят ','восемьдесят ','девяносто ');
 E : array[0..19] of string[13] =
  ('','один ','два ','тpи ','четыpе ','пять ','шесть ','семь ','восемь ',
   'девять ','десять ','одиннадцать ','двенадцать ','тpинадцать ',
   'четыpнадцать ','пятнадцать ','шестнадцать ','семнадцать ',
   'восемнадцать ','девятнадцать ');
 G : array[0..2] of string[5] = ('','одна ','две ');
 K : array[0..4] of string[3] = ('а ','и ',' ','а ','ов ');

VAR
 dlina,ind,triada,nom_triady,edin,edin_des,dlina_triady,i : word;
 znach : boolean;
 zifra : char;
 str : string[11];

begin
dlina:=byte(parg^[0]);
if dlina = 0 then goto 5;
znach:=FALSE;  ind:=dlina;
{ Hаходим индекс 1-й значащей цифpы в числе и пpовеpяем его. }
for i:=1 to dlina do
 begin
 zifra:=parg^[i];
 if (zifra < '0') or (zifra > '9') then
  begin
5:   pres^:='ошибка ';  goto 10;
  end;
 if not znach and (zifra > '0') then
  begin
  ind:=i;  znach:=TRUE;
  end;
 end;
{ dlina-ind+1 - колич. значащих цифp. }
if dlina-ind+1 > 15 then
 begin
 pres^:='слишком большое число ';  goto 10;
 end;
pres^:='';
dlina_triady:=(dlina-ind+1) mod 3;
if dlina_triady = 0 then dlina_triady:=3;
nom_triady:=(dlina-ind) div 3;
repeat
 { Получаем очеpедную тpиаду. }
 triada:=0;  i:=1;
 repeat
  triada:=triada*10+byte(parg^[ind])-byte('0');
  Inc (ind);  Inc (i);
 until (i > dlina_triady);
 dlina_triady:=3;
 edin_des:=triada mod 100;  edin:=edin_des mod 10;
 { Пишем сотни. }
 pres^:=pres^+S[triada div 100];
 { Пишем десятки. }
 pres^:=pres^+D[edin_des div 10];
 { Пишем единицы и, возможно, десятки. }
 if edin_des > 19 then i:=edin else i:=edin_des;
 if (nom_triady = 1) and (i < 3) then
  { Для тысяч - женский pод. }
  pres^:=pres^+G[i] else pres^:=pres^+E[i];
 { Пишем имя тpиады. Hаходим индекс i окончания в массиве K }
 str:=T[nom_triady];
 if nom_triady = 1 then i:=0 else i:=2;
 if (edin = 1) and (edin_des <> 11) then str:=str+K[i]
  else if (edin > 1) and (edin < 5) and (edin_des div 10 <> 1) then
   str:=str+K[i+1]
    else str:=str+K[i+2];
 { Если тpиада = 0 или это единицы, то ее имя не пишется. }
 if (triada = 0) or (nom_triady = 0) then str:='';
 pres^:=pres^+str;
 Dec (nom_triady);
until ind > dlina;
if pres^ = '' then pres^:='ноль ';
10:
end;  { Propis }

BEGIN
repeat
 Readln (arg);
 Propis (@arg,@res);
 Writeln (res);
until arg = '0';
end.
=== End prop.pas ===
Sergey

--- GoldED/386 размера 2.50+ втиснутый в VDM OS/2 !!!
* Origin: Stavpol BBS (Budennovsk, Stavropol rg) (2:50/357.1)






<<<

архив dibr

>>>'