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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.96
VitekSR
0 / 1 / 0
Регистрация: 20.10.2013
Сообщений: 244
#1

Написать функцию swap - C++

26.03.2014, 14:26. Просмотров 3271. Ответов 73
Метки нет (Все метки)

был вот такой код:
C++
1
2
3
4
5
6
7
8
9
10
for(i = 0; i < n - 1; i++)
    {
        for(j = i + 1; j < n; j++)
        {
            if(p[i].pro < p[j].pro)
            {
            swap (p[i], p[j]);
            }
        }
    }
нужно теперь написать функцию swap, вот мои наброски, но почему то ничего не получается, помогите:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for(i = 0; i < n - 1; i++)
    {
        for(j = i + 1; j < n; j++)
        {
            if(p[i].pro < p[j].pro)
            {
                void swap (p[i].pro, p[j].pro);
                int t = p[i].pro;
                p[i].pro = p[j].pro;
                p[j].pro = t;
            }
        }
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2014, 14:26     Написать функцию swap
Посмотрите здесь:

Заменить функцию swap - C++
У меня есть программа. Я задаю массив, потом мне выводится массив, в котором удаляются все повторяющиеся элементы. Как можно заменить...

Чем можно заменить функцию swap? - C++
Чем можно заменить функцию swap? Она на моем компиляторе не работает. Библиотеку iostream включал.

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

Создать функцию SWAP, преобразующую заглавные буквы передаваемой ей строки в строчные и наоборот - C++
Создать функцию SWAP, преобразующую заглавные буквы передаваемой ей строки в строчные и наоборот. С помощью этой функции преобразовать...

Напишите функцию Swap(a, b), аргументами которой могут быть числа любого типа - C++
Напишите функцию Swap(a, b), аргументами которой могут быть числа любого типа. Функция меняет значения своих аргументов и не возвращает...

Написать встроенную функцию min () и обычную функцию imin (), которые возвращают меньшее из двух целых значений - C++
Написать встроенную функцию min () и обычную функцию imin (), которые возвращают меньшее из двух целых значений.

swap - C++
Ф-ция swap, ее написание/подключение. В общем объясните и расскажите как ее подключить и т.д. Спасибо.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Игорюня
20 / 16 / 7
Регистрация: 07.12.2013
Сообщений: 244
26.03.2014, 14:32     Написать функцию swap #2
Эм...Как-то странно вы написали функцию.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void swap ( int & a, int & b);
{
   int t = a;
   a = b;
   b = t;
}
 
for(i = 0; i < n - 1; i++)
    {
        for(j = i + 1; j < n; j++)
        {
            if(p[i].pro < p[j].pro)
            {
                void swap (p[i].pro, p[j].pro);
               
            }
        }
    }
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 1
26.03.2014, 14:33     Написать функцию swap #3
VitekSR, какого типа pro?
VitekSR
0 / 1 / 0
Регистрация: 20.10.2013
Сообщений: 244
26.03.2014, 14:48  [ТС]     Написать функцию swap #4
pro типа int

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void swap ( int & p[i].pro, int & p[j].pro);
{
    int t = p[i].pro;
    p[i].pro = p[j].pro;
    p[j].pro = t;
}
 
for(i = 0; i < n - 1; i++)
    {
        for(j = i + 1; j < n; j++)
        {
            if(p[i].pro < p[j].pro)
            {
                void swap (p[i].pro, p[j].pro);
               
            }
        }
    }
такие ошибки:
Ошибка 1 error C2057: требуется константное выражение c:\users\виктор\documents\visual studio 2010\projects\тестлабы2(2семестр)\тестлабы2(2семестр)\тест.cpp 43
Ошибка 6 error C2078: слишком много инициализаторов c:\users\виктор\documents\visual studio 2010\projects\тестлабы2(2семестр)\тестлабы2(2семестр)\тест.cpp 56
Ошибка 4 error C2143: синтаксическая ошибка: отсутствие "," перед "." c:\users\виктор\documents\visual studio 2010\projects\тестлабы2(2семестр)\тестлабы2(2семестр)\тест.cpp 43
Ошибка 5 error C2182: swap: недопустимое использование типа "void" c:\users\виктор\documents\visual studio 2010\projects\тестлабы2(2семестр)\тестлабы2(2семестр)\тест.cpp 56
Ошибка 3 error C2234: p: недопустимый массив ссылок c:\users\виктор\documents\visual studio 2010\projects\тестлабы2(2семестр)\тестлабы2(2семестр)\тест.cpp 43
Ошибка 2 error C2466: невозможно выделить память для массива постоянного нулевого размера c:\users\виктор\documents\visual studio 2010\projects\тестлабы2(2семестр)\тестлабы2(2семестр)\тест.cpp 43
7 IntelliSense: выражение должно иметь константное значение c:\users\виктор\documents\visual studio 2010\projects\тестлабы2(2семестр)\тестлабы2(2семестр)\тест.cpp 43
9 IntelliSense: недопустимый неполный тип c:\users\виктор\documents\visual studio 2010\projects\тестлабы2(2семестр)\тестлабы2(2семестр)\тест.cpp 56
8 IntelliSense: требуется круглая скобка ")" c:\users\виктор\documents\visual studio 2010\projects\тестлабы2(2семестр)\тестлабы2(2семестр)\тест.cpp 43
10 IntelliSense: требуется круглая скобка ")" c:\users\виктор\documents\visual studio 2010\projects\тестлабы2(2семестр)\тестлабы2(2семестр)\тест.cpp 56
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 1
26.03.2014, 14:51     Написать функцию swap #5
Вот так будет хорошо:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for(i = 0; i < n - 1; i++)
    {
        for(j = i + 1; j < n; j++)
        {
            if(p[i].pro < p[j].pro)
            {
                //void swap (p[i].pro, p[j].pro);
                int t = p[i].pro;
                p[i].pro = p[j].pro;
                p[j].pro = t;
            }
        }
    }
VitekSR
0 / 1 / 0
Регистрация: 20.10.2013
Сообщений: 244
26.03.2014, 14:59  [ТС]     Написать функцию swap #6
нужно обязательно указать функцию swap

Добавлено через 1 минуту
может объявить функцию как то можно и вынести ее в начало кода, допустим перед main? или так нельзя?
MastAKK
145 / 136 / 12
Регистрация: 13.10.2012
Сообщений: 586
Записей в блоге: 1
26.03.2014, 15:06     Написать функцию swap #7
Лично я бы сделал так
C++
1
2
3
4
5
6
template <typename T>
void swap(T& par1, T& par2){
   par1 = par1^par2;
   par2 = par2^par1;
   par1 = par1^par2;
}

Но если шаблоны ещё не знаете (что наверняка), то можно сделать так:
C++
1
2
3
4
5
void swap(int& par1, int& par2){
   par1 = par1^par2;
   par2 = par2^par1;
   par1 = par1^par2;
}
P.S. терпеть не могу использование третьей переменной. Имхо, с xor - один из лучших вариантов
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 1
26.03.2014, 15:07     Написать функцию swap #8
VitekSR, а пример от Игорюня вам не подходит?
MastAKK
145 / 136 / 12
Регистрация: 13.10.2012
Сообщений: 586
Записей в блоге: 1
26.03.2014, 15:08     Написать функцию swap #9
Полный простой код с template

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
template <typename T>
void swap(T& par1, T& par2){
   par1 = par1^par2;
   par2 = par2^par1;
   par1 = par1^par2;
}
 
int main(){
   int a = 1, b = 42;
   swap<int>(a, b);
   std::cout << a << " " << b; //вывод: 42 1
}

Без шаблонов
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
void swap(int& par1, int& par2){
   par1 = par1^par2;
   par2 = par2^par1;
   par1 = par1^par2;
}
 
int main(){
   int a = 1, b = 42;
   swap(a, b);
   std::cout << a << " " << b; //вывод: 42 1
}
VitekSR
0 / 1 / 0
Регистрация: 20.10.2013
Сообщений: 244
26.03.2014, 15:08  [ТС]     Написать функцию swap #10
я же скинул ошибки на пример от Игорюня
MastAKK
145 / 136 / 12
Регистрация: 13.10.2012
Сообщений: 586
Записей в блоге: 1
26.03.2014, 15:11     Написать функцию swap #11
Цитата Сообщение от VitekSR Посмотреть сообщение
я же скинул ошибки на пример от Игорюня
Таки у вас неправильно код переписан:
C++
1
void swap ( int & p[i].pro, int & p[j].pro);
1) p[i].pro тут НЕ НУЖЕН. Замените на просто имя переменной любое:
C++
1
void swap ( int & par1, int & par2)
2) У вас ; после закрывающей скобки, уберите её

