Суть работы, функция FromDec ToDec |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Суть работы, функция FromDec ToDec |
Taur |
Сообщение
#1
|
Группа: Пользователи Сообщений: 3 Пол: Мужской Репутация: 0 |
Люди помогите, очень нужно подробное описание этих функций.
Точнее как она работает и значения всех переменных. 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; n - это переменная или строка mod - остаток radix - та с/с в которую мы переводим s:=digit[(n mod radix)+1]+s; - что происходит в данном выражении? |
Taur |
Сообщение
#2
|
Группа: Пользователи Сообщений: 3 Пол: Мужской Репутация: 0 |
C s:=digit[(n mod radix)+1]+s; все понятно. спс volvo.
что касается зачем: Я понимаю что эти функции предназначены для перевода чисел из 1-й с/с в другую, и что они прекрасно работают. Но препод не станет принимать программу если я буду не в силах ему обьяснить принцип ее работы. Еще если не сложно мне бы хотелось узнать что происходит в данном условии и выражении: while (n[1]='0') and (length(n) > 1) do delete(n,1,1); for i:=1 to length(n) do m:=m*radix+pos(n[i],digit)-1; (функция ToDec) p.s. заранее большое спасибо. Сообщение отредактировано: Taur - |
Lapp |
Сообщение
#3
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
В этой строчке:
while (n[1]='0') and (length(n) > 1) do delete(n,1,1);- убираются левые нули. То есть число 000123 приводится к виду 123. Вторая строчка: for i:=1 to length(n) do m:=m*radix+pos(n[i],digit)-1; - это по сути реализация определения записи в n-ричной СС. На примере десятичной (то есть radix=10): a4a3a2a1a0 = a4*10000 + a3*1000 + a2*100 + a1*10 + a0 например: 620722 = 6*10000 + 2*1000 + 0*100 + 7*10 + 2 Если сгруппировать вот так: 620722 = ((((6*10) + 2)*10 + 0)*10 + 7)*10 + 2 - то получится как раз то, что написано в той строчке. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Текстовая версия | 30.04.2024 0:36 |