Поменять местами значения двух переменных


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

Поменять местами значения двух переменных без использования дополнительной переменной
4. Написать программу, которая меняет местами значения двух переменных без использования.
из племени тумба-юбма
2461 / 1786 / 415
Регистрация: 29.11.2015
Сообщений: 8,672
Записей в блоге: 15
1 2 3 4
int a, b; cin >> a >> b; a+=b, b=a-b, a-=b; cout (a+b)*(a+b) + (a-b)*(a-b) - 3*a*b*(a+b) endl;
Добавлено через 3 минуты
Сразу 2 варианта, строка #3 только для варианта #1
2927 / 1371 / 454
Регистрация: 01.06.2021
Сообщений: 4,561
для смены местами значений переменных я бы рекомендовал использовать шаблон swap(a, b), а не придумать свой велосипед. Для его работы нужно подключить заголовок:
(до С++11)
(начиная с С++11)
(начиная с С++17)
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Поменять местами значения целых переменных х и у не используя дополнительных переменных
Знаю, что это очень простая задача, но никак не могу сделать, пожалуйста помогите. Поменять.
Поменять местами биты двух переменных
Ребят, объясните пожалуйста, как поменять местами конкретные биты двух переменных. Сама задача.

Поменять местами значения вещественных переменных
Поменяйте местами значения вещественных переменных x и y
Значения переменных X, Y, Z поменять местами так
Значения переменных X, Y, Z поменять местами так, чтобы они оказались упорядоченными по убыванию.

Поменять местами значения целых переменных
1.Поменять местами значения целых переменных Х, Y, Z таким образом, чтобы оказалось X\geq Y\geq Z.
Поменять местами значения целых переменных A и B
Поменять местами значения целых переменных. А и B, не используя дополнительные переменные.
Или воспользуйтесь поиском по форуму:
Пишем код: как поменять местами значения переменных
Что делать, если третью переменную использовать нельзя.
Эта задача — мини-практика для тех, кто уже освоился в программировании и хочет попробовать свои силы в решении настоящих задач.
Представьте такое: вы пишете код для брелока от управления охраной всего дома. Памяти в таких брелоках мало, каждый байт на вес золота. Ваша задача — поменять местами числовые значения в двух переменных:
- Например, в переменной A хранится число 3, а в переменной B — число 5.
- Нужно сделать так, чтобы в A оказалось 5, а в B — 3.
Как это сделать, если можно использовать только эти две переменные? Третью временную переменную использовать нельзя, чтобы не занимать лишнюю память.
Те, кто только начинают осваивать программирование, могут написать такой код:
Но мы с вами уже сразу видим, в чём здесь ошибка: как только мы напишем A = B, то мы потеряем значение переменной A. Дело в том, что после такого присваивания значение B будет лежать в обеих переменных, и значение A будет уже недоступно. Для проверки запустим код в браузере:
var a = 3; var b = 5; console.log("До перестановки: a = " + a + ", b= " + b ); a = b; b = a; console.log("После перестановки: a = " + a + ", b= " + b );

Видно, что значение переменной A потерялось и у нас теперь два одинаковых значения B.
Наша задача — где-то хранить одновременно и A и B, чтобы можно было разложить их по нужным переменным. Проверим, сработает ли этот подход, если у нас всего две переменные.
Положим в переменную A сумму A и B:
A = A + B; // теперь у нас в A лежит сумма, а B по-прежнему хранит своё значение.
Теперь сделаем хитрость: положим в B начальное значение A. Получить его просто — достаточно из суммы, которая сейчас хранится в A, вычесть B:
B = A − B; // сейчас в B появилось старое значение A, которое мы получили вычитанием из общего результата.
Нам осталось вернуть старое значение B. Но раз у нас есть их сумма и уже готовое значение A, мы можем просто вычесть его из суммы и получить B:
A = A − B; // в A появилось старое значение B, которое мы получили из первоначальной суммы.
Проверим наш код в браузере:
var a = 3; var b = 5; console.log("До перестановки: a = " + a + ", b= " + b ); a = a + b; // теперь у нас в A лежит сумма, а B по-прежнему хранит своё значение b = a - b; // сейчас в B появилось старое значение A, которое мы получили вычитанием из общего результата a = a - b// в A появилось старое значение B, которое мы получили из первоначальной суммы console.log("После перестановки: a = " + a + ", b= " + b );

