Как поменять значение двух переменных, не используя третью в 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

Как видите, простая математика упростила нам жизнь. Ничего сложного здесь нет. К слову, так можно делать и в других языках.

Работодатель хочет быть уверенным в том, что ему попался хороший работник. Поэтому могут возникнуть подобные коллизии. Не бойтесь использовать свою логику –решайте так, как вам кажется нужным.

Я же, в свою очередь, в этом блоге постараюсь разобрать для вас всевозможные каверзные вопросы.

Вячеслав Головлев.


Яндекс.Метрика