Требуется способ поменять значение двух переменных, не используя другие переменные, т.е. не передавая значения в промежуточные хранилища?

Как вариант:

procedure AddSwap(var X, Y: integer);
begin
if X <> Y then begin
X := X + Y;
Y := X — Y;
X := X — Y
end
end

Более подробно: XOR swap algorithm

В компании «Крок» данный вопрос входит в испытательное тестирование при приеме на работу вот уже несколько лет.