![]() |
![]() |
![]() |
|
Коньюкция | ☑ | ||
---|---|---|---|---|
0
DenIv
17.09.09
✎
10:04
|
Доброе утро, господа помогите реализовать функцию логического "И" на 1С
Заранее признателен |
|||
1
los_hooliganos
17.09.09
✎
10:04
|
если (условие1) и (условие2) тогда
|
|||
2
ДенисЧ
17.09.09
✎
10:04
|
(а=б) И (ц=д)
|
|||
3
DGorgoN
17.09.09
✎
10:04
|
опередили
|
|||
4
inka
17.09.09
✎
10:06
|
(0)для дизьюнкции будет отдельный топик?
|
|||
5
DenIv
17.09.09
✎
10:13
|
(1) и (2) речь о двоичной логике, например реализация XOR
Функция XOR(Val ПарА, Val ПарБ) Экспорт Рез = 0; К = 1; Для BitNumber = 1 По 8 Цикл БитА = ПарА % 2; БитБ = ПарБ % 2; ПарА = Цел(ПарА / 2); ПарБ = Цел(ПарБ / 2); БитВ = (БитА + БитБ) % 2; Рез = Рез + БитВ * К; К = К * 2; КонецЦикла; Возврат Рез; КонецФункции нужен аналог для AND |
|||
6
los_hooliganos
17.09.09
✎
10:13
|
Функция ФункцияИ(Условие1,Условие2)
Рез1 = 0; Рез2 = 0; Если Условие1 Истина Тогда Рез1 = 1; КонецЕсли; Если Условие2 Истина Тогда Рез2 = 1; КонецЕсли; Возврат Рез1*Рез2; КонецФункции |
|||
7
Rie
17.09.09
✎
10:15
|
(6) А параметрами функции - что является?
|
|||
8
los_hooliganos
17.09.09
✎
10:17
|
(7) Может быть массив битов?
|
|||
9
Fragster
гуру
17.09.09
✎
10:17
|
в (5) БитВ = БитА * БитБ;
а "или": БитВ = ?(БитА + БитБ = 0, 0, 1); |
|||
10
DenIv
17.09.09
✎
10:19
|
(8) 65535 AND 255 как отработать?
|
|||
11
Ёпрст
гуру
17.09.09
✎
10:19
|
:)
Шелл = создатьобъект("MSScriptControl.ScriptControl"); Шелл.Language = "VBScript"; стрКод = "function intAND(x, y) | intAND = x and y |end function"; Шелл.AddCode(стрКод); Шелл.Run("intXOR", число1, число2); |
|||
12
Rie
17.09.09
✎
10:22
|
(10) В (5)
БитВ = БитА*БитБ; |
|||
13
DenIv
17.09.09
✎
10:22
|
(9) модифицируй (5) если не затруднит, плз
|
|||
14
Fragster
гуру
17.09.09
✎
10:25
|
Функция XOR(Val ПарА, Val ПарБ) Экспорт
Рез = 0; К = 1; Для BitNumber = 1 По 8 Цикл - здесь 8 - максимальное количество бит БитА = ПарА % 2; БитБ = ПарБ % 2; ПарА = Цел(ПарА / 2); ПарБ = Цел(ПарБ / 2); БитВ = (БитА + БитБ) % 2; - это XOR БитВ = БитА * БитБ; - это AND БитВ = ?(БитА + БитБ = 0, 0, 1); - это OR Рез = Рез + БитВ * К; К = К * 2; КонецЦикла; Возврат Рез; КонецФункции |
|||
15
DenIv
17.09.09
✎
10:26
|
Пасиб
|
|||
16
DenIv
17.09.09
✎
10:37
|
(14), если - здесь 8 - максимальное количество бит, то
НачСумма=L_AND(НачСумма, 65535) - не будет работать? |
|||
17
Fragster
гуру
17.09.09
✎
10:37
|
(16) не будет
|
|||
18
Fragster
гуру
17.09.09
✎
10:38
|
Пока (парА>0) и (ПарБ>0) цикл
......... будет |
|||
19
DenIv
17.09.09
✎
11:14
|
Вообще задача шире, нужно считать CRC файла, делаю:
Функция Сдвиг(а,н,куда) Перем Ат; Ат=Pow(2,Цел(Log(а)/Log(2)))+1; Если Ат<65535 Тогда Ат=65535; КонецЕсли; Если куда=1 Тогда Возврат а/pow(2,н); Иначе Возврат а*pow(2,н)%Ат; КонецЕсли; КонецФункции Функция Расчет(Знач НачСумма,Сп,Массив) Для к=0 По Сп.Количество()-1 Цикл а=L_AND(Сдвиг(НачСумма,8,1),255); б = XOR(Сдвиг(НачСумма,8,0) , Сдвиг(НачСумма,8,0)); с = XOR(б,Сп[к]); НачСумма = Массив[XOR(а,с)+1]; НачСумма=L_AND(НачСумма, 65535); КонецЦикла; Возврат НачСумма; КонецФункции //******************************************* Функция глПолучитьКонтрольнуюСуммуФайла(ПолноеИмяФайла) Экспорт Перем Рез,Имя,Каталог; Перем Массив; Массив = Новый Массив(256); Массив[0]=0; Для к=1 По 255 Цикл Массив[к]=Массив[к-1]+4129; КонецЦикла; Рез=12504; ФСО=Новый ComОбъект("Scripting.FileSystemObject"); Файл=ФСО.OpenTextFile(ПолноеИмяФайла); Сп=Новый СписокЗначений; Пока Файл.AtEndOfStream=0 Цикл Сп.Добавить(КодСимвола(Файл.Read(1))); КонецЦикла; Рез=Расчет(Рез,Сп,Массив); Возврат Рез; КонецФункции Алгоритм взят из v8: Как быстро посчитать CRC-файла, но что-то CRC сдается мне расчитывается не корректно, где ошибка? |
|||
20
Rie
17.09.09
✎
11:30
|
(19) А логарифмы-то зачем? Двоичный логарифм проще делением посчитать.
|
|||
21
DenIv
17.09.09
✎
11:32
|
(19) да я ХЗ, говорю же алгоритм из v8: Как быстро посчитать CRC-файла
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |