Обмен значений переменных

Задача: 

Обменять значения двух переменных, используя третью (буферную) переменную.

Описание переменных: 

x - первая переменная;
y - вторая переменная;
b - буферная переменная (для хранения значения другой переменной).

Алгоритм решения задачи: 

Обмен значений двух переменных протекает по следующему алгоритму:

  1. В буферной переменной сохраняется значение первой переменной.
  2. Первой переменной присваивается значение второй.
  3. Второй переменной присваивается значение буферной переменной, это значение равно старому значению первой переменной.
Программа на языке Паскаль: 

var x, y, b: integer;
begin
    write ('Input first number: ');
    readln (x);
    write ('Input second number: ');
    readln (y);
 
    writeln ('x = ', x, ', y = ', y);
    writeln ('Changing values... changing values...');
 
    b := x;
    x := y;
    y := b;
 
    writeln ('x = ', x, ', y = ', y);
 
readln
end.

Комментарии

Учебники

Тут тоже есть учебники неплохие с примерами задач http://programm.ws

А зачем в конце писать

А зачем в конце писать readln?

Не обязательно писать. Readln

Не обязательно писать. Readln значит "задержка экрана".

Чтобы окно с выполненной

Чтобы окно с выполненной программой сразу не закрывалось.

Вопрос по синтаксису

А нужна ли точка с запятой после "readln" (перед "end.")?

";" перед "end."

не обязательна, хотя Turbo Pascal в некоторых случаях не компилировал из-за ее отсутствия

Перемещение значений без буферной переменной

А можно обойтись без буферной переменной:

x:=x+y;
y:=x-y;
x:=x-y

С целыми числами так нельзя.

С целыми числами так нельзя. Может возникнуть переполнение при сложении. Можно так:

x:=x xor y
y:=x xor y
x:=x xor y

Используется свойство A xor B xor B = A

http://pas1.ru/comment/reply/1060/3119

x:=x+y;
y:=y-x;
x:=x-y

наверно так ?

нет ты не прав смотри,

нет ты не прав смотри, подставляем вместо x или y текущее значение этих переменных:

в 1-ом случае
x:=x+y;
y:=x-y; (x+y)-y=x
x:=x-y (x+y)-x=y
____________
x=y
y=x

в твоем случае

x:=x+y;
y:=y-x; y-(x+y)=-x
x:=x-y (x+y)-(-x)=2x+y
___________________
y=-x
x=2x+y

P.S неужели это так сложно?

это у тебя ошибка!!

пересмотри свои подстановки и не вводи людей в заблуждение

Достаточно лишь подумать)

x:=x+y;
y:=x-y;
x:=x-y;
Все тут верно!)
Не верится? Проверь!)

верно)))

верно)))

Действительно правильно.

Тут же все просто)

1) Х присвоить Х+У > x=2, y=3, x+y=5 значит, после первого действие Х уже ровно не 2, а 5.
2) y=x-y : x=5, y=3, x-y=2, после второго действия Y= не 3, а 2.
3)x=x-y : x=5, y=2, x-y=3 после третьего действия X= не 5, а 3.