Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.68
Андрей1992
0 / 0 / 1
Регистрация: 13.06.2012
Сообщений: 60
#1

Обмен значениями двух переменных - C++

15.09.2013, 18:13. Просмотров 2949. Ответов 36
Метки нет (Все метки)

Нашёл на другом форуме занятную формулу обмена значений двух переменных(очевидно на с++):
b = – –a + (a=b)*0;
Проверил на числах 1 и 101, рез 101 и 101. Помогите, было бы круто, формула в одну строку.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2013, 18:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обмен значениями двух переменных (C++):

Определить процедуру, осуществляющую обмен значениями двух переменных - C++
Составить программу, в результате которой величина а меняется значением с величиной b, а величина с с величиной d(Определить процедуру,...

Обмен значениями двух переменных А и В без использования вспомогательной переменной - C++
Сконструировать алгоритм обмена значениями двух переменных А и В без использования вспомогательной переменной

Обмен между значениями двух переменных, не используя при этом третьей переменной - C++
Подскажите как написать программу, которая производит обмен между значениями двух переменных, не используя при этом третьей переменной

Обмен значениями двух чисел через указатели и функцию - C++
Должны использоваться аргументы типа ( int * ) Вот код: #include <iostream> void exchange ( int * v1, int * v2 )...

Программа обмена значениями двух переменных a и b - C++
3.8 Составить программу обмена значениями двух переменных a и b. Разработать два варианта решения задачи – с исполь-зованием...

Обмен значениями - C++
Не понимаю, почему в двух последних случаях обмен значений переменных не происходит. #include <iostream> void swapr(int & a, int &...

36
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
15.09.2013, 22:50 #16
вот восьмой способ ))
C++
1
2
3
4
5
6
7
8
9
    int a, b;
    cin >> a;   // 2
    cin >> b;   // 3
 
    a+=b;       // a=5
    b=a-b;      // b=5-3=2
    a=a-b;      // a=5-2=3
 
    cout << a << " " << b;
0
ValeryS
Модератор
6651 / 5060 / 470
Регистрация: 14.02.2011
Сообщений: 16,918
15.09.2013, 22:59 #17
_,
извини конечно но это не восьмой а второй способ что у автора что у меня
Цитата Сообщение от ValeryS Посмотреть сообщение
ну или арифметический вариант
C++
1
2
3
a=a+b;
b=a-b;
a=a-b
Цитата Сообщение от Андрей1992 Посмотреть сообщение
Сумма-разность
C++
1
2
3
a=a+b;
b=a-b;
a=a-b;
и вот на него реакция
Цитата Сообщение от Catstail Посмотреть сообщение
- этот вариант может вызвать переполнение...
Цитата Сообщение от Андрей1992 Посмотреть сообщение
Ничего интересного, обычное извращение с арифметикой.
мда, имеет место быть но для чисел положительных и меньше 9999
на эту же тему логический способ
числа положительные и не больше 16 бит
C++
1
2
3
a=a<<16|b;
b=a>>16;
a=a&0xFFFF;
так называемые "упакованные числа"
2
Андрей1992
0 / 0 / 1
Регистрация: 13.06.2012
Сообщений: 60
16.09.2013, 18:15  [ТС] #18
Цитата Сообщение от ValeryS Посмотреть сообщение
на эту же тему логический способ
числа положительные и не больше 16 бит
C++
1
2
3
a=a<<16|b;
b=a>>16;
a=a&0xFFFF;
так называемые "упакованные числа"
Спасибо, классный способ, мне понравился.
0
Catstail
Модератор
22639 / 11007 / 1784
Регистрация: 12.02.2012
Сообщений: 18,168
16.09.2013, 18:20 #19
Цитата Сообщение от Андрей1992 Посмотреть сообщение
классный способ
- так этот способ нечестный: он использует старшие разряды int для двухбайтовых целых. Что эквивалентно наличию аж двух дополнительных 16-битных переменных.
0
Андрей1992
0 / 0 / 1
Регистрация: 13.06.2012
Сообщений: 60
16.09.2013, 18:26  [ТС] #20
Цитата Сообщение от Catstail Посмотреть сообщение
- так этот способ нечестный: он использует старшие разряды int для двухбайтовых целых. Что эквивалентно наличию аж двух дополнительных 16-битных переменных.
Любой способ имеет право на существование, занесём расход памяти в минус этого способа.
0
Raali
16.09.2013, 18:28
  #21

Не по теме:

C++
1
 a :=: b;
привет из будущего!

1
ValeryS
Модератор
6651 / 5060 / 470
Регистрация: 14.02.2011
Сообщений: 16,918
16.09.2013, 18:30 #22
Цитата Сообщение от Catstail Посмотреть сообщение
так этот способ нечестный:
так скажем не совсем честный
но в упакованных двоично десятичных числах используется
старший полубайт десятки младший единицы
0
Catstail
Модератор
22639 / 11007 / 1784
Регистрация: 12.02.2012
Сообщений: 18,168
16.09.2013, 18:36 #23
Цитата Сообщение от Андрей1992 Посмотреть сообщение
занесём расход памяти в минус этого способа
- дело не в расходе, а в нарушении условия. Здесь неявно используются те же 32 бита, что и в "лобовом" способе с рабочей переменной.

