Имя: Пароль:
IT
 
DEC -> HEX. Как?
0 Гефест
 
19.12.08
06:54
Нужно в 7.7 преобразовать число в шестнадцатеричную систему. Как ловчее?
1 ASV
 
19.12.08
06:56
2 Андрюха
 
19.12.08
06:58
Функция ПреобразоватьВ16(Цифра)
Если Цифра = 10 Тогда
Возврат "A";
ИначеЕсли Цифра = 11 Тогда
Возврат "B";
ИначеЕсли Цифра = 12 Тогда
Возврат "С";
ИначеЕсли Цифра = 13 Тогда
Возврат "D";
ИначеЕсли Цифра = 14 Тогда
Возврат "E";
ИначеЕсли Цифра = 15 Тогда
Возврат "F";
Иначе
Возврат Строка(Цифра);
КонецЕсли;
КонецФункции

Процедура ПеревестиВШестнадцатеричное(ДесятичноеЧисло)
Цифра = ДесятичноеЧисло % 16;
Цифра16 = ПреобразоватьВ16(Цифра);
ПолучаемоеЧисло = Цифра16 + ПолучаемоеЧисло;
Если ДесятичноеЧисло > 16 Тогда
Кусок = Цел(ДесятичноеЧисло / 16);
ПеревестиВШестнадцатеричное(Кусок);
КонецЕсли;

КонецПроцедуры
Процедура ДесятичноеЧислоПриИзменении(Элемент)
ЭлементыФормы.ШеснадцатеричноеЧисло.Значение = "";
ПеревестиВШестнадцатеричное(ДесятичноеЧисло);
ЭлементыФормы.ШеснадцатеричноеЧисло.Значение = ПолучаемоеЧисло;
КонецПроцедуры
3 Гефест
 
19.12.08
07:06
Спасибо, сейчас попробую
4 чупа
 
19.12.08
07:07
емае, и этот человек щитает себя программистом :(
5 Гефест
 
19.12.08
07:21
(4) Не просто программистом, а настоящим программистом, который ни в жисть не будет писать то, что уже написано :)
6 smaharbA
 
19.12.08
07:31
(2) цифры 10 не бывает )
7 skunk
 
19.12.08
07:33
(5)то есть ничего
8 YellowRabbit
 
19.12.08
07:45
(2) Мощно! Тут и рекурсия, и глобальные переменные,и индийский код. Я-то, наивный, думал, что одной функцией можно обойтись:)
9 smaharbA
 
19.12.08
07:49
(8) обходись
10 Андрюха
 
19.12.08
07:56
11 YellowRabbit
 
19.12.08
08:02
(8) легко

Функция То16(чсл)
 Если 0 = чсл Тогда
   Возврат "0";
 КонецЕсли;
 результат = "";
 Пока 0 < чсл Цикл
   остаток = чсл % 16;
   Если 10 <= остаток Тогда
     результат = Симв(КодСимв("A") + остаток - 10) + результат;
   Иначе                                      
     результат = строка(остаток) + результат;
   КонецЕсли;
   чсл = цел(чсл / 16);    
 КонецЦикла;
 Возврат результат;
КонецФункции
12 skunk
 
19.12.08
08:11
(8)сделай ... без рекурсии ...


зы: варианты типа этого:


олеСкрипт = создатьобъект("MSScriptControl.ScriptControl");
олеСкрипт.Language = "VBScript";
стрКод =
"function intDecToHex(intValue)
|  intDecToHex = hex(intValue)
|end function";
олеСкрипт.AddCode(стрКод);
сообщить(олеСкрипт.Run("intDecToHex", 10));

не предлагать
13 YellowRabbit
 
19.12.08
08:12
(10) Я рад, что это не твоё творение :)
14 skunk
 
19.12.08
08:13
а чем цикл отличается в данном случает от рекурсии
15 Ygich
 
19.12.08
08:24
(14) цикл от отличается от рекурсии тем что он лучше. у рекурсии вложенность ограничена.
16 ЗлобнийМальчик
 
19.12.08
08:25
(14) а чем вообще цикл отличается от рекурсии???
17 skunk
 
19.12.08
08:39
(15)и какой же максимальный уровень вложенности рекурсии для 1С
18 skunk
 
19.12.08
08:43
(16)рекурсии стек использует ... это считается одним из самых существенных отличий
19 Ygich
 
19.12.08
08:46
(18) ну вот как раз размер стека ограничивает вложенность рекурсии
20 Woldemar177
 
19.12.08
08:58
А можно внешнюю компоненту написать на С / С++ ?
21 DUDE
 
