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

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

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

 
 Ответить  Открыть новую тему 
> Перевод дроби из 10 в N-ричную
s3ct
сообщение 27.05.2006 19:31
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 27.05.2006 19:35
Сообщение #2


Гость






Ищи в поиске (в разделе Дельфи), там точно был рабочий код... По-моему, тема называлась "Калькулятор", или что-то типа этого...
 К началу страницы 
+ Ответить 
s3ct
сообщение 27.05.2006 19:44
Сообщение #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 - 27.05.2006 19:54
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 27.05.2006 19:52
Сообщение #4


Гость






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

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





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

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


Исправил smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
antonioSP
сообщение 28.05.2006 20:05
Сообщение #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

 



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