Pers.narod.ru. Алгоритмы. Перестановка значений двух переменных без использования дополнительной (временной) переменной |
Обычно обмен значений двух переменных выполняют через третью дополнительную переменную того же типа, служащую "буфером":
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 мы бы написали обычное деление "/".
Соответствующая глава лекций по Паскалю
|
|