Имя: Пароль:
1C
1С v8
Как преобразовать десятичное число в двоичное в 1С ?
0 Ткачев
 
20.07.11
11:23
Например как из 32 получить 00100000 ?
1 lxs
 
20.07.11
11:24
позор
2 Jstunner
 
20.07.11
11:25
(1) +1
3 lxs
 
20.07.11
11:25
8 класс, основы информатики
5 andrewks
 
20.07.11
11:25
(0) зачем?
6 Восточный Парень
 
20.07.11
11:26
(1) а еще человек программистом работает
7 Ткачев
 
20.07.11
11:26
(3)У нас не было еще информатики
8 Варвар
 
20.07.11
11:26
в 1С это не возможно.
9 lxs
 
20.07.11
11:26
(8) +100500))))
10 lxs
 
20.07.11
11:26
+(9) она не справится с такой нагрузкой
11 lxs
 
20.07.11
11:27
12 guitar_player
 
20.07.11
11:27
(0)вы спрашиваете есть ли функция которая это делает или какой использовать алгоритм?
13 Ткачев
 
20.07.11
11:30
(12)Да, я знаю что такое двоичная система.
14 patapum
 
20.07.11
11:31
(13) близица пятницо
15 lxs
 
20.07.11
11:31
(13) внимательнее читай.
16 PR
 
20.07.11
11:33
(12) + (13) Мрак :)))
17 modestry
 
20.07.11
11:34
18 H A D G E H O G s
 
20.07.11
11:36
Функция ПреобразоватьДесятичноеВДвоичноеДробное(Значение)
   ЗаданнаяТочность=0.01;
   ЦелаяЧасть=Цел(Значение);
   ДробнаяЧасть=Значение-ЦелаяЧасть;
   Частное=ЦелаяЧасть;
   СтруктураВозврата=Новый Структура;
   Результат=Новый Массив;
   Пока Частное>0 Цикл
       Остаток=Частное%2;
       Частное=(Частное-Остаток)/2;
       Результат.Вставить(0,Остаток);
   КонецЦикла;
   СтруктураВозврата.Вставить("ЦелаяЧасть",Результат);
   Результат=Новый Массив;
   
   Пока ДробнаяЧасть>ЗаданнаяТочность Цикл
       ДробнаяЧасть=ДробнаяЧасть*2;
       ЦелаяЧасть=Цел(ДробнаяЧасть);
       ДробнаяЧасть=ДробнаяЧасть-ЦелаяЧасть;
       Результат.Добавить(ЦелаяЧасть);
   КонецЦикла;
   СтруктураВозврата.Вставить("ДробнаяЧасть",Результат);

   Возврат СтруктураВозврата;
КонецФункции
19 kot_bcc
 
20.07.11
11:36
(17) Там лишний инвертор, полагаю

функция ДвоичноеПредставление(знач Ч) экспорт
перем Рез;
Рез="";
пока Ч>0 цикл
 Рез=Строка(Ч%2)+Рез;
 Ч=Цел(Ч/2);
конеццикла;
возврат "0"+Рез;
конецфункции
20 lxs
 
20.07.11
11:41
ИсхЧисло = 255;
ДвоичныйКод = "";
Пока 1=1 Цикл
   Если ИсхЧисло/2 < 1 Тогда
       ДвоичныйКод = "1" + ДвоичныйКод;
       Прервать;
   КонецЕсли;
   ДвоичныйКод = ?(Окр(ИсхЧисло/2)=ИсхЧисло/2, "0", "1") + ДвоичныйКод;
   ИсхЧисло = Цел(ИсхЧисло/2);
КонецЦикла;

Сообщить(ДвоичныйКод);
21 Ткачев
 
20.07.11
11:47
т.е. форматом, или чем либо другим кроме цикла не получится, спасибо.
22 sergeante
 
20.07.11
11:49
(21) типа оправдался))
23 Aprobator
 
20.07.11
11:53
о я тоже хочу )

