Помощь - Поиск - Пользователи - Календарь
Полная версия: Перевод дроби из 10 в N-ричную
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
s3ct
Код
function FromDec(n, radix:longint):string;
var
    s: String;
const
    digit: string[16]='0123456789ABCDEF';
begin
    s:='';
    repeat
        s:=digit[(n mod radix)+1]+s;
        n:=n div radix;
    until n=0;
    FromDec:=s;
end;

в FAQ нашел код для перевода только целых чисел, а как быть с дробными ?
volvo
Ищи в поиске (в разделе Дельфи), там точно был рабочий код... По-моему, тема называлась "Калькулятор", или что-то типа этого...
s3ct
Код
function ToDec(n:string; radix:longint):real;
var
  _int: longint;
  _frac: real;

  s: string;
  i, p: byte;
const
  digit: string[16]='0123456789ABCDEF';

begin
  p := pos('.', n);
  if p = 0 then s := n
  else s := copy(n, 1, p - 1);

  _int := 0; _frac := 0.0;

  while s[1] = '0' do delete(s, 1, 1);
  for i := 1 to length(s) do
    _int := _int * radix + pos(n[i], digit) - 1;

  if (p <> 0) and (p < length(n)) then begin // <--- Здесь !!!

    s := copy(n, p + 1, 255);
    while s[length(s)] = '0' do delete(s, length(s), 1);

    for i := 1 to length(s) do
      _frac := _frac + 1 / stepen(radix, i);

  end;
  ToDec := _int + _frac;
end;

Нашел только ToDec, помогите модифицировать ее в FromDec smile.gif smile.gif, и думаю это можно будет запостить в FAQ smile.gif
volvo
Это - неверный вариант... Верный приведен здесь:
Калькулятор

Цитата(s3ct @ 27.05.2006 19:44)
Нашел только ToDec, помогите модифицировать ее в ToDec
blink.gif
s3ct
Исправил smile.gif
antonioSP
Вот мой вариант fromdec, вроде потестил работает нормально:
function FromDec(n:real; radix:longint):string;
var
q:real;
i,j:integer;
s,f,u: String;
const
digit: string[16]='0123456789ABCDEF';
begin
u:='';
if n<0 then
begin
u:='-';
n:=abs(n);
end;
if frac(n)>0 then
begin
i:=0;
q:=frac(n);
s:='';
j:=strtoint(floattostr(int(n)));
repeat
s:=digit[(j mod radix)+1]+s;
j:=j div radix;
until j=0;
repeat
q:=frac(q)*radix;
f:=f+digit[trunc(q)+1];
q:=frac(q);
i:=i+1;
until (q=0)or(i=8);;
FromDec:=s+','+f;
end
else
begin
s:='';
j:=trunc(n);
repeat
s:=digit[(j mod radix)+1]+s;
j:=j div radix;
until j=0;
FromDec:=u+s;
end;
end;
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.