Архив Айгуст —
архив помогалки Августа
«Никто не вечен… В отличие от знаний»
Внимание!
  Материалы на данном сайте представляют собой архивную копию форума «Айгуст - помогалка Августа» на момент октября 2019 года с целью сохранения знаний. Все права на материалы принадлежат их авторам. Материалы представлены в открытый доступ в ознакомительных целях, запрещено их коммерческое использование без согласования с авторами. Администрация сайта не несёт ответственности за содержание материалов, в том числе за наличие вредоносных закладок в коде, используйте любой предоставленный код на свой страх и риск. Рекомендуется проверять любые файлы вручную и перезаливать на собственный хостинг, дабы избежать возможной модификации или исчезновения в будущем.

Обмен значениями

18.01.2012 16:56:56
Обмен значениями
Как поменять местами значения двух числовых переменных без использования дополнительных переменных и/или памяти? В используемом языке нет оператора обмена значениями.
#17733
18.01.2012 17:42:38
Re: Обмен значениями
переменные d,c.
d=d-c;
c=c+d;
d=d-c;
#17741
18.01.2012 18:12:30
Re: Обмен значениями
Чудесно, чудесно.

d = 8, c = 1.

d = d – c; // = 8 - 1 = 7
c = c + d; // = 1 + 7 = 8
d = d – c; // = 7 – 8 = –1

d = -1, c = 8. Не-а.
#17742
18.01.2012 19:46:11
Re: Обмен значениями
Igust, а если последней операцией d=c-d ?
#17745
18.01.2012 21:00:38
Re: Обмен значениями
Отлично!

Осталась малю-ю-юсенькая проблемка. Переполнение. Допустим, мы пишем на языке в котором арифметическое переполнение возбуждает ошибку. Допустим, в этом языке целочисленная переменная может содержать значения от -128 до 127.

d = 127, c = -5

Алгоритм:
1. d = d – c
2. c = c + d
3. d = c - d

Исполнение:
1. d = 127 - (-5) = 132 Ошибка! Арифметическое переполнение.

Ваш ход.
#17750
19.01.2012 13:42:33
Re: Обмен значениями
Igust, если, вторая переменная у вас лежит в отрицательных числах, то алгоритм будет немного другой

d=d+(-c)
c=d-c
d=d-c

имейте ввиду, что в последнем выражении d=122-127, а не d=127-(-5) как может показаться на первый взгляд )
#17797
19.01.2012 14:59:03
Re: Обмен значениями
Если переменные целочисленные, то всё намного проще)
x = x xor y
y = x xor y
x = x xor y
Эти три оператора их поменяют местами)
В сях, пхпах и прочих с-образных языках пишется вообще шикарно)
x ^= y;
y ^= x;
x ^= y;
#17800
19.01.2012 15:06:40
Re: Обмен значениями
Shogal: Если переменные целочисленные, то всё намного проще)
x = x xor y
y = x xor y
x = x xor y
Это так пишутся в паскале.
#17802
19.01.2012 15:07:45
Re: Обмен значениями
Это на псевдокоде, в паскале := вместо = )
#17803
19.01.2012 15:09:02
Re: Обмен значениями
Это мат.
#17804

Другие темы раздела