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

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

Войти
Регистрация
Восстановить пароль
 
BOR1K
14 / 14 / 4
Регистрация: 19.09.2009
Сообщений: 289
#1

Поменять 2 переменные. - C++

02.02.2010, 18:10. Просмотров 992. Ответов 19
Метки нет (Все метки)

Поменять 2 переменные. Без использования 3.
Можно использовать код асма.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2010, 18:10     Поменять 2 переменные.
Посмотрите здесь:

Поменять местами переменные - C++
Здравствуйте! При решении задач, возник вопрос в правильности решения (код работает корректно, но сверяю свое решение с решением в интернет...

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

Поменять местами переменные так, чтобы они оказались упорядоченными по убыванию - C++
Всем доброго времени суток. Нужна помощь с заданиями. Сам не могу сделать, потому что нет возможности работать на Си. Заранее премного...

Создать программу обработки массивов структур используя структурные переменные и переменные типа объеденения - C++
Создать массив структур, каждая из которых состоит из следующих елементов: факультет, курс, группа, фамилия студента и екзаменационная...

Переменные,значение функции,вспомогательные переменные. - C++
1)Даны переменные A,B,C.Изменить их значения,переместив их содержимое из A-в B,B-в C,C-в A,и вывести новые значения переменных A,B,C. ...

Создать бинарное дерево, по правой ветке - переменные типа инт, по левой - 2 переменные типа чар - C++
Здравствуйте. Необходимо создать бинарное дерево, по правой ветке - переменные типа инт, по левой - 2 переменные типа чар. ругается в...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
02.02.2010, 18:23     Поменять 2 переменные. #2
BOR1K, подсказка - манипуляции с арфимтическими операциями)
Rustam
12 / 12 / 3
Регистрация: 05.09.2009
Сообщений: 440
02.02.2010, 18:23     Поменять 2 переменные. #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <windows.h>
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
     SetConsoleCP(1251);
     SetConsoleOutputCP(1251);
     {
                              char variable1[80], variable2[80];
                              std::cout << "Введите первую переменную: ";
                              cin.getline (variable1, 80);
                              std::cout << "Введите вторую переменную: ";
                              cin.getline (variable2, 80);
                              std::cout << "\n";
                              std::cout << "Значение первой переменной " << variable2 << std::endl;
                              std::cout << "Значение второй переменной " << variable1 << std::endl;
                              }
                              system("PAUSE");
                              return EXIT_SUCCESS;
                              
}
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
02.02.2010, 18:25     Поменять 2 переменные. #4
Rustam, круто..
BOR1K
14 / 14 / 4
Регистрация: 19.09.2009
Сообщений: 289
02.02.2010, 18:26  [ТС]     Поменять 2 переменные. #5
Цитата Сообщение от Rustam Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <windows.h>
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
     SetConsoleCP(1251);
     SetConsoleOutputCP(1251);
     {
                              char variable1[80], variable2[80];
                              std::cout << "Введите первую переменную: ";
                              cin.getline (variable1, 80);
                              std::cout << "Введите вторую переменную: ";
                              cin.getline (variable2, 80);
                              std::cout << "\n";
                              std::cout << "Значение первой переменной " << variable2 << std::endl;
                              std::cout << "Значение второй переменной " << variable1 << std::endl;
                              }
                              system("PAUSE");
                              return EXIT_SUCCESS;
                              
}

Rustam
12 / 12 / 3
Регистрация: 05.09.2009
Сообщений: 440
02.02.2010, 18:31     Поменять 2 переменные. #6
BOR1K
14 / 14 / 4
Регистрация: 19.09.2009
Сообщений: 289
02.02.2010, 18:33  [ТС]     Поменять 2 переменные. #7
Блин, ребята выручайте
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,353
02.02.2010, 18:39     Поменять 2 переменные. #8
std::swap(var1, var2);
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
02.02.2010, 18:43     Поменять 2 переменные. #9
C
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
        int a, b;
        a=2;
        b=3;
        b*=a;
        a=b/a;
        b/=a;
        printf("a=%d\n", a);
        printf("b=%d\n", b);
        return 0;
}
Shved
9 / 9 / 1
Регистрация: 07.06.2009
Сообщений: 34
02.02.2010, 18:54     Поменять 2 переменные. #10
Цитата Сообщение от BOR1K Посмотреть сообщение
Поменять 2 переменные. Без использования 3.
Можно использовать код асма.

a=a||b;
b=a||b;
a=a||b;

и будет счастье


или

