Начнём со стандартного алгоритма (Куда без него)))
&НаКлиенте Процедура Команда1(Команда) а = 5; б = 10; Сообщить("=================="); Сообщить(СтрШаблон("Было: а = %1; б = %2", Строка(а), Строка(б))); а = а + б; б = а - б; а = а - б; Сообщить(СтрШаблон("Стало: а = %1; б = %2", Строка(а), Строка(б))); Сообщить("=================="); // Вывод // ================== // Было: а = 5; б = 10 // Стало: а = 10; б = 5 // ================== КонецПроцедуры
Далее, пример стандартного алгоритма, но немного модифицированного. - Просто для более углубленного раскрытия темы.
Смотрите, если уж совсем докопаться до примера, то можно увидеть, что мы используем целые числа: Тип: int, который имеет ограничения на размер числа, как в сторону знака "-", так и в сторону знака "+". (Всё это к 1С не относится. 1С не имеет таких явных типов и ограничений!)
То, так скажем, при использовании стандартного (вышеуказанного) алгоритма (обмена значениями переменных) и применении его в других языках программирования или системах, можно получить критическую ошибку - "переполнение" в "узком: месте кода:
а = а + б;
Представьте, что "а" и "б" - эти обе переменных, равны максимальному возможному значению и при суммировании их, возникнет ошибка...
Обратите на это внимание, на будущее.
(Да и если уже совсем прямо докопаться, то и использование русскоязычных символов в именах переменных других языков программирования, в большинстве случаев недопустимо)))
Ладно, всё это присказки, перейдём непосредственно к алгоритму, где (Если возникают ограничения с использованием памяти - просто уменьшим промежуточное число):
&НаКлиенте Процедура Команда2(Команда) а = 5; б = 10; Сообщить("=================="); Сообщить(СтрШаблон("Было: а = %1; б = %2", Строка(а), Строка(б))); а = а / б; б = а * б; а = б / а; Сообщить(СтрШаблон("Стало: а = %1; б = %2", Строка(а), Строка(б))); Сообщить("=================="); // Можно, конечно, для итоговых результатов использовать и функцию: Цел(<Число>), // которая "Вычисляет целую часть переданного числа, полностью отсекая дробную часть." // Но, в "академических" целях, хочу показать, что небольшая погрешность, как правило, автоматически пропадает при вычислении. // Вывод // ================== // Было: а = 5; б = 10 // Стало: а = 10; б = 5 // ================== КонецПроцедуры
Используем "Структуру"
&НаКлиенте Процедура Команда3(Команда) а = 5; б = 10; Сообщить("=================="); Сообщить(СтрШаблон("Было: а = %1; б = %2", Строка(а), Строка(б))); СтруктураДляРасчетов = Новый Структура; СтруктураДляРасчетов.Вставить("а", б); СтруктураДляРасчетов.Вставить("б", а); а = СтруктураДляРасчетов.а; б = СтруктураДляРасчетов.б; Сообщить(СтрШаблон("Стало: а = %1; б = %2", Строка(а), Строка(б))); Сообщить("=================="); // Вывод // ================== // Было: а = 5; б = 10 // Стало: а = 10; б = 5 // ================== КонецПроцедуры
Используем "Соответствие"
&НаКлиенте Процедура Команда4(Команда) а = 5; б = 10; Сообщить("=================="); Сообщить(СтрШаблон("Было: а = %1; б = %2", Строка(а), Строка(б))); СоответствиеДляРасчетов = Новый Соответствие; СоответствиеДляРасчетов.Вставить(а, б); СоответствиеДляРасчетов.Вставить(б, а); а = СоответствиеДляРасчетов.Получить(а); б = СоответствиеДляРасчетов.Получить(б); Сообщить(СтрШаблон("Стало: а = %1; б = %2", Строка(а), Строка(б))); Сообщить("=================="); // Вывод // ================== // Было: а = 5; б = 10 // Стало: а = 10; б = 5 // ================== КонецПроцедуры