Как поменять значение двух переменных, не используя третью в 1С
Недавно мой старый знакомый посетовал на то, что не смог пройти собеседование на должность 1С программист. Узнав, что у него спрашивали, я задумался. Что и говорить, в его ситуации растерялся бы и я. Хотя ничего страшного в заданиях нет. Просто как-то необычно, что спрашивают алгоритмы вместо прикладных объектов.
Задача поменять местами значения переменных часто встречается при программировании. Например, без нее не обходится алгоритмы сортировки. Однако там часто используется третья буферная переменная. На С++ это будет выглядеть так:
int a=3,b=5,buf; buf=a; a=b; b=buf;
Значения поменялись. Задача выполнена. Так рекомендуется делать. Однако есть и другие способы. Один из моих любимых это использование xor (можете ознакомиться с ним в уроках по другим языкам программирования, например по С++).
Этот метод изящен и непонятен на первый взгляд. Кроме того, исключающий ИЛИ значительно медленнее обычного свопирования (обмена) переменных через буфер.
Давайте теперь поменяем значения xorом наших переменных a и b:
int a=3, b=5; a^=b^=a^=b; cout<<a<<endl<<b;
Данный способ легко позволяет выполнить поставленную задачу. Почему-то, многие даже не знают, что так можно решить эту задачу.
Все хорошо, однако в 1С нет xor. Разработчики решили, что он там не нужен. Ну и бог с ним. Решим другим способом.
a=3;
b=5;
a=a+b;
b=a-b;// здесь уже будет 3
a=a-b; // а теперь равно 5
Как видите, простая математика упростила нам жизнь. Ничего сложного здесь нет. К слову, так можно делать и в других языках.
Работодатель хочет быть уверенным в том, что ему попался хороший работник. Поэтому могут возникнуть подобные коллизии. Не бойтесь использовать свою логику –решайте так, как вам кажется нужным.
Я же, в свою очередь, в этом блоге постараюсь разобрать для вас всевозможные каверзные вопросы.