ДвоичныйКод    = "";
Результат      = Цел(ИсходноеЧисло)/2;
ОстатокДеления = ИсходноеЧисло%2;
ДвоичныйКод    = "" + ОстатокДеления;

Пока Результат <> 1 Цикл
    ЦелРезультат   = Цел(Результат/2);
    ОстатокДеления = Результат%2;  
    ДвоичныйКод    = ДвоичныйКод + ОстатокДеления;
    Результат      = ЦелРезультат;
КонецЦикла;

ДвоичныйКод = Число("1" + ДвоичныйКод);
24 lxs
 
20.07.11
11:56
(23) о, епт, я про использование % забыл как-то, точняк!!
25 Aprobator
 
20.07.11
11:56
+(23) эх, если исходное 0 не учел.
26 lxs
 
20.07.11
11:57
Только у тебя косяк, надо слева добавлять
27 Ткачев
 
20.07.11
11:57
(22)Я когда то работал с ассемблером и для меня системы счисления не новость, просто я подумал что можно как то без циклов обойтись.
28 Aprobator
 
20.07.11
12:00
(26) ась? Именно справа. Чтобы потом справа налево не читать.
Только вначале всего этого добавить контрольку на 0 и все.
(27) забей - это миста. Обычай здесь такой.
29 lxs
 
20.07.11
12:03
ИсхЧисло = 32;
ДвоичныйКод = "";
Пока ИсхЧисло>1 Цикл
   ДвоичныйКод = Строка(ИсхЧисло%2) + ДвоичныйКод;
   ИсхЧисло = Цел(ИсхЧисло/2);
КонецЦикла;
ДвоичныйКод = "1" + ДвоичныйКод;
Сообщить(ДвоичныйКод);
30 skunk
 
20.07.11
12:03
(27)скажи какая команда ассемблера преобразует данные в двоичный, восмеричный и т.д. ... формат
31 lxs
 
20.07.11
12:03
а, ну и да, для нуля не учел))
32 Ткачев
 
20.07.11
12:05
(30)Где ты видел в ассемблере такие команды ?
B дв. D дес. H шест.
33 kot_bcc
 
20.07.11
12:07
(30) bcd, aaX etc
34 smaharbA
 
20.07.11
12:09

ХТМЛ=Новый COMОбъект("htmlfile");
ХТМЛ.Write("<script>ВДвоичное=function(x){return x.toString(2)}</script>");
Это=ХТМЛ.documentElement.document.script;
Сообщить(Это.ВДвоичное(234234));
35 smaharbA
 
20.07.11
12:09
(33) правдо ?
36 Aprobator
 
20.07.11
12:10
(28) а не - туплю наверное с право и лево то)
37 kot_bcc
 
20.07.11
12:16
(35) Я гарантирую это. Инфа 100%.
38 skunk
 
20.07.11
12:16
(32)читая твой (27)можно сделать такой вывод ... ведь как-то ты там без циклов обходился
39 Ткачев
 
20.07.11
12:19
Давай те теперь я скажу для чего мне это нужно, может что попроще придумаем, есть 10 строк таблицы и надо сосчитать сумму у этих строк, т.е. Таб.Получить(N) как бы возвращает число.
Сумма1 = Таб.Получить(1);
Сумма2 = Таб.Получить(2);
Сумма3 = Таб.Получить(2) + Таб.Получить(1);
Сумма4 = Таб.Получить(3);
Сумма5 = Таб.Получить(3) + Таб.Получить(1);
Сумма6 = Таб.Получить(3) + Таб.Получить(2);
Сумма7 = Таб.Получить(3) + Таб.Получить(2) + Таб.Получить(1);
и т.д.
40 Ткачев
 
20.07.11
12:21
(38)Mov A,1001B
Mov A,09H
Mov A,9
41 kot_bcc
 
20.07.11
12:23
(39) Держите меня семеро...
"Таб.Итог" не рассматривался?
42 Aprobator
 
