|
Вопрос # 1 235/ вопрос решён / |
|
Здравствуйте, уважаемые эксперты!
ПОЖАЛУЙСТА ПОМОГИТЕ!!! Срочно надо алгоритм (блок-схему) программы перевода чисел с одной системы исчисления в другую. От Вас зависит сдам я эту сессию или нет. Заранее спасибо.
P.S. Очень Вас прошу.
 |
Вопрос задал: Саня-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)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|