вОт имеется код на паскале. делает он следующее: переводит из десятичной системы счисления в i-ичную. но так как я начинающий в паскале, то большинство строчек мне непонятны. прокоментируйте строчки пожалуйста, что какая делает. то есть что в них происходит. спасибо.
function DecToOther(x:longint;R:word):string;
var ost:longint;
s,st,chislo:string;
i:integer;
begin
chislo:='';s:='';st:='';
repeat
ost:=x mod R;
x:=x div R;
if ost>9then
st:=chr(ord('A')-10+ost)
else str(ost,st);
s:=s+st;
until x=0;
for i:=1to length(s) do
chislo:=chislo+s[length(s)-i+1];
DecToOther:=chislo;
end;
вот вот. как-то запутано все написано... но всё же мне надо именно это прокоментировать .. help!
volvo
11.05.2007 19:58
function DecToOther(x:longint; R:word): string;
var
ost: longint;
s, st, chislo: string;
i: integer;
begin{ задаем начальные значения переменным - все "пусто" }
chislo:='';s:='';st:='';
{ повторяем... }repeat
ost:=x mod R; { запоминаем остаток от деления числа на основание с/с }
x:=x div R; { а теперь, собственно, делим заданное число на основание с/с }{ теперь надо "приписать" цифру или букву, соответствующую остатку, к результату... }{
здесь есть 2 ветви - если остаток > 9 - то это буква от A и дальше, тогда надо к коду "A"
прибавить остаток и отнять 10 (отнимать - потому что 10 в 16-ричной с/с соответствует
A, и если остаток был равен 10, то он как раз и преобразуется в букву "А")
}if ost > 9then st:=chr(ord('A')-10+ost)
else str(ost,st); { иначе (остаток меньше 10) - это просто число, которое переводится в строковое представление }{
Вот, собственно, добавляем остаток (уже переведенный в строку) к текущему результату (почему-то в конец,
хотя по алгоритму надо бы приписывать остаток спереди)
}
s:=s+st;
until x=0; { ... а продолжается это все, пока не обработано все исходное число, т.е. пока в результате DIV не был получен 0... }{ Это таким оригинальным способом переворачивается строка - вот почему, оказывается, число приписывали сзади }for i:=1to length(s) do
chislo:=chislo+s[length(s)-i+1];
{ и возвращаем результат функции }
DecToOther:=chislo;
end;
BND
11.05.2007 21:01
Цитата(volvo @ 11.05.2007 19:58)
skipped
и вновь благодарен за оказанную помощь =)
BND
11.05.2007 21:23
Цитата(volvo @ 11.05.2007 19:58)
...
{ Это таким оригинальным способом переворачивается строка - вот почему, оказывается, число приписывали сзади }for i:=1to length(s) do
chislo:=chislo+s[length(s)-i+1];
....
еще вопросик: что значит "ПЕРЕВОРАЧИВАЕТСЯ СТРОКА" ? этого я что-то вапще понять не могу что-то.. что тут происходит )
volvo
11.05.2007 21:29
Было: s = '123456' - стало: chislo = '654321'...
Как видишь, chislo содержит перевернутую строку s.
BND
11.05.2007 21:52
ааа. чето я туплю... вот еще назрел вопросик, тему новую думаю не буду создавать. касательно языка СИ. volvo ты делал, если помнишь. можно озвучить что тут делается. конкретно непонятно что такое "...==null". еще параметр "wt" и почему s(20) ?