Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2016, 16:47   #1
DenSeven
Новичок
Джуниор
 
Регистрация: 27.06.2016
Сообщений: 1
По умолчанию Перевести число в q-ичную систему

Натуральное число в p-ичной системе счисления задано своими цифрами, хранящимися в в массиве К(n). Проверить корректность такого представления и перевести число в q-ичную систему ( возможно, число слишком велико, чтобы получить его внутреннее представление; кроме того, p меньше или равно 10 и q меньше или равно10 )
DenSeven вне форума Ответить с цитированием
Старый 27.06.2016, 17:49   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Проверить корректность такого представления
это легко.
если циферки от нуля до P-1 - то число корректно.

Цитата:
перевести число в q-ичную систему ( возможно, число слишком велико, чтобы получить его внутреннее представление
а это не так просто.
Если P и Q не являются одним и тем же числом в разной степени (2, 4, 8, например, или 3 и 9), тогда единственный способ, который я вижу - это использование длинной арифметики.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.06.2016, 18:03   #3
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Перевод чисел из одной системы счисления в другую можно посмотреть здесь.
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 27.06.2016, 18:11   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от newerow1989 Посмотреть сообщение
Перевод чисел из одной системы счисления в другую можно посмотреть здесь.
Угу. Но только если числа укладываются в представление int64
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.06.2016, 00:28   #5
Dekay
Пользователь
 
Регистрация: 21.06.2016
Сообщений: 65
По умолчанию



Цитата:
( возможно, число слишком велико, чтобы получить его внутреннее представление; кроме того, p меньше или равно 10 и q меньше или равно10 )
Dekay вне форума Ответить с цитированием
Старый 28.06.2016, 10:04   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
p:=10; q:=2;
K=(1,0,2,4);

i:=n;
while i>0 do begin
  j:=0;
  t:=1;
  while j<n do begin
    t:=t *p +K[j];
    К[j]:=t div q;
    t:=t mod q;
  end;
  R[i]:=t;
  i:=i-1;
end;
НАПИСАНО В БЛОКНОТЕ!! p>=q !!!

p и q любые чтобы имелась возможность выполнения операций
p mod q; 1=p^0 < q <p^1 =p

p<q ??? находим x=1,2, ...n.... такое что p^(x-1) <q <=p^x . и переводим наше числО(К) в систему p1 =p^x (x-граммы) К1
теперь имеем q<=p1 (т.е. предыдущий случай)
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 28.06.2016 в 10:15.
evg_m вне форума Ответить с цитированием
Старый 28.06.2016, 11:14   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
procedure Recode(p: integer; K: TMarr; q: integer; var R: TMArr);
var
  n, nr: integer;
  i, j, t: integer;
  x: integer;
  rx: extended;
begin
  n:=length(K);
  rx:=ln(q)/ln(p);
  nr:=trunc(n/rx)+1;
  x:=trunc(rx)+1;
  SetLength(R,nr);

  i:=nr-1;
  t:=1;
  while i>=0 do begin
    t:=0;
    j:=0;
    while j<n do begin
      t:=t *p +K[j];
      if (n-1-j) mod x =0 then begin
        K[j]:=t div q;
        t:=t mod q;
      end
      else begin
        K[j]:=0;
      end;
      j:=j+1;
    end;
    R[i]:=t;
    i:=i-1;
  end;

end;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 28.06.2016, 11:48   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

evg_m, супер, работает!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.06.2016, 11:58   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
evg_m, супер, работает!
а на p=2; q:=4; т.е. когда q=p^x;
не уверен в правильности расчетов
Цитата:
Код:
  rx:=ln(q)/ln(p);
  nr:=trunc(n/rx)+1;
  x:=trunc(rx)+1;
для этого случая
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 28.06.2016, 13:11   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
а на p=2; q:=4; т.е. когда q=p^x;
я проверил. работает!
например, 110(2) -> 12(4)
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перевести число в десятичную систему Анна кот Microsoft Office Excel 8 27.11.2013 23:05
Перевести число в римскую систему счисления alexandr017 Общие вопросы C/C++ 1 18.12.2011 18:38
Перевести отрицатьльное дробное число в двоичную систему Иллидан Помощь студентам 0 14.11.2010 13:04
"Число в p-ичной системе счисления. Перевести число в q-ичную систему" и не только :) Zinder Паскаль, Turbo Pascal, PascalABC.NET 4 10.04.2010 14:20
Помогите перевести число из десятичной в шестнадцатиричную систему TAUREN Помощь студентам 5 06.10.2007 14:06