20.07.11
12:23
(39) ппц. Что за 10 строк? Как расположены в таблице?
43 Aprobator
 
20.07.11
12:24
(41) не - ты чо без другой системы счисления здесь никак не обойтись!
44 ReaLg
 
20.07.11
12:24
(8) Убило :) Надо запомнить этот универсальный ответ на все хотелки, когда лень что - либо делать :)
45 sergeante
 
20.07.11
12:24
(39) интересно. А что за задача то такая?
46 Ткачев
 
20.07.11
12:25
Допустим так:
Таб(1) = 10;
Таб(2) = 20;
Таб(3) = 30;
Таб(4) = 40;
Таб(5) = 50;
Таб(6) = 60;
Таб(7) = 70;
...
47 Ткачев
 
20.07.11
12:25
(45)v8: Нужна программа для автоподбора файлов.
Ну не получается у меня с этим "рюкзаком"
48 lxs
 
20.07.11
12:26
(39) плять..матрица...
49 Ткачев
 
20.07.11
12:26
Добавляю в таблицу колонку метку и ставлю либо 0, либо 1 и где 1 считаю.
50 Aprobator
 
20.07.11
12:28
е мое. То есть нужна чисто сумма по отмеченным строкам? И из за этого родилась данная тема? Я фигею без рояля.
51 Ткачев
 
20.07.11
12:30
(50)Нее, ну тема нормально, если такое надо будет можно от сюда скопипастить.
52 sergeante
 
20.07.11
12:32
(50) да нормальная тема.
53 smaharbA
 
20.07.11
12:32
(40) а теперь как получить десятичноый результат ?
54 Дикообразко
 
20.07.11
12:33
пятницо здесь?
55 Aprobator
 
20.07.11
12:34
ну дык.
56 Ткачев
 
20.07.11
12:36
Как сумму то размеров файлов перебрать ?
57 smaharbA
 
20.07.11
12:40
перебором
58 Aprobator
 
20.07.11
12:40
отсортировал и вперед.
59 Aprobator
 
20.07.11
12:41
с алгоритмами вообще фигово?
60 Ткачев
 
20.07.11
12:44
(57)Как перебором ? Все равно пропускаются некоторые строки.
61 Рэйв
 
20.07.11
12:47
(60)Если я правильно телепатирую что тебе надо то где то так:


тФайлы=Новый ТаблицаЗначений;
тФайлы.Колонки.Добавить("Размер");
тФайлы.Колонки.Добавить("Имя");
Для н=1 по 10000 Цикл
   нов=тФайлы.Добавить();
   нов.Размер=н;
   нов.Имя="Файл размером "+н;
Конеццикла;
МаксимальныйобщийРазмер=1000;
УжеЕсть=0;
тФайлы.Сортировать("Размер Убыв");
тОтобрано=Новый ТаблицаЗначений;
тОтобрано.Колонки.Добавить("Строка");
Для каждого Стр Из тФайлы Цикл
   Если Стр.Размер<=МаксимальныйобщийРазмер-УжеЕсть Тогда
       тОтобрано.Добавить();
       тОтобрано.Строка=Стр);
       УжеЕсть=УжеЕсть+Стр.Размер;
   КонецЕсли;    
Конеццикла;    

62 Ткачев
 
20.07.11
12:49
(61)Ща попробую
63 Рэйв
 
20.07.11
12:49
+ правда так он тебе один запихает только, когда до 1000 дойдет:-)

но тут важет принцип
64 Рэйв
 
20.07.11
12:49
*важен
65 Ткачев
 
20.07.11
12:52
Нее, мне надо все возможное из файлов.
66 Ткачев
 
20.07.11
12:52
А тут только один
67 smaharbA
 
20.07.11
12:52
перебором еще
68 Рэйв
 
20.07.11
12:53
Госпади:-)  на разных размерах не с шагом 1 будет несколько файлов, не понятног разве?
в(61) просто пример
69 Ткачев
 
20.07.11
12:53
(67)Как в (39) не получается
70 Ткачев
 
