Показать сообщение отдельно
  #3  
Старый 20.12.2007, 12:06
Аватар для Rokuell
Rokuell Rokuell вне форума
Активный
 
Регистрация: 27.12.2006
Адрес: Псков
Сообщения: 274
Версия Delphi: Delphi 7
Репутация: 497
Восклицание Функция

Сам писал такую программу, кидаю функцию для перевода из людой системы в любую:
Код:
   function SysToSys(Num:string; OldSys,NewSys:byte):string;
   {подпрограмма возведения числа в степень}
   function InStep(Ch,St:byte):integer;
   var i:byte;
   begin
   Result:=1;
   if St>0 then
   for i:=1 to St do Result:=Result*Ch;
   end;
   {основная часть}
   var i,Rez:integer; L:byte;
   begin
   {перевод числа ( Rez ) в десятичную систему из старой ( OldSys ) }
   Rez:=0; L:=Length(Num);
   for i:=1 to L do Num[i]:=UpCase(Num[i]);
   for i:=1 to L do
     if Copy(Num,i,1)[1] in ['A'..'Z'] then
      Rez:=Rez+(Byte(Copy(Num,i,1)[1])-55)*InStep(OldSys,L-i)
     else Rez:=Rez+StrToInt(Copy(Num,i,1))*InStep(OldSys,L-i);
   {перевод числа ( Rez ) в новую систему ( NewSys ) из десятичной}
   WHILE Rez>= NewSys DO
   BEGIN
    if  (Rez mod NewSys) in [10..35] then
     Result:=Char(55+(Rez mod NewSys))+Result
    else
     Result:=IntToStr(Rez mod NewSys)+Result;
    Rez:=Rez div NewSys;
   END;
   if Rez in [10..35] then Result:=Char(55+Rez)+Result
   else Result:=IntToStr(Rez)+Result;
   end;
где Num - исходное число в виде строки
OldSys,NewSys - стараю и новая системы счисления (в интервале [2..36])
Возвращает результат в виде строки
Ответить с цитированием