Есть такая задача. "Напишите функцию суммирования двух целых чисел без использования «+» и других арифметических операторов." Какие есть варианты ее решения в 1С?
(1) пример сложения целых положительных чисел используя битовые операции:
Функция Сложение2ЦелыхЧисел(Знач Число1, Знач Число2)
Результат = ПобитовоеИсключительноеИли(Число1,Число2);
С = ПобитовыйСдвигВлево(ПобитовоеИ(Число1,Число2),1);
Пока С <> 0 Цикл
Т = Результат;
Результат = ПобитовоеИсключительноеИли(Результат,С);
С = ПобитовыйСдвигВлево(ПобитовоеИ(Т,С),1);
КонецЦикла;
Возврат Результат;
КонецФункции
Функция Сложение2ЦелыхЧисел(Знач Число1, Знач Число2)
Результат = ПобитовоеИсключительноеИли(Число1,Число2);
С = ПобитовыйСдвигВлево(ПобитовоеИ(Число1,Число2),1);
Пока С <> 0 Цикл
Т = Результат;
Результат = ПобитовоеИсключительноеИли(Результат,С);
С = ПобитовыйСдвигВлево(ПобитовоеИ(Т,С),1);
КонецЦикла;
Возврат Результат;
КонецФункции
(19) это задача не чисто по 1С. Это задача общая для программирования. И в ней не случайно сделан акцент на целые числа.
По канону это задача на битовую алгебру.
Функция С(А, Б)
Если Б Тогда
Возврат С( ПобитовоеИсключительноеИли( А , Б ), ПобитовыйСдвигВлево( ПобитовоеИ( А , Б ), 1 ) );
Иначе
Возврат А
КонецЕсли;
КонецФункции;
За неимением 1С дома делаю это на С++.
$ cat add.cpp
#include <stdio.h>
int C(int a, int b)
{
if(b) return C(a^b, (a&b)<<1); else return a;
}
int main()
{
printf("%i", C(20,19));
}
$ g++ add.cpp
$ ./a.out
39
(29) А причем тут 1С? Это задача на программирование, а не на знание 1С.
Ну вот типа как старая добрая задача "Есть две числовые переменные А и В, необходимо поменять их значения местами, не прибегая к использованию третьей переменной."
(30)И такая задача тоже в 1С не попадалась, хотя на собесах спрашивали... я встречно задавал вопрос - Вам точно нужен программист 1С? ;) Понятно что в такие конторы я не попадал
(32) Понятно, что не попадал. Потому что у тебя нет логического мышления. Это задачи на логику. На поиск логического решения.
А не на регистры со справочниками.
(33)Программисту 1С в первую очередь надо знать регистры и справочники, логическое мышление а именно логика И, ИЛИ, НЕ ИЛИ - нужна но гораздо меньше. Все уже есть в языке 1С.
(41) Тому, кто просто пишет код по детальным техзаданиям - наверное да, мозги не нужны. А тому, кто придумывает решения проблем - нужны навыки поиска этих решений.
(42)Это потому что Вы считаете свое мнение правильным, но есть и другие мнения - просто так сложилось. мне за 25 лет с 1С ни разу не приходилось менять значения без третьей переменной. и напридумывал я за это время достаточно много разных решений и обошелся без знания решения этой задачи. Насчет мозгов - иногда встречается такой код, написанный спецом с мозгами, что плакать хочется. Надеюсь у Вас они есть, ну хотя бы для того что бы не развивать холивар.
Дело не в ЗНАНИИ именно ЭТОЙ задачи. Цель этой задачи - понять, как у претендента работают мозги, и сумеет ли он за короткое время найти решение нестандартной задачи.
Ага, именно по этому критерию различаю программистов и 1Сников: вторые убеждены, что на любую дурную хотелку кодера или заказчика в 1С обязательно должна быть "готовая функция".
Да, я помню решил не читая такой перечень инструкций, услышав её в первый раз в жизни. Кто интересно её на собеседовании задавать теперь будет. Жесть просто.
(50) Почему же? Используется особенность – после выхода из цикла, счетчик увеличивается на 1.
То есть, после цикла "для j=i по i цикл конеццикла;" j будет на 1 больше, чем i.