a=a-b;
b=a+b;
a=b-a;
M128K145
Эксперт С++
8283 / 3502 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
02.02.2010, 19:01     Поменять 2 переменные. #11
BOR1K, самый простой вариант
C++
1
a ^= b ^= a ^= b;
или более правильная эта же запись, которая в отличие от первой также работает в C# и Java
C++
1
2
3
a ^= b;
b ^= a;
a ^= b;
Shved
9 / 9 / 1
Регистрация: 07.06.2009
Сообщений: 34
02.02.2010, 19:19     Поменять 2 переменные. #12
Цитата Сообщение от M128K145 Посмотреть сообщение
BOR1K, самый простой вариант
C++
1
a ^= b ^= a ^= b;
или более правильная эта же запись, которая в отличие от первой также работает в C# и Java
C++
1
2
3
a ^= b;
b ^= a;
a ^= b;
Во, именно, я это и имел ввиду, просто не то поставил...не || , а ^ или xor на паскале)
BOR1K
14 / 14 / 4
Регистрация: 19.09.2009
Сообщений: 289
02.02.2010, 19:44  [ТС]     Поменять 2 переменные. #13
А что значит этот оператор
^=
?
M128K145
Эксперт С++
8283 / 3502 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
02.02.2010, 20:42     Поменять 2 переменные. #14
Алгоритм обмена при помощи исключающего ИЛИ
insideone
Модератор
Автор FAQ
3636 / 914 / 49
Регистрация: 10.01.2010
Сообщений: 2,464
02.02.2010, 20:48     Поменять 2 переменные. #15
Цитата Сообщение от BOR1K Посмотреть сообщение
А что значит этот оператор ?
По всей видимости то же что и другие подобные операторы.
C++
1
a x= b;
аналогично
C++
1
a = a x b;
Где x - какой либо оператой. будь то \ * + - ^ или другой
Gregory15
0 / 0 / 0
Регистрация: 03.10.2012
Сообщений: 25
10.10.2012, 20:16     Поменять 2 переменные. #16
Вот наиболее оптимальный вариант
a := a - b;
b := a + b;
a := b - a;
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
11.10.2012, 17:56     Поменять 2 переменные. #17
Gregory15, это почему же арифметические операции оптимальнее побитовых?
Gregory15
0 / 0 / 0
Регистрация: 03.10.2012
Сообщений: 25
12.10.2012, 00:36     Поменять 2 переменные. #18
Цитата Сообщение от silent_1991 Посмотреть сообщение
Gregory15, это почему же арифметические операции оптимальнее побитовых?
Потому что не все знакомы с битовыми операциями!
А так это самый оптимальный вариант так как она работает быстрее!
alkagolik
Заблокирован
12.10.2012, 03:41     Поменять 2 переменные. #19
silent_1991, может и не оптимальнее, но для нонешнего компиля уже разницы нет. т.е. оптимизация с помощью битовых операций вместо арифметических (как писали бородатые олдфаги) сегодня не актуальна. Инструментарий умный, железо развито. Ну вот наглядный пример.
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
~/samples$ cat foo.c 
#include <stdio.h>
 
int main () {
    
    volatile int x = 10, y = 5;
    int i, j, k;
 
    for (i = 0; i < 10000; ++i)
        for (j = 0; j < 1000; ++j)
            for (k = 0; k < 1000; ++k) {
                x ^= y;
                y ^= x;
                x ^= y;
            }
 
    return 0;
}
~/samples$ clang -O2 foo.c 
~/samples$ time ./a.out 
 
real    0m56.307s
user    0m56.212s
sys 0m0.000s
~/samples$ cat foo.c 
#include <stdio.h>
 
int main () {
    
    volatile int x = 10, y = 5;
    int i, j, k;
 
    for (i = 0; i < 10000; ++i)
        for (j = 0; j < 1000; ++j)
            for (k = 0; k < 1000; ++k) {
                x += y;
                y = x - y;
                x -= y;
            }
 
    return 0;
}
~/samples$ clang -O2 foo.c 
~/samples$ time ./a.out 
 
real    0m55.967s
user    0m55.871s
sys 0m0.000s
~/samples$
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2012, 12:42     Поменять 2 переменные.
Еще ссылки по теме:

Двумерный массив. Найти минимальный и поменять его с первым, найти максимальный и поменять его с последним - C++
Как можно изменить код чтобы выполнялось. 1.Найти минимальный элемент и поменять его с первым элементом. 2.Найти максимальный...

Переменные - C++
Есть глобальная переменная, внутри описания функции я ее меняю ( ну то есть пишу b=i;); После вызова этой функции, другая функция будет...

Переменные в c++ - C++
Помогите разобраться в теории. Так вот допустим мы создаем переменную в стеке int a; тогда в стеке где то по адресу скажем 004 выделяется...

Переменные - C++
system( &quot;/*Как нибудь можно здесь использовать переменные типов STRING или CHAR?*/&quot; );


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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
12.10.2012, 12:42     Поменять 2 переменные. #20
Цитата Сообщение от Gregory15 Посмотреть сообщение
А так это самый оптимальный вариант так как она работает быстрее!
Да ну?

alkagolik, да это-то понятно, меня интересовал конкретный ответ на конкретный вопрос: почему (в отрыве от оптимизаций) арифметические операции быстрее побитовых.

Добавлено через 32 секунды
Да в общем-то ладно, это уже оффтоп.
Yandex
Объявления
12.10.2012, 12:42     Поменять 2 переменные.
Ответ Создать тему
Опции темы

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