Перевод в произвольную систему счисления

Алгоритмы: от сортировки пузырьком до численных методов

Модераторы: C_O_D_E, DeeJayC

Ответить
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

11 апр 2008, 11:38

Первая функция переводит десятичное число x в число в системе счисления с основанием base. Вторая - обратно. Работает только с положительными числами. base должна быть в промежутке 2..36

Код: Выделить всё

function from_decimal(x, base: longint): string;
var res:string; a:integer;
begin
   if x=0 then begin 
     from_decimal:='0';
     exit;
   end;
   res:='';
   while x>0 do
   begin
      a:=x mod base;
      if a<10 then res:=chr(ord('0')+a)+res
      else res:=chr(ord('A')+a-10)+res;
      x:=x div base;
   end;
   from_decimal:=res;
end;

function to_decimal(x:string; base: longint): longint;
var res: longint;
begin
  res:=0;
  while x<>'' do
  begin
    res:=res*base;
    if x[1] in ['0'..'9'] then res:=res+ord(x[1])-ord('0')
    else res:=res+ord(upcase(x[1]))-ord('A')+10;
    delete(x,1,1);
  end;
  to_decimal:=res;
end;
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Serge_Bliznykov
Сообщения: 366
Зарегистрирован: 31 авг 2007, 03:06

12 апр 2008, 14:49

процедура function from_decimal(x, base: longint): string;
1) не описана переменная a (зато описана tmp $-)) tmp и надо использовать вместо a
2) а я бы добавил перед циклом проверку x на ноль - в случае нуля логичнее возращать 0, а не пустую строчку...
по поводу "Работает только с положительными числами." давайте не будем спорить ноль - это положительное число или нет ;-))
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

14 апр 2008, 11:07

Serge_Bliznykov, спасибо, абсолютно верные замечания, поправил.
Просто за три года на этом форуме привык уже писать код непосредственно в браузере, не проверяя его компилятором ;)
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

13 май 2010, 09:19

Поднял тему. Народ три страницы форума не пролистывает в принципе
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Ответить