20.07.11
14:12
А что все замолчали ?
Столько кода вверху написали, а как до дела дошло все сразу молчат.
71 Ткачев
 
20.07.11
14:13
Осталось причесать:
Функция ПреобразованиеЧисла(Знач ИсхЧисло)
   
   ДвоичныйКод = "";
   Пока ИсхЧисло <> 0 Цикл
       ДвоичныйКод = "" + ИсхЧисло%2 + ДвоичныйКод ;
       ИсхЧисло = Цел(ИсхЧисло/2);
   КонецЦикла;
   Возврат ДвоичныйКод;
   
КонецФункции

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
   
   ОчиститьСообщения();
   Длина = 600;
   МинимальнаяДлина = 400;
   ТаблицаФайлов = Новый ТаблицаЗначений;
   ТаблицаФайлов.Колонки.Добавить("Имя");
   ТаблицаФайлов.Колонки.Добавить("Размер");
   НовСтр = ТаблицаФайлов.Добавить();
   НовСтр.Имя = "Первый";
   НовСтр.Размер = 100;
   НовСтр = ТаблицаФайлов.Добавить();
   НовСтр.Имя = "Второй";
   НовСтр.Размер = 200;
   НовСтр = ТаблицаФайлов.Добавить();
   НовСтр.Имя = "Третий";
   НовСтр.Размер = 300;
   НовСтр = ТаблицаФайлов.Добавить();
   НовСтр.Имя = "Четвертый";
   НовСтр.Размер = 400;
   НовСтр = ТаблицаФайлов.Добавить();
   НовСтр.Имя = "Пятый";
   НовСтр.Размер = 500;
   НовСтр = ТаблицаФайлов.Добавить();
   НовСтр.Имя = "Шестой";
   НовСтр.Размер = 600;
   ВремТаблица = Новый ТаблицаЗначений;
   ВремТаблица.Колонки.Добавить("Имя");
   ВремТаблица.Колонки.Добавить("Размер");
   ТаблицаРезультата = Новый ТаблицаЗначений;
   ТаблицаРезультата.Колонки.Добавить("Имя");
   ТаблицаРезультата.Колонки.Добавить("Размер");
   Кон = 1;
   Для Аа = 1 по ТаблицаФайлов.Количество() Цикл
       Кон = Кон * 2;    
   КонецЦикла;
   Для Аа = 1 По Кон - 1 Цикл
       Результат = 0;
       Стр = ПреобразованиеЧисла(Аа);
       СтрДл = СтрДлина(Стр);
       Для Аб = 0 по СтрДл - 1 Цикл
           Если Сред(Стр, СтрДл - Аб, 1) = "1" Тогда
               СтрТаб = ТаблицаФайлов.Получить(Аб);
               НовСтр = ВремТаблица.Добавить();
               НовСтр.Имя = СтрТаб.Имя;
               НовСтр.Размер = СтрТаб.Размер;
               Результат = Результат + СтрТаб.Размер;
           КонецЕсли;
       КонецЦикла;
       Если Результат <= Длина И Результат >= МинимальнаяДлина Тогда
           Для Каждого Стр Из ВремТаблица Цикл
               НовСтр = ТаблицаРезультата.Добавить();
               НовСтр.Имя = Стр.Имя;
               НовСтр.Размер = Стр.Размер;
           КонецЦикла;
           НовСтр = ТаблицаРезультата.Добавить();
           НовСтр.Имя = "-" + Результат + "-";
       КонецЕсли;
       ВремТаблица.Очистить();
   КонецЦикла;
   Для Каждого Стр Из ТаблицаРезультата Цикл
       Сообщить(Стр.Имя + " " + Стр.Размер);
   КонецЦикла;
   Отказ = 1;
   
КонецПроцедуры
72 Aprobator
 
20.07.11
14:45
не - седни точно пятница. Ваш код ПреобразованиеЧисла 8 ку преобразует в 000.
73 Aprobator
 