19.12.08
08:59
Мне почему-то кажется, что этот код (DEC -> HEX. Как? и (DEC -> HEX. Как? не будет совсем работать с дробной частью. А в задании не было задано целое оно или действительное.
22 DUDE
 
19.12.08
09:00
Извините, за корявость оформления ссылок на сообщения :(
23 H A D G E H O G s
 
19.12.08
09:05
Вот ни разу не писал преобразований из одной системы счисления в другую.. Глупости это. Все написано до нас..
24 skunk
 
19.12.08
09:06
(19)боюсь в таком случае, для оного это не существенно
25 DUDE
 
19.12.08
09:10
В догонку. Не зря ведь проходили, что такой "прямой" перевод можно делать лишь из двоичной СС, так что только 10ное число -> 2чное -> 16чное будет правильным. То есть, может некоторые числа и получится так "перевести", но это исключение. А вообще надо почитать мат.часть.
26 Woldemar177
 
19.12.08
09:16
Гефест объясни зачем это надо? Просто интересно...
27 Ygich
 
19.12.08
09:17
(24) а ты часом не индиец, раз тебе переполнение стека несущественно?
28 skunk
 
19.12.08
09:25
(27)тогда не индиец скажи ответ на вопрос заданный вам в 17 ... только в конкретных цифрах... а не так вы отмазались в (19)
29 Гефест
 
19.12.08
09:27
(26) Есть список номеров пропусков в десятеричном виде. Для новой системы нужны шестнадцатеричные номера
30 Deon
 
19.12.08
09:27
Проход цикла это один джамп  в начало цикла, а рекурсивная функция - это 2 джампа - вход в неё и выход обратно.
31 NikVars
 
19.12.08
09:33
(15), (19) Вот это да... Вложенность циклов тоже ограничена, если ты не знаешь.
Как упражение, можешь попробовать использовать циклы с неограниченной вложенностью. А цикл лучше рекурсии тем, что потребляет меньше ресурсов в частность оперативной памяти (рекурсия жрет много памяти, которая занимается под стек, который растет при каждом рекурсивном вызове и свертывается в самом конце).
А лучше-хуже смотреть нужно именно на конкретной задаче, используется это как подзадача в другой задаче и сколько времени выделено на ее выполнение или на разработку.
Все относительно. Разговоры на тему вообще к конкретным выводам не приведут.
32 Ygich
 
19.12.08
09:42
(28) точных цифр не знаю. если интересно - советую обратиться к специализированной литературе. а вообще (31)
33 Woldemar177
 
19.12.08
09:43
(29) кто такую муть предложил в ТЗ ?
Не проще было бы формировать  типа АБС-123 из двух строк.
34 skunk
 
19.12.08
09:52
(32) в (31) я не увидал чего-то, что противоречило бы сказанному мною ... и уж тем более относить меня к племени индийцев... вот судя по всему в данном вопросе вы индийц...


подумайте...

хватит ли 5000 ротаций для решения данной задачи ... выдержит ли 1С 5000 вложений рекрусии
35 NikVars
 
19.12.08
09:52
(29) Предлагаю вообще не париться со старыми номерами. Просто считайте их шстандцатиричными, а новые выдавайте по новым правилам. А чтобы вообще запутаться переходите на запись номеров пропусков в римской системе счисления, как нумерация серий в мексиканском сериале.
36 чупа
 
19.12.08
09:57
(25)
>> В догонку. Не зря ведь проходили, что такой "прямой" перевод можно делать
>> лишь из двоичной СС, так что только 10ное число -> 2чное -> 16чное будет
>> правильным. То есть, может некоторые числа и получится так "перевести", но
>> это исключение. А вообще надо почитать мат.часть.

такой бред можно только в среде 1Цэшнигов услышать.
еще один "программист"
37 чупа
 
19.12.08
09:57
именно поэтому программист и "программист 1С" совершенно разные понятия
38 Ygich
 
19.12.08
10:08
(34) в конкретном данному случае так как число в функцию передается числом по моему максимальный уровень вложенности тут будет 32. но часто параметры передаются в функции преобразования систем счисления в виде строки. попав на очень длинную строку программа вылетит. а если вычисления на сервере то завалится сервер.
39 Ygich
 
19.12.08
10:12
(36) да ладно тебе. эт одинеска на самом деле корявая неправильно считает при преобразовании. и руки тут совсем не причем.
40 DUDE
 
19.12.08
10:28
2 Чупа:
Обоснуйте, пожалуйста, слово "бред"? Что "бред"? То, что в школе и универе мы не переводили делением из 10ной в 16ную (а предлагаемый код - тупо деление на 16 с отображением результата в цифры 16 СС), и прямо говорилось, что так делать не верно? + Не будучи полностью уверенным в памяти написал "А вообще надо почитать мат.часть.".

А вот "такой бред можно только в среде 1Цэшнигов услышать.
еще один "программист" и "именно поэтому программист и "программист 1С" совершенно разные понятия" точно бред. Относительно меня - тем более, что вы не имеете понятия, о том, что я реализовывал и с чем работал кроме области 1С.
41 Torquader
 
19.12.08
12:05
Функция ЦифраВСимвол(Val С)
return Mid("0123456789ABCDEF",C+1,1);
КонецФункции

Функция ЧислоВСтрокуШест(Val Ч)
if ValueTypeStr(Ч)<>"Число" then return "!";endif;
if Int(Ч)<>Ч then Ч=Int(Ч);endif;// дробную часть отбрасываем
if Ч=0 then return "0";endif;
if Ч<0 then Ч=-Ч;Зн=1;else Зн=0;endif;// для отрицательного выводим знак
Стр="";
while Ч>0 do
 Стр=ЦифраВСимвол(Ч % 16)+Стр;
 Ч=Int(Ч/16);
enddo;
if Зн=1 then Стр="-"+Стр;endif;
return Стр;
КонецФункции

Что касается дробной части, то надо понимать, что в 1С дробная часть используется частично (во всех элементах хранения данных мы задаём смещение для точки) - поэтому, проще всего рассматривать все числа как целые, но не забывать про смещение точки.
42 orefkov
 
19.12.08
16:17
(40)
Ну вот, поучись у тупых адинэсников тому, что вам в универе не показали :)
И там не "тупо деление на 16", смотри внимательнее.
43 DUDE
 
21.12.08
20:09
2 Orefkov:
Высказывание о "тупых адинэсниках" идет из 36го сообщения, а отнюдь не из моего.
Смотри внимательнее. ;)
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.