Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 235

/ вопрос решён /

Здравствуйте, уважаемые эксперты!
ПОЖАЛУЙСТА ПОМОГИТЕ!!! Срочно надо алгоритм (блок-схему) программы перевода чисел с одной системы исчисления в другую. От Вас зависит сдам я эту сессию или нет. Заранее спасибо.
P.S. Очень Вас прошу.

Саня-1613 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Саня-1613 (статус: Посетитель)
Вопрос отправлен: 27 декабря 2007, 16:29
Состояние вопроса: решён, ответов: 2.

Ответ #1. Отвечает эксперт: Николай Рубан

Здравствуйте, Саня!

Я предложу Вам процедуру, которая переводит число из системы X в систему Y.

procedure SysX_to_SysY(sysX:string; osnX,osnY:integer; var sysY:string; var sysD:integer);
var dec,i,z1,z2,r:integer;
    b,c:string;
begin
  i:=0;
  dec:=0; //число в десятичной системе
  sysY:='';
  while sysX<>'' do  //переводим число из системы Х в десятичную
  begin
    c:=copy(sysX,length(sysX),1);
    delete(sysX,length(sysX),1);
    if i=0 then z2:=1 else z2:=round(exp(i*ln(osnX)));
    if ord(c[1]) > 64 then z1:=ord(c[1])-55
                    else z1:=StrToInt(c);
    dec:=dec+z1*z2; inc(i);
  end;
  sysD:=dec;
  while dec > 0 do //переводим число из десятичной системы в ситему Y
  begin
    r:=dec mod osnY;
    dec:=dec div osnY;
    if r < 10 then b:=IntToStr(r) else b:=chr(ord('A')-10+r);
    sysY:=b+sysY;
  end;
end;

Для Вашей задачи вызвать данную процедуру с соответствующими параметрами.
procedure SysX_to_SysY(sysX:string; osnX,osnY:integer; var sysY:string);
//sysX - число в системе Х
//osnX - основание системы Х
//osnY - основание системы Y
//sysY - число в системе Y

Пример использования:
procedure TForm1.Button4Click(Sender: TObject);
var dd:string;
begin
   SysX_to_SysY('G',17,10,dd); 
   ShowMessage(dd);
end;

Good Luck!!!

Ответ отправил: Николай Рубан (статус: 10-ый класс)
Время отправки: 27 декабря 2007, 22:58
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: min@y™

В пакете RxLib в модуле RxStrUtils.pas есть функция Dec2Numb() - перевод целого числа в любую систему счисления. Может это то, что тебе нужно?

function Dec2Numb(N: Longint; A, B: Byte): string;
var
  C: Integer;
{$IFDEF RX_D4}
  Number: Cardinal;
{$ELSE}
  Number: Longint;
{$ENDIF}
begin
  if N = 0 then Result := '0'
  else begin
{$IFDEF RX_D4}
    Number := Cardinal(N);
{$ELSE}
    Number := N;
{$ENDIF}
    Result := '';
    while Number > 0 do begin
      C := Number mod B;
      if C > 9 then C := C + 55
      else C := C + 48;
      Result := Chr(C) + Result;
      Number := Number div B;
    end;
  end;
  if Result <> '' then Result := AddChar('0', Result, A);
end;

З.Ы. Удачи в сдаче сессии. Я сдал 11 сессий, будет, что вспомнить на свалке... :)))

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 28 декабря 2007, 08:35
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 0.

31 января 2011, 19:30: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:53
Выполнено за 0.03 сек.