Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Системы счисления
|
|||
|---|---|---|---|
|
#18+
Можете, плиз объяснить пошагово, что происходит в каждой их этих функций. Это функции для перевода систем счисления. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Модератор: Просьба использовать тэг [ SRC ] для оформления кода ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2017, 21:19 |
|
||
|
Системы счисления
|
|||
|---|---|---|---|
|
#18+
function FromDec(n,r:longint):string; запись числа n в виде строки-представления в системе счисления с основанием r var s:String; временная локальная строка, где будет формироваться результат const digit:string[16]='0123456789ABCDEF'; константная строка (массив) с "изображениями" цифр системы счисления, ее длиной (16) ограничивается максимальное значение параметра r, иначе произойдет выход за границу массива begin s:=''; формируем пустое "изображение" числа, в него будем добавлять циферки, в принципе "длинные" локальные строки и так инициализируются пустым значением, но не помешает. repeat цикл, обрабатываем циферки числа n, вычеркивая по одной справа налево, пока их не останется (n=0), для числа n=0 должны получить результат '0', поэтому важно что repeat, а не while s:=digit[(n mod r)+1]+s; n mod r взяли самую правую циферку + 1 и увеличили на 1, т.к. нумерация изображений для циферок в строке digit у нас с 1, а не с 0 digit[(n mod r)+1] взяли изображение циферки самой правой циферки s:=digit[(n mod r)+1]+s; и приписали его к текущему накопленному результату слева n:=n div r; откусили обработанную циферку от числа, уменьшив число в r раз until n=0; если число опустело, выходим, иначе обработаем оставшиеся цифры FromDec:=s; end; присваиваем результату нашу временную строку function ToDec(n:string;r:longint):longint; обратная функция - получить число по его представлению в виде строки в системе счисления с основанием r var m,i:longint; временные переменные для "накопления" результата и организации цикла const digit:string[16]='0123456789ABCDEF'; уже знаем что это begin m:=0; пока накопили результат=0 while n[1]='0' do delete(n,1,1); цикл для отброса лидирующих нулей - лишнее - и без него все будет прекрасно работать for i:=1 to length(n) do цикл по всем изображения циферок в строке n m:=m*r+pos(n[i],digit)-1; pos(n[i],digit) ищем позицию изображения n[i] в строке digit, если не найдем - получим 0 и результат будет кривой для кривых данных на входе pos(n[i],digit)-1 уменьшили на 1, чтобы получить циферку по ее позиции, m:=m*r+pos(n[i],digit)-1; приписали циферку справа к накопленному результату, увеличив результат в r раз и добавив циферку ToDec:=m; end; присваиваем результату текущее накопленное значение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2017, 12:17 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=18&tid=1340268]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
54ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
| others: | 13ms |
| total: | 155ms |

| 0 / 0 |