В следующий раз попробуем задачу посложнее, а пока попробуйте сделать то же самое, но не используя сложение и вычитание. И помните, что памяти в брелоке мало, другие переменные использовать нельзя.
Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Обмен значений переменных: разбор популярных способов решения известной задачи с IT-собеседований
Самый простой способ взаимно менять значения переменных — использование swap(a, b) или же аналогичного стандартного метода. Тем не менее, важно понимать как работает операция по обмену значений двух переменных, что мы покажем на нескольких примерах.
Для начала продемонстрируем неправильную реализацию и выясним, что в ней не так.
Ошибочная реализация
a = b; b = a;
Если вы попытаетесь выполнить обмен значений этим способом, то увидите, что теперь в обеих переменных хранится значение переменной b . Происходит это ввиду построчного выполнения кода. Первая операция присваивания сохраняет значение переменной b в переменную a . Затем вторая — новое значение a в b , иными словами значение b в b . Таким образом, мы полностью теряем содержание контейнера a .
Теперь обратимся к правильной реализации.
С использованием буфера
Буфером в данном случае называется дополнительная используемая память. Давайте разберёмся зачем она здесь нужна. Если помните, в неправильной реализации мы потеряли значение переменной a после первой операции присваивания, в связи с чем в обеих доступных переменных осталось значение b . Чтобы этого избежать нам понадобится ещё одна переменная — c . В таком случае правильный алгоритм будет выглядеть так:
c = a; a = b; b = c;
Для наглядности разберём его пошагово:
- Присваиваем переменной c значение переменной a . Сейчас в a записана a , в b — b , а в c — a .
- Присваиваем переменной a значение переменной b . Теперь в a хранится b , в b — также b и в c — a .
- Присваиваем переменной b значение переменной c . Сейчас в a находится старое значение b , в b — a , ну и в c остаётся a .
Как вы видите, переменная c после выполнения алгоритма не нужна, поэтому далee в программе её можно не использовать и даже вовсе удалить из памяти.
Сразу стоит заметить, что это самое краткое и экономное решение задачи, но можно использовать и больше переменных, не так ли?
Нам повезло, что сейчас вопрос экономии оперативной памяти не стоит так остро, как 20-30 лет назад. Тем не менее, в те времена swap был востребован не меньше, поэтому умные люди нашли способ заменить значения двух переменных без ввода третьей.
Арифметика
Сложение / вычитание
a = a + b; b = a - b; a = a - b;
Для лучшего восприятия снова разберём алгоритм построчно:
- Присваиваем переменной a сумму значений переменных a и b . Сeйчас в a записано значение a + b , а в b всё ещё b .
- Переменной b присваиваем разность между новым значением переменной a и переменной b . В a также хранится a + b , но в b уже a .
- Наконец, присваиваем переменной a результат вычитания b из обновлённого значения a . Получается, что в a теперь содержится b , а в b — a .
Для C-подобных языков сокращённая запись этого алгоритма выглядит так:
a = a + b - (b = a);
Умножение / деление
Аналогичный способ решения задачи получается при замене сложения умножением и вычитания делением:
a = a * b; b = a / b; // деление НЕ целочисленное a = a / b;
В сокращённом варианте:
a = a * b / (b = a);
Вычитание / Сложение
Вообще, в математике действие вычитания отсутствует и является сложением положительного и отрицательного чисел. Отсюда следует, что мы можем поменять местами операции сложения и вычитания:
a = a - b; b = a + b; a = -a + b;
Обратите внимание, что в последней строке знак у переменной a изменился, а саму строчку можно записать иначе: a = b — a; .
Такой же принцип можно использовать поменяв местами деление и умножение.
Недостатки арифметического метода
Главным недостатком является большее количество операций, в чём можно убедиться посчитав операции сложения, вычитания и присваивания. Тeм болee, что умножeниe и дeлeниe болee «дорогостящиe». Заметной потеря скорости становится в ситуации, когда трeбуeтся менять значения большого количества пeрeмeнных.
Второй важный нeдостаток это область применения — числа. Согласитесь, менять значения пeрeмeнных, содержащих объeкты попросту нe получится без перегрузки операции. Впрочeм, дажe с числами могут возникнуть проблемы — арифметика для вeщeствeнных чисeл можeт выполняться некорректно, что приведёт к неожиданному результату.
Eстeствeнно, существует и менее очевидный способ рeшeния задачи без использования дополнительной памяти. Он основан на свойствах логических операций и работает с битовым представлением числа, а значит быстрее арифметического метода.
Битовые операции
Данный алгоритм основан на следующем свойстве операции XOR («исключающее или»): a XOR b XOR a = b .
a = a XOR b; b = b XOR a; a = a XOR b;
Для любитeлeй коротких записeй приведём код одной строчкой. XOR в C-подобных языках замeняeтся знаком ^ :
a ^= b ^= a ^= b;
Однако помните о точках следования. Из-за них этот код может вести себя непредсказуемо и давать разные результаты, поэтому никогда не используйте его в production коде.
Обязательно посмотрите более подробный разбор решения через битовые операции от Г. Лакмана Макдауэлла, автора известного сборника задач с собеседований, который есть в одной из наших книжных подборок.
Поменять местами значения 2 переменных с использованием указателей

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

