Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Первый курс
0 / 0 / 0
Регистрация: 15.06.2017
Сообщений: 1
#1

Поменять значения двух переменных, не используя третью - C++

15.06.2017, 23:04. Просмотров 504. Ответов 5
Метки нет (Все метки)

Как поменять значения двух переменных, не используя третью?
Написать функцию swap, которая бы осуществляла данный обмен для целочисленных переменных.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2017, 23:04
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Поменять значения двух переменных, не используя третью (C++):

Обменять значения двух переменных используя третью (буферную) переменную
Решите задачу пожалуйста::-[ Обменять значения двух переменных используя...

Поменять местами значения двух переменных, не используя дополнительной
4.Напишите программу,которая меняет местами значения двух переменных в памяти....

Поменять местами значения двух переменных, используя один указатель
Это вообще реально? С двумя указателями вот так, с вероятностью ошибки т. к....

Как поменять значения двух переменных не используя дополнительную переменную?
Как поменять значения двух переменных не используя дополнительную переменную?

Поменять местами значения целых переменных х и у не используя дополнительных переменных
Знаю, что это очень простая задача, но никак не могу сделать, пожалуйста...

Поменять значения переменных, используя условный оператор
Выполнить задания двумя способами: с использованием оператора if и с...

5
Даценд
Модератор
Эксперт .NET
4045 / 3885 / 2573
Регистрация: 20.04.2015
Сообщений: 7,060
15.06.2017, 23:13 #2
Первый курс,
C++
1
2
3
4
5
6
void swap(int &x, int &y)
{
    x=x+y;
    y=x-y;
    x=x-y;
}
1
Fortran Cobolov
5 / 5 / 9
Регистрация: 14.06.2017
Сообщений: 15
15.06.2017, 23:17 #3
Лучший ответ Сообщение было отмечено Первый курс как решение

Решение

Способ 1:
Пусть имеются целочисленные переменные a, b. Осуществим следующие операции:
a = a+b
b = a-b (b будет равно изначальному значению a)
a = a-b (a будет равно изначальному значению b)
Минус данного способа:
1) Подходит только для числовых переменных
2) Возможно переполнение типа
Способ 2:
Способ основан на использовании побитовой операции XOR(исключающее или, строгая дизъюнкция). В С++ XOR
обозначается как ^.
Идея: пусть a xor b = c; тогда c xor b = a; c xor a = b;
a = a^b;
b = a^b;
a = a^b;
Считаю, здесь все понятно.
Плюсы:
1) Подходит для любых однотипных переменных
2) Не грозит переполнение типа

C++
1
2
3
4
5
void swap(int &a, int &b){
  a = a^b;
  b = a^b;
  a = a^b;
}
1
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
7004 / 3297 / 448
Регистрация: 04.12.2011
Сообщений: 9,128
Записей в блоге: 5
15.06.2017, 23:34 #4
Fortran Cobolov, тем не менее для типов, для которых перегружены + и - семантически сходно с числовыми типами, это будет работать. А ХОR для типов, для которых она не определена, не применим. Пробежать побайтово (или более крупными шагами типа unsigned) не вариант. Побитовое копирование, это не присваивание.
То есть, для не числовых переменных и с ксором не всё в порядке.
1
Fortran Cobolov
5 / 5 / 9
Регистрация: 14.06.2017
Сообщений: 15
15.06.2017, 23:51 #5
Все же более предпочитаю ксорить, из-за того же переполнения. Но, приму к сведению ;-)
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
7004 / 3297 / 448
Регистрация: 04.12.2011
Сообщений: 9,128
Записей в блоге: 5
16.06.2017, 08:43 #6
Цитата Сообщение от Fortran Cobolov Посмотреть сообщение
предпочитаю ксорить, из-за того же переполнения
Это правда, ксор избегает переполнения. Но при написании шаблона для арифметических операций всё выглядит лучше.
0
16.06.2017, 08:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.06.2017, 08:43
Привет! Вот еще темы с решениями:

Поменять местами значения целых переменных А и В, не используя дополнительные переменные
Задача 9. Поменять местами значения целых пере¬менных А и В, не используя...

Решение задачи Абрамяна: поменять местами значения двух переменных
Алгоритм и коды программы

Поменять местами значения двух переменных без использования дополнительной переменной
4. Написать программу, которая меняет местами значения двух переменных без...

Поменять местами биты двух переменных
Ребят, объясните пожалуйста, как поменять местами конкретные биты двух...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru