Обменять значения двух переменных, используя третью (буферную) переменную.
x - первая переменная;
y - вторая переменная;
b - буферная переменная (для хранения значения другой переменной).
Обмен значений двух переменных протекает по следующему алгоритму:
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.
Комментарии
А зачем в конце писать
А зачем в конце писать readln?
Чтобы окно с выполненной
Чтобы окно с выполненной программой сразу не закрывалось.
Вопрос по синтаксису
А нужна ли точка с запятой после "readln" (перед "end.")?
";" перед "end."
не обязательна, хотя Turbo Pascal в некоторых случаях не компилировал из-за ее отсутствия
Перемещение значений без буферной переменной
А можно обойтись без буферной переменной:
https://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.