Поменять местами значения вещественных переменных
Поменяйте местами значения вещественных переменных x и y

Поменять местами значения целых переменных
1.Поменять местами значения целых переменных Х, Y, Z таким образом, чтобы оказалось X\geq Y\geq Z.
Поменять местами значения целых переменных A и B
Поменять местами значения целых переменных. А и B, не используя дополнительные переменные.
7699 / 6495 / 2955
Регистрация: 14.04.2014
Сообщений: 28,310
Тебе третья нужна, для временного хранения.
Life Builder
532 / 496 / 374
Регистрация: 12.01.2011
Сообщений: 1,754
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
int a = 55; int b = 7; int *temp = new int(); *temp = a; int *numb = &b; a = *numb; b = *temp; cout a endl; cout b endl; delete temp;
Регистрация: 31.12.2016
Сообщений: 73
sk007, пожалуйста, объясните вот эту строчку:
int *temp = new int();
Дело в том, что такое еще не учили. т.е. что такое
new int()
Life Builder
532 / 496 / 374
Регистрация: 12.01.2011
Сообщений: 1,754
Динамическое выделение памяти для одного объекта типа инт.
sk007, ну и зачем ты придумал это выделение? Просто int уже не в моде?
| Меню пользователя @ nmcf |
@ Mournful Max
nmcf, Прихоть такая у него, чего Вы прицеплись 😀
| Меню пользователя @ Mournful Max |
| Посетить домашнюю страницу Mournful Max |
Регистрация: 31.12.2016
Сообщений: 73
nmcf, а нельзя без 3ей переменной ?
типа как-то так
а=5;
b = 7;
a = a + b;
a = a — a; //12 — 5 = 7
b = a — b; // 12 — 7 = 5
Добавлено через 6 минут
т.е. вот так:
a = 10
b = 20;
a = a+b // = 30
b = a — b// = 30 — 20 =10
a = a — b // 30 -10 = 20
Добавлено через 9 минут
можно, вот так:
1 2 3 4 5 6 7
int *numa = &a; int *numb = &b; *numa = *numa + *numb; *numb = *numa - *numb; *numa = *numa - *numb; a = *numa; b = *numb;
2778 / 1931 / 570
Регистрация: 05.06.2014
Сообщений: 5,595
Сообщение от jekakeba 
nmcf, а нельзя без 3ей переменной ?
А смысл? Экономия памяти? Так у вас код выполняющий подобные трюки сожрет в десять раз больше места, чем занимает один разнесчастный int.
Плюс, если у вас там будет не int, а структура, то такие трюки вообще не будут работать.
7699 / 6495 / 2955
Регистрация: 14.04.2014
Сообщений: 28,310
Сообщение от jekakeba 
а нельзя без 3ей переменной ?
Была такая «задача на сообразительность» — обменять без третьей. Тебе это, что ли, нужно?
802 / 607 / 319
Регистрация: 24.02.2017
Сообщений: 2,157
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
#include using namespace std; int main() { int a=11,temp; int b=55; int *p; couta" "b"\n"; temp=a; p=&b; a=*p; p=&temp; b=*p; couta" "b"\n"; system("pause"); return 0; }
Добавлено через 22 минуты
[CPP]# include
using namespace std;
//3.Используя указатели и оператор разыменования,
//обменять местами значения двух переменных.
void main()
setlocale(LC_ALL, «Russian»);
//Объявление и инициализация 2х переменных
int a = 55;
int b = 7;
//объявление типа данных указатель на int и инициализируем его адресом переменной b
int *numa = &a; //в numa записали адрес переменной а
//объявление типа данных указатель на int и инициализируем его адресом переменной a
int *numb = &b; //в numb записали адрес переменной b
//Инициализируем или перезаписываем переменную а с помощью операции разыменования адресом переменной
//т.е. в а закидываем b, а в b записываем а
a = *numb; //присвоили переменной а значение переменной b=7
b = *numa; // присвоили переменной b значение переменной a=7, т.к. в переменной а предыдущим действием
// уже записано значение 7
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Значения переменных X, Y, Z поменять местами так
Значения переменных X, Y, Z поменять местами так, чтобы они оказались упорядоченными по убыванию.
Поменять местами значения двух переменных с использованием третьей переменной
Помогите разобраться. Только начала изучать программирование. Задача такая: составить программу.
Даны значения двух переменных a и b. Поменять местами значения этих переменных
1) Обмен значениями. Даны значения двух переменных a и b. Поменять местами значения этих переменных.

Значения переменных X,Y,Z поменять местами
Значения переменных X,Y,Z поменять местами так, что бы они оказались упорядоченными по возрастанию
Или воспользуйтесь поиском по форуму: