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 мы бы написали обычное деление "/".
Соответствующая глава лекций по Паскалю
гостевая; E-mail |