IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Перевод дроби из 10 в N-ричную
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Код
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 нашел код для перевода только целых чисел, а как быть с дробными ?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Ищи в поиске (в разделе Дельфи), там точно был рабочий код... По-моему, тема называлась "Калькулятор", или что-то типа этого...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Код
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

Сообщение отредактировано: s3ct -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Это - неверный вариант... Верный приведен здесь:
Калькулятор

Цитата(s3ct @ 27.05.2006 19:44)
Нашел только ToDec, помогите модифицировать ее в ToDec
blink.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Исправил smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской

Репутация: -  0  +


Вот мой вариант 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;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 23.08.2017 13:16
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"