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

Обменять значение перменных - C++

Восстановить пароль Регистрация
 
nonamez123
 Аватар для nonamez123
185 / 181 / 12
Регистрация: 23.10.2010
Сообщений: 1,301
09.12.2010, 12:35     Обменять значение перменных #1
есть перемные a=5, b=4, нужно что было b=5,a=c;, но при этом не применяя дополнительных перменнных. Тоесть работать только с а и б.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
neon902
1 / 1 / 0
Регистрация: 01.07.2010
Сообщений: 62
09.12.2010, 12:37     Обменять значение перменных #2
а=с?? что за с?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9382 / 5432 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
09.12.2010, 12:50     Обменять значение перменных #3
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
void swap ( int * a, int * b){
    *a ^= *b;
    *b = *a ^ *b;
    *a = *a ^ *b;
}
 
int main(void){
    int a = 13, b = 69;
    
    printf("a = %d\tb = %d\n", a, b);
    swap(&a, &b);
    printf("a = %d\tb = %d\n", a, b);
    
    return 0;
}
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
09.12.2010, 13:01     Обменять значение перменных #4
Ещё вариант:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
void swap(int *a, int *b)
{
    *a = *a + *b;
    *b = *a - *b;
    *a = *a - *b;
}
 
int main(void)
{
    int a = 5, b = 99;
 
    printf("a = %d\tb = %d\n", a, b - 95);
    swap(&a, &b);
    printf("a = %c\tb = %d\n", a, b);
 
    return 0;
}

Не по теме:

P.S. Как и просили)))

nonamez123
 Аватар для nonamez123
185 / 181 / 12
Регистрация: 23.10.2010
Сообщений: 1,301
09.12.2010, 13:06  [ТС]     Обменять значение перменных #5
нечайно написал c
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
09.12.2010, 13:07     Обменять значение перменных #6
Тогда так)))

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
void swap(int *a, int *b)
{
    *a = *a + *b;
    *b = *a - *b;
    *a = *a - *b;
}
 
int main(void)
{
    int a = 5, b = 4;
 
    printf("a = %d\tb = %d\n", a, b);
    swap(&a, &b);
    printf("a = %d\tb = %d\n", a, b);
 
    return 0;
}
nonamez123
 Аватар для nonamez123
185 / 181 / 12
Регистрация: 23.10.2010
Сообщений: 1,301
09.12.2010, 13:16  [ТС]     Обменять значение перменных #7
C++
1
2
3
4
5
void swap ( int * a, int * b){
        *a ^= *b;
        *b = *a ^ *b;
        *a = *a ^ *b;
}
правдо си я начал изучать только сёдня, так что пару вопросов если не трудно:
1)void swap-это как я понял функция?
2)int * a, int * b -что обозначают в данном случаи знаки умножения
3)что означает ^

по заданию числа вводяцо с клавы:
я сделал так
C++
1
2
3
4
printf("a=");
    scanf("%d",&a);
    printf("a=");
    scanf("%d",&b);
но сам всегда использовал cout и cin-что лучше использовать?
и последний вопрос про scanf("%d",&a); зачем нужно "%d",&, ибо я их просто вытащил из примеров на форуме.
Dzhej-Dzhej
Заблокирован
09.12.2010, 13:42     Обменять значение перменных #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
int main()
{
    int a , b;
    cout<<"a = ";
    cin>>a;
    cout<<"b = ";
    cin>>b;
    cout<<"a = "<<a<<"\tb = "<<b<<endl;
    a = b ^ a;
    b = a ^ b;
    a = b ^ a;
    cout<<"a = "<<a<<"\tb = "<<b<<endl;
    system("pause");
    return 0;
}
может так проще будет для вас
Цитата Сообщение от nonamez123 Посмотреть сообщение
1)void swap-это как я понял функция?
да
2)int * a, int * b -что обозначают в данном случаи знаки умножения
знаки умножения - указатели, &а - разыменовать указатель(как по-человечески сказать, не помню, типа добраться до значения переменной, на которую указывает указатель)
3)что означает ^
- логическая операция "исключающее или"
"%d" стоит, чтоб сказать printf'у, чтобы он выводил целое число
примерно так
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
09.12.2010, 13:48     Обменять значение перменных #9
В дополнение к предыдущему посту:

Указатель - переменная, которая может хранить адрес другой переменной. Если бы в функцию swap мы передавали не адреса переменных (вызов функции происходит так: swap(&a, &b), операция & - взятие адреса переменной в памяти), а значения (было бы swap(a, b)), то эти значения копировались бы в собственные переменные a и b функции swap, и значения менялись бы у совсем других переменных a и b, а те, что мы на самом деле хотим поменять, оставались бы неизменными. А так как мы передаём в функцию не значения переменных, а их адреса, то по этим адресам мы можем добраться до реальных переменных a и b, которые мы действительно хотели бы обменять местами.
В функции swap в строке, например, *a = *a ^ *b , * означает, что мы берём значение переменной по её адресу.
nonamez123
 Аватар для nonamez123
185 / 181 / 12
Регистрация: 23.10.2010
Сообщений: 1,301
09.12.2010, 15:18  [ТС]     Обменять значение перменных #10
спасибо, будет что гуглить, а то по запросу C++ ^* нечё путёвого нет)

