Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Обмен значениями  (Прочитано 968 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Señor_Gaga

  • Автор темы
  • Забанен
  • Активист
  • *
  • Сообщений: 878
  • Ubuntu 12.04LTS & Linux Mint 13LTS "Maya"
    • Просмотр профиля
Обмен значениями
« : 21 Января 2012, 19:14:20 »
Как поменять местами значения двух числовых переменных без использования дополнительных переменных и/или памяти? В используемом языке нет оператора обмена значениями (вроде XCHG ассемблера).

Для языка С нашел такой вариант:
x = x+y - (y = x);

Если знаете, прошу поделится другими вариантами.

Оффлайн solint

  • Активист
  • *
  • Сообщений: 673
    • Просмотр профиля
Re: Обмен значениями
« Ответ #1 : 21 Января 2012, 19:22:35 »
Вроде как это одна из первых задач на информатике. 7-9й классы школы (уже и не помню точно). Что тут нового?
а = 5 в = 7
а = а + в = 5 + 7 = 12
в = а - в = 12 - 7 = 5
а = в - а = 12 - 5 = 7
профит.
« Последнее редактирование: 21 Января 2012, 19:38:38 от solint »

Оффлайн Señor_Gaga

  • Автор темы
  • Забанен
  • Активист
  • *
  • Сообщений: 878
  • Ubuntu 12.04LTS & Linux Mint 13LTS "Maya"
    • Просмотр профиля
Re: Обмен значениями
« Ответ #2 : 21 Января 2012, 19:36:54 »
По сути можете ответить?

Оффлайн solint

  • Активист
  • *
  • Сообщений: 673
    • Просмотр профиля
Re: Обмен значениями
« Ответ #3 : 21 Января 2012, 19:39:23 »
Устраивает? Для любого языка если что.
Сорри
а = а - в = 12 - 5 = 7 в последней строке
« Последнее редактирование: 21 Января 2012, 19:42:55 от solint »

andrey_p

  • Гость
Re: Обмен значениями
« Ответ #4 : 21 Января 2012, 19:41:18 »
Через сложение возможно переполнение (если это не Питон или Лисп или что-то подобное). Традиционно (в С-подобных языках) это делают через xor:

python -c 'a,b=123,1432; a^=b; b^=a; a^=b; print(a,b)'
(1432, 123)

Оффлайн solint

  • Активист
  • *
  • Сообщений: 673
    • Просмотр профиля
Re: Обмен значениями
« Ответ #5 : 21 Января 2012, 19:53:48 »
Цитировать
Использование третьей переменной на любой платформе оптимальнее дополнительных операций. Более того, такой код лучше будет оптимизирован при компиляции. Да и просто логичнее использовать переменную, чем выполнять операции сложения/вычитания/xor без необходимости. Конечно, нестандартные и изящные методы всегда интересны, развивают мышление и повышают уровень навыков

Метод с XOR быстрее ADD/SUB на ряде процессоров, плюс с этому хорош для signed int чисел.

Оффлайн Señor_Gaga

  • Автор темы
  • Забанен
  • Активист
  • *
  • Сообщений: 878
  • Ubuntu 12.04LTS & Linux Mint 13LTS "Maya"
    • Просмотр профиля
Re: Обмен значениями
« Ответ #6 : 21 Января 2012, 20:00:12 »
Спасибо

 

Страница сгенерирована за 0.045 секунд. Запросов: 25.