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

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

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

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

26.03.2014, 14:26. Просмотров 3788. Ответов 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;
            }
        }
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2014, 14:26
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Написать функцию swap (C++):

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

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

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

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

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

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

73
Игорюня
20 / 16 / 7
Регистрация: 07.12.2013
Сообщений: 244
26.03.2014, 14:32 #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);
               
            }
        }
    }
0
SatanaXIII
Супер-модератор
Эксперт С++
5688 / 2743 / 258
Регистрация: 01.11.2011
Сообщений: 6,695
Завершенные тесты: 1
26.03.2014, 14:33 #3
VitekSR, какого типа pro?
0
VitekSR
0 / 1 / 0
Регистрация: 20.10.2013
Сообщений: 268
26.03.2014, 14:48  [ТС] #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
0
SatanaXIII
Супер-модератор
Эксперт С++
5688 / 2743 / 258
Регистрация: 01.11.2011
Сообщений: 6,695
Завершенные тесты: 1
26.03.2014, 14:51 #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;
            }
        }
    }
1
VitekSR
0 / 1 / 0
Регистрация: 20.10.2013
Сообщений: 268
26.03.2014, 14:59  [ТС] #6
нужно обязательно указать функцию swap

Добавлено через 1 минуту
может объявить функцию как то можно и вынести ее в начало кода, допустим перед main? или так нельзя?
0
MastAKK
145 / 136 / 12
Регистрация: 13.10.2012
Сообщений: 592
26.03.2014, 15:06 #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 - один из лучших вариантов
2
SatanaXIII
Супер-модератор
Эксперт С++
5688 / 2743 / 258
Регистрация: 01.11.2011
Сообщений: 6,695
Завершенные тесты: 1
26.03.2014, 15:07 #8
VitekSR, а пример от Игорюня вам не подходит?
0
MastAKK
145 / 136 / 12
Регистрация: 13.10.2012
Сообщений: 592
26.03.2014, 15:08 #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
}
1
VitekSR
0 / 1 / 0
Регистрация: 20.10.2013
Сообщений: 268
26.03.2014, 15:08  [ТС] #10
я же скинул ошибки на пример от Игорюня
0
MastAKK
145 / 136 / 12
Регистрация: 13.10.2012
Сообщений: 592
26.03.2014, 15:11 #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 секунды
Сравните код Игорюня и свой
0
SatanaXIII
Супер-модератор
Эксперт С++
5688 / 2743 / 258
Регистрация: 01.11.2011
Сообщений: 6,695
Завершенные тесты: 1
26.03.2014, 15:12 #12
во-во
0
some_name
Вежливость-главное оружие
227 / 225 / 55
Регистрация: 19.02.2013
Сообщений: 1,441
26.03.2014, 15:15 #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;
}
1
ValeryS
Модератор
6960 / 5297 / 522
Регистрация: 14.02.2011
Сообщений: 17,857
26.03.2014, 15:20 #14
Цитата Сообщение от MastAKK Посмотреть сообщение
P.S. терпеть не могу использование третьей переменной. Имхо, с xor - один из лучших вариантов
а есть еще с + -
чем это третья переменная так не угодила, при современных то объемах памяти
0
MastAKK
145 / 136 / 12
Регистрация: 13.10.2012
Сообщений: 592
26.03.2014, 15:23 #15
ValeryS, + и - тоже недолюбливаю, может быть переполнение, а с xor это менее вероятно (почти невероятно)
ИМХО, если есть возможность экономить память - нужно это делать
0
26.03.2014, 15:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2014, 15:23
Привет! Вот еще темы с ответами:

Написать функцию, которая могла бы передать значение в другую функцию - C++
как сделать функцию которая бы могла передать значеие в другую функцию ну к примеру a=4*b; где b=sin(fi);

не могу разобраться как написать функцию сортировки и исправить функцию добавления в стек - C++
#include &lt;iostream&gt; #include&lt;Windows.h&gt; using namespace std; struct NE{ int x; NE *pnext,*ppor,*cur;}; class SPISOK { NE...

Написать функцию, которая, в зависимости от выбора пользователя вызывает функцию сложения, произведения - C++
Кто знает как можно решить эту задачу на С++? Написать функцию, которая, в зависимости от выбора пользователя вызывает функцию сложения,...

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


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

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

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