Добавлено через 51 секунду
Цитата Сообщение от Dzhej-Dzhej Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
int main()
{
    int a , b;
    cout<<"a = ";
    cin>>a;
    cout<<"b = ";
    cin>>b;
    cout<<"a = "<<a<<"\tb = "<<b<<endl;
    a = b ^ a;
    b = a ^ b;
    a = b ^ a;
    cout<<"a = "<<a<<"\tb = "<<b<<endl;
    system("pause");
    return 0;
}
может так проще будет для вас

да

знаки умножения - указатели, &а - разыменовать указатель(как по-человечески сказать, не помню, типа добраться до значения переменной, на которую указывает указатель)
- логическая операция "исключающее или"
"%d" стоит, чтоб сказать printf'у, чтобы он выводил целое число
примерно так
не, как раз с функцией очень даже хорошо-буду хоть какое-то представление иметь, а вот что значит endl?
Dzhej-Dzhej
Заблокирован
09.12.2010, 15:19     Обменять значение перменных #11
Цитата Сообщение от nonamez123 Посмотреть сообщение
а вот что значит endl?
перевод строки
насчет ^, лучше гуглить "xor c++", xor - это аналог(в vb, pas)
asics
Freelance
Эксперт C++
 Аватар для asics
2841 / 1778 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
09.12.2010, 15:20     Обменять значение перменных #12
Цитата Сообщение от Dzhej-Dzhej Посмотреть сообщение
перевод строки
+ очищает буфер
nonamez123
 Аватар для nonamez123
185 / 181 / 12
Регистрация: 23.10.2010
Сообщений: 1,301
09.12.2010, 15:24  [ТС]     Обменять значение перменных #13
какая разница между \n и endl? как я понял \n для использования в тексте, а endl за его пределами?

Добавлено через 25 секунд
Цитата Сообщение от asics Посмотреть сообщение
+ очищает буфер
теперь понятно)

Добавлено через 2 минуты
да, и ещё... какой вариант лучше использовать ? cin,cout или же scanf,printf ?
asics
Freelance
Эксперт C++
 Аватар для asics
2841 / 1778 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
09.12.2010, 15:31     Обменять значение перменных #14
nonamez123, cin, cout - это С++
scanf,printf - это Си.
И не стоит об этом забывать.
nonamez123
 Аватар для nonamez123
185 / 181 / 12
Регистрация: 23.10.2010
Сообщений: 1,301
09.12.2010, 15:37  [ТС]     Обменять значение перменных #15
Цитата Сообщение от asics Посмотреть сообщение
nonamez123, cin, cout - это С++
scanf,printf - это Си.
И не стоит об этом забывать.
если сидишь именно в c++ я имел в виду. Потому-что у нас вот к примеру в учебке начали с Turbo C++ Lite, но препод всё-равно использует printf,scanf.
asics
Freelance
Эксперт C++
 Аватар для asics
2841 / 1778 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
09.12.2010, 15:39     Обменять значение перменных #16
nonamez123, Как по мне, то это полохой тон использовать сишные функции в С++.
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
10.12.2010, 11:44     Обменять значение перменных #17
Не люблю, когда смешивают языки. Поддержка сишных средств для работы с потоками оставлена в плюсах для совместимости с тоннами ранее написанного на Си кода, но не для того, чтобы смешивать языки, и наряду с, например, new/delete использовать printf/scanf.
easybudda
10.12.2010, 13:01
  #18

Не по теме:

Цитата Сообщение от silent_1991 Посмотреть сообщение
Поддержка сишных средств для работы с потоками оставлена в плюсах для совместимости с тоннами ранее написанного на Си кода, но не для того, чтобы смешивать языки
Вот представьте ситуацию: не знает человек ни С, ни С++, мало того - и знать не хочет. Но вот незадача, С++ - обязательный предмет в школе/институте/универе. Исключая варианты со взятками и (или) покупкой лабораторных/контрольных/что_у_них_там_ещё_бывает остаётся одно - учить худо/бедно. А препод не то, чтобы сам ничего не знает, скорее даже наоборот - точно знает, что и так заработает + считает себя выше всяких "мелких формальностей". Вот и учит студентов вместо заявленного С++ некоему гибридному языку почти собственного сочинения... Это Вы в курсе, что так не правильно, а студенту, которому лишь бы сдать зачёт/контрольную/экзамен, что printf(), что cout, что Console.WriteLine какое-нибудь - без особой разницы, он всё равно всё это через год как страшный сон забудет.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2010, 18:13     Обменять значение перменных
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
silent_1991
10.12.2010, 18:13     Обменять значение перменных
  #19

Не по теме:

easybudda, ну, я всего-лишь высказал своё мнение и аргументировал его. А вообще, хреновый это учитель, который не даёт своим ученикам самостоятельно что-то делать. Ведь он таким образом по большому счёту не учит ничему, а даёт установку делать так, а не иначе. Нас вот до сих пор никогда так не ограничивали, как хотите - так и пишите, главное, чтобы правильно.

Yandex
Объявления
10.12.2010, 18:13     Обменять значение перменных
Ответ Создать тему
Опции темы

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