Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на перевод с.с
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Lodar'
Составить программу, которая вводит натуральное число N и основание системы счисления p, а затем выводит цифры Aк представления N в p – ричной системе.
Вот нашел функцию. Можете подробно прокоментировать каждую строчку плииз?

function _10toR(x:longint;R:word):string;
var x,ost:longint;
s,st,chislo:string;
begin
repeat
ost:=x mod R;
x:=x div R;
if ost>9 then st:=chr(ord('A')-10+ost)
else str(ost,st);
s:=s+st;
until x=0;
for i:=1 to length(s) do
chislo:=chislo+s[length(s)-i+1];
_10toR:=chislo;
end;

volvo
Откуда ты находишь эти функции - непонятно. Вот же есть:
Общие вопросы по математике.
Lodar'
 
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;


тут я так понял максимальная система счисления 16-ричная, а в задаче в любую надо.
и еще не понятны вот эти строки

s:=digit[(n mod radix)+1]+s;
n:=n div radix;


если не трудно поясните подробно плииз
Lodar'
а какая система счисления максимальная?

Добавлено через 2 мин.

s:=digit[(n mod radix)+1]+s;
n:=n div radix;


сам разобрался) но про максимальную с.с вопрос остается открытым
volvo
Цитата
а в задаче в любую надо
Любую, говоришь? Ну, попробуй сделать
  writeln(_10toR(50652, 37));
, когда исправишь в самой функции все ошибки, чтоб она заработала. Посмотри, что будет... А ты говоришь "любую".

Хочешь до С/С с основанием 36 - меняй digit:
digit: string[36]='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
Можешь еще алфавит увеличить, добавить еще какие-нибудь символы, тогда можно будет переводить к бОльшему основанию.

Цитата
поясните подробно плииз
Сначала идешь сюда: Wiki: Перевод из десятичной в произвольную позиционную систему счисления , а потом читаешь комментарии к строкам:

{
Сначала получаем остаток от деления числа на основание С/С, а потом
дописываем к строке-результату _спереди_ символ, который в выбранной
системе счисления (radix) соответствует полученному остатку. Вот и все,
никаких преобразований число->строка, никаких условий, остаток больше
или меньше 10... Все просто. (+1) - потому, что символы в строке индексируются с 1
}
s:=digit[(n mod radix)+1]+s;
{
Ну, остаток мы записали в результат, теперь осталось обработать остальное:
получаем целую часть от деления на основание, и продолжаем по тому же алгоритму.
}
n:=n div radix;
Lodar'
Спасибо большое разобрался!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.