thund3r cod3 Ответов: 4

Я получаю ошибку какие изменения я должен внести в свой код? #замена нет. С помощью функции


#include<iostream>
using namespace std;
int swap(int *, int *);
int main()
{
	int a, b;
	cout <<"Enter two number:\nA.";
	cin >> a;
	cout <<"B.";
	cin >> b;
	cout<<swap(&a, &b);
	return 0;
}
int swap(int x, int y)
{
	x = x + y;
	y = x - y;
	x = x - y; 
	return(x, y);

}


Что я уже пробовал:

#include<iostream>
использование пространства имен std;
int swap(int *, int *);
тап_п()
{
int a, b;
cout <<"введите два числа:\nA.";
cin >> a;
cout <<"B.";
cin >> b;
cout<

4 Ответов

Рейтинг:
2

KarstenK

Вы должны использовать синтаксис ссылки на ваш обмен :

int swap(int &x, int &y)
Тогда никакие новые экземпляры переменных не создаются при вызове, и вы получаете прямой доступ к переменным в вызове.


CPallini

Действительно. Мой 5.
Примечание возвращаемое значение может быть следующим void.

KarstenK

Вы правы, но результат используется для вывода. ;-)

Рейтинг:
2

Shao Voon Wong

Исправленный код с указателями должен быть ниже.

#include <iostream>
using namespace std;
void swap(int*, int*);

int main()
{
    int a, b;
    cout << "Enter two number:\nA.";
    cin >> a;
    cout << "B.";
    cin >> b;
    swap(&a, &b);
    cout << "a,b is now " << a << "," << b << endl;
    return 0;
}

// xor swap
void swap(int* x, int* y)
{
    *x = (*x) + (*y);
    *y = (*x) - (*y);
    *x = (*x) - (*y);
}

Пример вывода приведен ниже.
Enter two number:
A.56
B.89
a,b is now 89,56


Stefan_Lang

Почему вы опубликовали это решение? Нет никаких указаний на то, что требуется еще одна реализация swap (), и фактическая проблема была решена алеади.

Shao Voon Wong

Действительно!

CPallini

У меня 5.

KarstenK

Код глючит, когда возникают некоторые условия переполнения.

Рейтинг:
1

phil.o

- Реализация метода swap не соответствует его объявлению. Аргументы должны быть указателями на целые числа, чтобы переменные можно было менять местами. Несоответствие должно предотвратить компиляцию в любом случае, и компилятор должен выдать явную ошибку.

int swap(int *x, int *y) // ...

- Возвращаемый тип функции swap (целое число) не соответствует тому, что вы на самом деле пытаетесь вернуть (какой-то кортеж). Это также должно быть сигнализировано компилятором как ошибка. Если вы определяете параметры x и y как указатели, вам все равно не нужно будет ничего возвращать.


Рейтинг:
0

CPallini

Разрабатывать Карстенк решение (кстати, самое чистое), так как вы, по-видимому, не владеете синтаксисом указателя (а также ссылки) :

#include<iostream>
using namespace std;
void swap(int &, int &);

int main()
{
  int a, b;
  cout <<"Enter two number:\nA.";
  cin >> a;
  cout <<"B.";
  cin >> b;

  swap( a, b);
  cout << "After swap call\n";

  cout << "A = " << a << "\nB = " << b << "\n";
}
void swap(int & x, int & y)
{
  x = x + y;
  y = x - y;
  x = x - y;
}


Shao Voon Wong

5. Ссылка имеет более естественный синтаксис по сравнению с указателем.

CPallini

Спасибо.