Nickolay.info. Алгоритмы. Перестановка значений двух переменных без использования дополнительной (временной) переменной

Обычно обмен значений двух переменных выполняют через третью дополнительную переменную того же типа, служащую "буфером":

c:=a;
a:=b;
b:=c;

Здесь мы поменяли местами значения A и B. Так же легко сделать это без использования третьей переменной:

var a,b:integer;
begin
 write ('Input A and B ');
 read (a,b);
 b:=a+b;
 a:=b-a;
 b:=b-a;
 write ('A,B=',a:6,b:6);
 reset (input); readln;
end.

Наконец, можно было сделать ещё хитрее, используя операцию исключающего ИЛИ (xor).

A := A xor B;
B := A xor B;
A := A xor B;

Кстати, определить максимум и минимум из 2 чисел тоже можно, не используя никаких операций, кроме присваивания:

var a,b,max,min:integer;
begin
 write ('Input A and B ');
 read (a,b);
 max := ((A+B)+abs(A-B)) div 2;
 min := ((A+B)-abs(A-B)) div 2;

 write ('min,max=',min:6,max:6);
 reset (input); readln;
end.

В языке, менее искусственном, чем Паскаль, вместо div мы бы написали обычное деление "/".

 Соответствующая глава лекций по Паскалю

Рейтинг@Mail.ru

вверх гостевая; E-mail