Помощь - Поиск - Пользователи - Календарь
Полная версия: Разобраться
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
BND
вОт имеется код на паскале. делает он следующее: переводит из десятичной системы счисления в 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>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];
     DecToOther:=chislo;
end;

volvo
Кстати, не самая понятная реализация... То что лежит вот тут:
Общие вопросы по математике.

гораздо проще, согласись...
BND
Цитата(volvo @ 11.05.2007 19:22) *

Кстати, не самая понятная реализация... То что лежит вот тут:
Общие вопросы по математике.

гораздо проще, согласись...


вот вот. как-то запутано все написано...
но всё же мне надо именно это прокоментировать .. help!
volvo
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 > 9 then st:=chr(ord('A')-10+ost) 
    else str(ost,st); { иначе (остаток меньше 10) - это просто число, которое переводится в строковое представление }

    {
      Вот, собственно, добавляем остаток (уже переведенный в строку) к текущему результату (почему-то в конец,
      хотя по алгоритму надо бы приписывать остаток спереди)
     }
    s:=s+st; 
  until x=0; { ... а продолжается это все, пока не обработано все исходное число, т.е. пока в результате DIV не был получен 0... }

  { Это таким оригинальным способом переворачивается строка - вот почему, оказывается, число приписывали сзади }
  for i:=1 to length(s) do
    chislo:=chislo+s[length(s)-i+1];
  
  { и возвращаем результат функции }
  DecToOther:=chislo;
end;
BND
Цитата(volvo @ 11.05.2007 19:58) *

skipped


и вновь благодарен за оказанную помощь =)
BND
Цитата(volvo @ 11.05.2007 19:58) *


...
  { Это таким оригинальным способом переворачивается строка - вот почему, оказывается, число приписывали сзади }
  for i:=1 to length(s) do
    chislo:=chislo+s[length(s)-i+1];
  ....




еще вопросик: что значит "ПЕРЕВОРАЧИВАЕТСЯ СТРОКА" ? этого я что-то вапще понять не могу что-то.. что тут происходит )
volvo
Было: s = '123456' - стало: chislo = '654321'...

Как видишь, chislo содержит перевернутую строку s.
BND
ааа. чето я туплю...
вот еще назрел вопросик, тему новую думаю не буду создавать.
касательно языка СИ. volvo ты делал, если помнишь.
можно озвучить что тут делается. конкретно непонятно что такое "...==null". еще параметр "wt"
и почему s(20) ?
  char s[20], s_dec[20];
  FILE *f_out;
  if ((f_out = fopen("res.txt", "wt")) == NULL) {
     return 1;
  }

вот с си вапще темный лес..
мисс_граффити
круууто!
у меня, например, в десятке программ есть такой отрывок. делают они абсолютно разное. хоть бы ссылку дал, где такое выложено.

fopen - это функция, открывающая файл и возвращающая информацию о том, удачно ли он был открыт.
вот и сравниваем этот результат с NULL'ом
volvo
Дополняю - открывает текстовый файл (это буква "t") для записи ("w")
Lapp
 ! 
Беспрецидентный флуд в теоретическом разделе - да еще и в теме с нелегальным названием!
Закрыто.
BND, получаешь предупреждение.


Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.