С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
mybabloo
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 40
#1

Описать процедуру, меняющую содержимое переменных X и Y - C++

14.02.2010, 23:57. Просмотров 1201. Ответов 17
Метки нет (Все метки)

вот тут решил разобраться с языком си, решал задачки и вот напоролся на такую:
Описать процедуру Swap(X, Y), меняющую содержимое переменных X и Y.
Собстна как сделать такую штуку?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2010, 23:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Описать процедуру, меняющую содержимое переменных X и Y (C++):

Pадача на процедуры (описать процедуру Swap(X,Y), меняющую содержимое переменных X и Y ) - C++
прошу решить и с объяснением если можно пожалуйста. Описать процедуру Swap(X,Y), меняющую содержимое переменных X и Y (Х и Y-...

Описать процедуру меняющую порядок элементов вещественного массива - C++
Описать процедуру Hill(A, N), меняющую порядок элементов вещественного массива A размера N на следующий: наименьший элемент массива...

Описать процедуру InvertDigits(K), меняющую порядок следования цифр - C++
Описать процедуру InvertDigits(K), меняющую порядок следования цифр целого положительного числа K на обратный (K — параметр целого типа,...

Описать процедуру, меняющую порядок следования элементов массива - C++
Описать процедуру Invert (A,N), меняющую порядок следования элементов массива A из N вещественных чисел на противоположный...

Описать процедуру InvertDigits(K), меняющую порядок следования цифр числа на обратный - C++
2. Proc7. Описать процедуру InvertDigits(K), меняющую порядок следования цифр целого положительного числа K на обратный (K — параметр...

Описать процедуру Minmax(X, Y), где сравнить две переменных и записать в Х меньшую, а в У - большую - C++
Описать процедуру Minmax(X, Y), записывающую в переменную X минимальное из значений X и Y, а в переменную Y — максимальное из этих значений...

17
Monte-Cristo
2790 / 1376 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
15.02.2010, 01:17 #2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
void Swap(int *x, int *y);
 
int main()
{
    int a = 5;
    int b = 7;
    
    printf("a=%d\tb=%d\n", a, b);
    Swap(&a, &b);
    printf("a=%d\tb=%d\n", a, b);
    
    return 0;
}
 
void Swap(int *x, int *y)
{
    int tmp = *x;
    *x = *y;
    *y = tmp;
}
0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
15.02.2010, 05:44 #3
C++
1
2
3
4
5
6
template <TBase> void Swap(TBase X,Y)
{
 X&=Y;
 Y&=X;
 X&=Y;
}
0
kazak
3050 / 2371 / 160
Регистрация: 11.03.2009
Сообщений: 5,436
Завершенные тесты: 1
15.02.2010, 10:24 #4
Цитата Сообщение от taras atavin Посмотреть сообщение
C++
1
2
3
4
5
6
template <TBase> void Swap(TBase X,Y)
{
 X&=Y;
 Y&=X;
 X&=Y;
}
Так ничего не выйдет. Во-первых переменные надо передовать по ссылке:
C++
1
template <TBase> void Swap(TBase &x,&y)
Во-вторых для этого алгоритма используется исключающее или:
C++
1
2
3
4
5
{
   x ^= y;
   y ^= x;
   x ^= y;
}
Потому как x &= y => x & y
y &= x => y & ( x & y) = > x & y
x &= y => (x & y) & (x & y) => x & y

x ^= y => x ^ y
y ^= x => y ^ (x ^ y) => x ^ (y ^ y) => x ^ 0 => x
x ^= y => (x ^ y) ^ x => y ^ (x ^ x) => y ^ 0 => y

Добавлено через 4 минуты
Цитата Сообщение от kazak Посмотреть сообщение
Так ничего не выйдет. Во-первых переменные надо передовать по ссылке:
А в Си передовать надо указатели на переменные, как у Графа в коде
1
fasked
Эксперт С++
4951 / 2531 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
15.02.2010, 11:36 #5
C
1
2
3
4
5
6
void swap(int &A, int &B)
{
    int t = A;
    A = B;
    B = t;
}
0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
15.02.2010, 11:53 #6
Да, точно:
C++
1
2
3
4
5
6
template <TBase> void Swap(TBase &X, TBase &Y)
{
 X^=Y;
 Y^=X;
 X^=Y;
}
0
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
15.02.2010, 11:56 #7
Цитата Сообщение от kazak Посмотреть сообщение
Во-вторых для этого алгоритма используется исключающее или:
мне вот интересно. нигде не сказано, что тип переменных - int. как вы будете менять значения двух векторов например?
0
fasked
Эксперт С++
4951 / 2531 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
15.02.2010, 12:03 #8
как вы будете менять значения двух векторов например?
C
1
2
3
4
5
6
7
8
9
10
void wswap(int * A, int * B, int size)
{
    int T;
    while(size--)
    {
        T    = *A;
        *A++ = *B;
        *B++ =  T;
    }
}
мне вот интересно. нигде не сказано, что тип переменных - int.
задание надо точнее указывать
0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
15.02.2010, 12:04 #9
Цитата Сообщение от zim22 Посмотреть сообщение
мне вот интересно. нигде не сказано, что тип переменных - int
Спициализируй шаблон для всех твоих типов и меняй.
0
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
15.02.2010, 12:59 #10
taras atavin, ты не понял. проследи цепочку рассуждений:

Цитата Сообщение от mybabloo Посмотреть сообщение
Описать процедуру Swap(X, Y), меняющую содержимое переменных X и Y.
Цитата Сообщение от kazak Посмотреть сообщение
для этого алгоритма используется исключающее или
Цитата Сообщение от zim22 Посмотреть сообщение
нигде не сказано, что тип переменных - int. как вы будете менять значения двух векторов (любых типов данных) например? (используя исключающее или)
0
fasked
Эксперт С++
4951 / 2531 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
15.02.2010, 13:02 #11
Прошу прощения, но в принципе где-то глубоко, все равно будут битовые операции и исключающее или xD
А так, тогда описываем процедуру копирования для каждого типа данных и пользуемся ею. memcpy, наверное подойдет, если знать размер.
0
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
15.02.2010, 13:22 #12
Цитата Сообщение от fasked Посмотреть сообщение
memcpy, наверное подойдет, если знать размер.
http://www.cplusplus.com/forum/general/10835/
It is undefined behavior to memcpy non-POD types. Or, put another way, the result of memcpy in C++ is only defined for POD types.
0
kazak
3050 / 2371 / 160
Регистрация: 11.03.2009
Сообщений: 5,436
Завершенные тесты: 1
15.02.2010, 13:24 #13
Цитата Сообщение от zim22 Посмотреть сообщение
мне вот интересно. нигде не сказано, что тип переменных - int. как вы будете менять значения двух векторов например?
Поэлементно.
0
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
15.02.2010, 13:33 #14
Цитата Сообщение от kazak Посмотреть сообщение
Поэлементно.
очень плохо.

http://www.cplusplus.com/reference/stl/vector/swap/
All iterators, references and pointers remain valid for the swapped vectors.
0
kazak
3050 / 2371 / 160
Регистрация: 11.03.2009
Сообщений: 5,436
Завершенные тесты: 1
15.02.2010, 13:38 #15
Это немного из другой оперы)
Цитата Сообщение от mybabloo Посмотреть сообщение
вот тут решил разобраться с языком си
1
15.02.2010, 13:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2010, 13:38
Привет! Вот еще темы с ответами:

Описать функцию, меняющую порядок элементов вещественного массива - C++
Описать функцию типа void Hill(A, N), меняющую порядок элементов вещественного массива A размера N на следующий: наименьший элемент массива...

Разработать функцию, меняющую местами содержимое старшего и младшего байтов каждого элемента матрицы - C++
Помогите, пожалуйста. Нужно разработать функцию, которая меняет местами содержимое старшего и младшего байтов каждого элемента двумерного...

Массив: Описать функцию swap(A,B), меняющую местами максимальные элементы матриц А и В. - C++
Надо исправить программу чтобы заработала. У самой уже ничего не получается=(( Описать функцию swap(A,B), меняющую местами максимальные...

Описать функцию, меняющую местами максимальные элементы двух матриц произвольного порядка - C++
После вывода на экран &quot;repl&quot; программа вылетает. Объясните, пожалуйста, почему? #include &lt;iostream&gt; #include &lt;stdlib.h&gt; using...


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

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

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