Добавлено через 1 минуту
Цитата Сообщение от Raali Посмотреть сообщение
привет из будущего!
- по-моему, в Ruby это выглядит так: a,b=b,a
0
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,062
Завершенные тесты: 1
16.09.2013, 18:37 #24
Цитата Сообщение от Catstail Посмотреть сообщение
- по-моему, в Ruby это выглядит так: a,b=b,a
я имел в виду
Proposing a C++1Y Swap Operator
0
ValeryS
Модератор
6651 / 5060 / 470
Регистрация: 14.02.2011
Сообщений: 16,918
16.09.2013, 18:38 #25
Цитата Сообщение от Catstail Посмотреть сообщение
дело не в расходе, а в нарушении условия. Здесь неявно используются те же 32 бита, что и в "лобовом" способе с рабочей переменной.
стоп
условия не было
было найти способы
Цитата Сообщение от Андрей1992 Посмотреть сообщение
Задали придумать семь способов, 6 уже осилил, нужен седьмой.
этот способ тоже использует старшие разряды
Цитата Сообщение от Андрей1992 Посмотреть сообщение
a=a*10000+b;
b=a / 10000;
a=a % 10000;
только десятичного числа
0
Андрей1992
0 / 0 / 1
Регистрация: 13.06.2012
Сообщений: 60
16.09.2013, 18:41  [ТС] #26
Цитата Сообщение от Catstail Посмотреть сообщение
Добавлено через 1 минуту
- по-моему, в Ruby это выглядит так: a,b=b,a
И не только в нём, ещё в питоне также, но мне нужен способ который применим во всех языках (будь то Pascal, C++ или Haskell)
0
Catstail
Модератор
22639 / 11007 / 1784
Регистрация: 12.02.2012
Сообщений: 18,168
16.09.2013, 18:46 #27
Цитата Сообщение от ValeryS Посмотреть сообщение
стоп
условия не было
- ну, как это? Просто поменять местами значения переменных? Как угодно? Тогда вот еще "замечательный" способ: пишешь оба числа в файл, а читаешь "крест накрест"... А можно и в два файла.
0
Андрей1992
0 / 0 / 1
Регистрация: 13.06.2012
Сообщений: 60
16.09.2013, 18:50  [ТС] #28
Цитата Сообщение от Catstail Посмотреть сообщение
- ну, как это? Просто поменять местами значения переменных? Как угодно? Тогда вот еще "замечательный" способ: пишешь оба числа в файл, а читаешь "крест накрест"... А можно и в два файла.
Оригинально, может предложите просто вывести их наоборот? Вводим a,b - выводим b,a.
0
ValeryS
Модератор
6651 / 5060 / 470
Регистрация: 14.02.2011
Сообщений: 16,918
16.09.2013, 18:53 #29
Цитата Сообщение от Catstail Посмотреть сообщение
Тогда вот еще "замечательный" способ: пишешь оба числа в файл, а читаешь "крест накрест"... А можно и в два файла.
ну если нет ограничений на задание то конечно можно
а если файл проецируемый в память то и не так и долго
по моему это не практическое задание, а, так скажем, на развития воображения
следующим шагом наверно будет найти достоинства и недостатки

Не по теме:


кстати про файл я и не подумал зашореность мышления



раз пошла такая пьянка? то через стек
Код
push a;
push b;
pop a;
pop b;
1
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,062
Завершенные тесты: 1
16.09.2013, 18:56 #30
Цитата Сообщение от ValeryS Посмотреть сообщение
кстати про файл я и не подумал
можно вывести числа, предложить пользователю самому их поменять и ввести заново,
правда тут недостатков будет много, и зависеть будет от адекватности "девайса", c которым работает программа для вычисления таких сложных операций
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2013, 18:56
Привет! Вот еще темы с ответами:

Обмен переменных string - C++
Здравствуйте. Подскажите пожалуйста, как ПРАВИЛЬНО и КРАСИВО поменять местами две string-переменные? Делаю следующим образом: ...

Массивы (ввести данные целого типа, вывести на экран, выполните обмен значениями) - C++
Введите с клавиатуры данные в массив целого типа, выведите их на экран, затем выполните обмен значениями для первого и последнего элементов...

Составить программу обмена значениями трёх переменных - C++
Условия задачи такие: Составить программу обмена значениями трёх переменных величин a,b,c по след схеме: b присвоить значение c, a...

Вывести результат двух операций с использованием двух переменных - C++
Такие дела: надо ввести с клавиатуры 4 переменные, используя только 2 int, и посчитать результат двух выражений Есть такой вариант, но...


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

Или воспользуйтесь поиском по форуму:
30
Yandex
Объявления
16.09.2013, 18:56
Ответ Создать тему
Опции темы

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