Добавлено через 54 секунды
Сравните код Игорюня и свой
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 1
26.03.2014, 15:12     Написать функцию swap #12
во-во
some_name
Вежливость-главное оружие
221 / 221 / 55
Регистрация: 19.02.2013
Сообщений: 1,431
26.03.2014, 15:15     Написать функцию swap #13
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Если правильно понял что нужно, то вот:
C++
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
#include "stdafx.h"
#include <iostream>
 
struct MyType{
    int pro;    
};
 
void swap ( int & a, int & b)
{
    int t = a;
    a = b;
    b = t;
}
 
int main(){
 
    const int length = 5;
 
    MyType p[length];
        
    //initialization array
    for(int i = 0; i < length; ++i){         
        std::cout<<(p[i].pro = rand()%length)<<"  ";
    }
    std::cout<<std::endl;
    //sorting
    for(int i = 0; i < length - 1; ++i){
        for(int j = i + 1; j < length; ++j){
            if(p[i].pro < p[j].pro){
                swap (p[i].pro, p[j].pro);
            }
        }
    } 
    //out
    for(int i = 0; i < length; ++i){         
        std::cout<<p[i].pro<<"  ";
    }
 
    system("pause");
    return 0;
}
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,733
26.03.2014, 15:20     Написать функцию swap #14
Цитата Сообщение от MastAKK Посмотреть сообщение
P.S. терпеть не могу использование третьей переменной. Имхо, с xor - один из лучших вариантов
а есть еще с + -
чем это третья переменная так не угодила, при современных то объемах памяти
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2014, 15:23     Написать функцию swap
Еще ссылки по теме:

swap - C++
max, swap, min входят в &lt;iostream&gt; это стандартные функции?

swap - C++
Cи подчеркивает swap и говорит что он не определен! в данном случаи а это массив, а i и j индексы элементов swap(a,i,j)

Функция swap() - C++
А что выгоднее с точке зрения быстродействия - использование стандартной функции или &quot;ручной&quot; обмен через промежуточную...

Функция swap - C++
Доброго времени суток! Задался вопросом о реализации алгоритмов обмена двух переменных, но кроме этих ничего другого придумать не...

Объясните о swap() - C++
Есть такое задание: Описать процедуру Minmax(x,y) записывающую в переменную Х минимальное из значений Х и Y, а в переменную Y –...


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

Или воспользуйтесь поиском по форуму:
MastAKK
145 / 136 / 12
Регистрация: 13.10.2012
Сообщений: 586
Записей в блоге: 1
26.03.2014, 15:23     Написать функцию swap #15
ValeryS, + и - тоже недолюбливаю, может быть переполнение, а с xor это менее вероятно (почти невероятно)
ИМХО, если есть возможность экономить память - нужно это делать
Yandex
Объявления
26.03.2014, 15:23     Написать функцию swap
Ответ Создать тему
Опции темы

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