Implementierung einer Funktion

Hallo,
habe hir eine Aufgabe, weis aber nicht was man da machen soll.
Kann mir bitte jemangd helfen?

Aufgabe :
(a) Implementieren Sie eine Funktion swap(), welche die Werte zweier geeignet an die Funktion übergebener int-Variablen miteinander vertauscht.
(b) Geben Sie auch eine Implementierung von swap in Form eines Makros an.

Danke im Voraus.

(Ps.: bin ein Anfänger, desshalb bitte einfach erklären.)

inline void Swap(int& p\_riVal1, int& p\_riVal2)
{
 p\_riVal1 ^= p\_riVal2;
 p\_riVal2 ^= p\_riVal1;
 p\_riVal1 ^= p\_riVal2;
}

#define IMPLEMENT\_SWAP void Swap(int& p\_riVal1, int& p\_riVal2)\
 {\
 p\_riVal1 ^= p\_riVal2;\
 p\_riVal2 ^= p\_riVal1;\
 p\_riVal1 ^= p\_riVal2;\
 }

oder so noch zusätzlich:

#define SWAP(p\_riVal1,p\_riVal2)\
 {\
 p\_riVal1 ^= p\_riVal2;\
 p\_riVal2 ^= p\_riVal1;\
 p\_riVal1 ^= p\_riVal2;\
 }\

Vielen Dank für die Antwort .

Aber was ist das für ein Zeichen was du da verwendest. ("^")

Gruss,
Alexander

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

^= nennt man „bitwise exclusive OR operation“

Es gilt:

p1 ^= p2; p1 = p1 ^ p2;

Haben wir:

p1 ^= p2;
p2 ^= p1;
p1 ^= p2;

mit p1 = 0101 als Bits und p2 = 1100 als Bits, dann sieht es so aus:

p1 0101
p2 1100
-------------------
p1 1001





p2 1100
p1 1001
-------------------
p2 0101





p1 1001
p2 0101
-------------------
p1 1100

Es ist als nun p1=1100 statt 0101 und p2=0101 statt 1100.

Implementierung einer Funktion
wäre das auch eine richtige Lösung???

void swap (int v[], int i, int j)
{
int temp;

temp = v[i];
v[i] = v[j];
v[j] = temp;
}

Warum soll ich beim swappen drei Parameter uebergeben. Bischen kompliziert und unuebersichtlich.
Wenn, dann so:

void swap (int& i, int& j)
{
 int temp = i;
 i = j;
 j = temp;
}

Und wie willst Du die ge-swap-ten Werte zurueckerhalten?
Und was soll der User fuer int v[] übergeben?
Ueber einen Zugriff via v[i] könnte z.B. wild im Speicher rumgefuscht werden, wenn man out of index ist!

Ich denke, dass solltest Du nicht vorlegen, es sei denn die Aufgabenstellung ist anders, als angenommen.
Es sei denn, es ist gemeint, das in einem int-Array an den zero-based Positionen i und j die Inhalte der Elemente vertauscht werden soll ? Dann passt es schon, was Du geschrieben hast. Das konnte ich aber bestenfalls nicht aus deiner Fragestellung rauslesen, denn es sollten zwei int-Variablen vertauscht werden und nicht der Wert der Inhalte an zwei positionen i und j eines int-Array. Fuer mich ist das ein Unterschied!

Genauere Begriffsbildung fuehrt meist schnell zum gewuenschtn Ziel.

Nun, die Aufgabenstellung habe ich abgeschrieben,
was der Prof damit meint weis ich auch nicht.
(Am besten werde ich noch mal nachfragen. )

Auf jeden Fall, vielen Dank für deine Mühe.

Gruss

Alexander

Nun, die Aufgabenstellung habe ich abgeschrieben,
was der Prof damit meint weis ich auch nicht.
(Am besten werde ich noch mal nachfragen. )

Auf jeden Fall, vielen Dank für deine Mühe.

Hallo,

ich mische mich mal ein :smile:

Ist Dir der „inline-Trick“ aufgefallen? Dadurch, dass Vir2 die Funktion „inline“ deklariert hat, wirkt sie quasie genau wie das Makro, d.h. der Code wird in die aufrufende Funktion eingebaut. Lediglich ohne „inline“ gibt es einen Unterschied zum Makro.

Nur so zur Erklärung …

Gruß

Fritze