Re: Как закодировать?

From
Igor Zakhrebetkov ()
To
All
Date
2002-10-07T20:13:28Z
Area
RU.ALGORITHMS
Andrew Ezhguroff wrote:
> А вот в СТАНДАРТНОМ (борландовские извращения меня не интересуют) Паскале

А в СТАНДАРТНОМ Паскале даже файл открыть нельзя - имен у файлов нет.

> битовых операций и сдвигов для целых нет. Так что придется делать через div
> и odd (или mod), да еще контролировать кол-во знаков (из-за "клонирования"
> знакового разряда). Либо через запись с вариантами, где одно поле - целое, а
> второе - множество.

А для примера (только не для флейма по поводу эффективности) еще одна процедура
почти на СТАНДАРТНОМ Паскале со старой запыленной дискеты :))
=============
procedure STRINT(var A: string;
                      N,          { исходное число }
                      RADIX,      { основание числа (1..16) }
                      L: INTEGER  { треб. длина результир.строки }
                         );
       { преобразование  целого числа N в символьную строку A }
       { в соответствии с заданным основанием от 2 до 16 и длиной L  }
  label 99;
  const DIGIT:string[16]='0123456789ABCDEF';
  var I, M: INTEGER;   SIGN: BOOLEAN;
  begin
     if (RADIX<2) or (RADIX>16) then RADIX:=10;
     SIGN:=(N<0);
     if SIGN then N:=-N;
     A[0]:=chr(L);
     repeat
        if L<1 then goto 99;
        M:=N mod RADIX;
        N:=N div RADIX;
        a[L]:=DIGIT[M+1];
        dec(L);
     until N=0;
     if SIGN and (L>0) then
     begin
        a[L]:='-';
        L:=L-1;
     end;
     for I:=1 to L do a[I]:=' ';
99: end { STRINT };
=============
--
Игорь Захребетков

--- Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.2a) Gecko/20020910
 * Origin: Sweet Home (2:5024/11.0)