Составить программу, которая вводит натуральное число 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;
Откуда ты находишь эти функции - непонятно. Вот же есть:
http://forum.pascal.net.ru/index.php?s=&showtopic=4535&view=findpost&p=38226
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;
s:=digit[(n mod radix)+1]+s;
n:=n div radix;
а какая система счисления максимальная?
Добавлено через 2 мин.
s:=digit[(n mod radix)+1]+s;
n:=n div radix;
writeln(_10toR(50652, 37));, когда исправишь в самой функции все ошибки, чтоб она заработала. Посмотри, что будет... А ты говоришь "любую".
digit: string[36]='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';Можешь еще алфавит увеличить, добавить еще какие-нибудь символы, тогда можно будет переводить к бОльшему основанию.
{
Сначала получаем остаток от деления числа на основание С/С, а потом
дописываем к строке-результату _спереди_ символ, который в выбранной
системе счисления (radix) соответствует полученному остатку. Вот и все,
никаких преобразований число->строка, никаких условий, остаток больше
или меньше 10... Все просто. (+1) - потому, что символы в строке индексируются с 1
}
s:=digit[(n mod radix)+1]+s;
{
Ну, остаток мы записали в результат, теперь осталось обработать остальное:
получаем целую часть от деления на основание, и продолжаем по тому же алгоритму.
}
n:=n div radix;
Спасибо большое разобрался!