Показать сообщение отдельно
  #7  
Старый 29.07.2009, 10:05
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

Вот тоже функции по преобразованиям :

Код:
function Convert_Int10_to_Another(v10 : cardinal; BaseAnother : integer) : string;
//Перевод целого 10-чного числа (v10) в систему счисления
//с основанием (BaseAnother [2..36])
//Функция возвращает представление числа
//в заданной системе счисления 
Var
  vFrac : integer;  //остаток по модулю (основание)
  vFracStr : string;//строковое представления остатка
begin
  Result:='';
  if (BaseAnother>1) and (BaseAnother<=36) then begin
     repeat
       vFrac:=v10 MOD BaseAnother; //v10 – (v10 div BaseAnother)*BaseAnother
       v10:=v10 DIV BaseAnother;   //trunc(v10/BaseAnother)
       if vFrac>9 then begin
          //Это буква латинского алфавита 
          vFracStr:=CHR(ORD('A')-10+vFrac)
       end
       else begin
          //переводим остаток в строковое представление
          STR(vFrac,vFracStr);
       end;
       Result:=Result+vFracStr;
     until v10=0;
     //Инвертируем результат
     Result:=InversionString(Result);
  end;
end;


function Convert_IntAnother_to_10(vAnother : string; BaseAnother : integer) : cardinal;
//Перевод целого числа (vAnother) из системы счисления BaseAnother [2..36]  
//в десятичную систему счисления
//Функция возвращает представление числа
//в десятичной системе счисления
var
  i : integer;
  Res, ValNum : integer;
begin
  Result:=0;
  if (BaseAnother>1) and (BaseAnother<=36) then begin
     vAnother:=Trim(vAnother);
     if length(vAnother)>0 then begin
        vAnother:=AnsiUpperCase(vAnother);
        for i:=1 to length(vAnother) do
         begin
          //Конвертируем текущий символ в число
          VAL(vAnother[i],ValNum,Res);
          if Res<>0 then begin
             //если это не число - считаем,
             //что буква латинского алфавита
             //и вычисляем по позиции
             ValNum:=10+ORD(vAnother[i])-ORD('A');
          end;
          //Вычисляем соответствующую степень и суммируем
          Result:=Result+sp_XpowerN(BaseAnother,length(vAnother)-i)*ValNum;
        end;
     end;
  end;
end;



function sp_XpowerN(X, N :integer ):cardinal;
//X в степени N
var
 i : integer;
begin
  Result:=1;
  for i:=1 to N do
   begin
    Result:=Result*X;
  end;
end;

function InversionString(Sx : string) : string;
//Инвертировать строку
Var
  i : integer;
begin
  Result:=Sx;
  if Length(Sx)>0 then begin
     Result:='';
     for i:=Length(Sx) downto 1 do
      begin
        Result:=Result+Sx[i];
     end;
  end;
end;


Ответить с цитированием