20.07.11
14:45
или это замануха такая, чтобы кто-нибудь готовое решение полностью выложил?
74 Ткачев
 
20.07.11
14:49
(73) У меня нормально, 8 = 1000
75 Aprobator
 
20.07.11
14:50
(74) откуда там 1 берется?
76 Aprobator
 
20.07.11
14:50
если там добавляется только остаток?
77 Aprobator
 
20.07.11
14:51
а сек - ща одну вещь проверю.
78 Ткачев
 
20.07.11
14:51
(75)Хз, это вовсе не мой код, я его сверху взял.(29)
79 Aprobator
 
20.07.11
14:52
а не - все норм, это я туплю.
80 Ткачев
 
20.07.11
14:54
(79)Не подскажете как сократить ?
   Кон = 1;
   Для Аа = 1 по ТаблицаФайлов.Количество() Цикл
       Кон = Кон * 2;    
   КонецЦикла;
   Для Аа = 1 По Кон - 1 Цикл
81 Aleksey
 
20.07.11
14:55
Функция Из_10_В_Любую(Знач Значение=0,Нотация=36) Экспорт
    Если Нотация<=0 Тогда Возврат("") КонецЕсли;
    Значение=Число(Значение);
    Если Значение<=0 Тогда Возврат("0") КонецЕсли;
    Значение=Цел(Значение);
    Результат="";
    Пока Значение>0 Цикл
         Результат=Сред("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",Значение%Нотация+1,1)+Результат;
         Значение=Цел(Значение/Нотация) ;
    КонецЦикла;
    Возврат Результат;
КонецФункции
82 Aprobator
 
20.07.11
14:56
(78) ага - код прям копия (29).
(80)

Кон = Pow(2, ТаблицаФайлов.Количество());
83 Aprobator
 
20.07.11
14:59
(81) оригинально однако.
84 Ткачев
 
20.07.11
15:01
(82)Сп. за (80)
85 Ёпрст
 
20.07.11
15:01
(83) баян с синьёры однако
86 Aleksey
 
20.07.11
15:02
(83) и обратно

Функция Из_Любой_В_10(Знач Значение="0",Нотация=36) Экспорт
    Если Нотация<=0 Тогда Возврат(0) КонецЕсли;
    Значение=СокрЛП(Значение);
    Если Значение="0" Тогда Возврат(0) КонецЕсли;
    Результат=0;
    Длина=СтрДлина(Значение);
    Для Х=1 По Длина Цикл
         М=1;
         Для У=1 По Длина-Х Цикл М=М*Нотация КонецЦикла;
         Результат=Результат+(Найти("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",Сред(Значение,Х,1))-1)*М;
    КонецЦикла;
    Возврат Окр(Результат);
КонецФункции
87 Ёпрст
 
20.07.11
15:03
88 Ёпрст
 
20.07.11
15:03
+87 причем, Рупора..
89 Aprobator
 
20.07.11
15:04
(85)я не так часто в 1С ине занимаюсь преобразованием в различные системы счисления )
90 Aprobator
 
20.07.11
15:05
а вообще да - было, причем еще в 7 - ке. За мою практику таких задач не возникало ни разу.
91 Ткачев
 
20.07.11
15:06
Я избавился от цикла с преобразованием см. (47)
92 kible
 
20.07.11
15:35
Для чего нужна формула n^n-1
93 Ткачев
 
20.07.11
15:36
(92)Количество вариантов, для суммы.
94 Ткачев
 
20.07.11
15:39
У меня очень много инсталяшек игр на компе, вот решил их по дискам раскидать, руками не очень то удобно файлы выбирать для диска, вот и решил найти прогу (47), т.к. ни чего не нашел, решил ее в 1с-ке сделать.
95 kible
 
20.07.11
15:51
(93) для суммы чего?
96 Ткачев
 
20.07.11
15:55
(39)СуммаНОМЕРВАРИАНТА = ...
2 + 2 = 3.9999999999999999999999999999999...