Wie vertausche ich zwei Zahlen
-
Mit welchen Befehl oder Satz kann ich in C++ Zahlen vertauschen?
-
Ganz einfach:
zahl1^=zahl2; zahl2^=zahl1; zahl1^=zahl2;
-
noch einfacher
swap(int a, int b);
-
Warum funktioniert dann folgender Code nicht?void Zahleneingabe(void)
{ int x; //Variablendeklaration für die 1. Zahl int y; //Variablendeklaration für die 2. Zahl gotoxy (10,3); printf("Geben sie die zu vergleichenden Zahlen ein"); gotoxy (10,5); printf ("Zahl X:"); gotoxy (12,5); scanf ("%i", &x); gotoxy (10,7); printf ("Zahl Y:"); gotoxy (12,7); scanf ("%i", &y); } //-------------------------------Zahlenvergleich-------------------------------- void Zahlenvergleich(void) { int x; // Variablendeklaration für die 1. Zahl int y; // Variablendeklaration für die 2. Zahl if (x>y) // Wenn x grösser als y dann... { swap(int x, int y);// z.B. 2 wird zu 1(x) // 1 wird zu 2(y) gotoxy (10,9); //gehe zu Position ... printf("x und y wurden vertauscht, x wurde zu %i",y); //drucke ... gotoxy (53,9); printf("und y wurde zu %i",x); } else // wenn nicht dann... { gotoxy (10,9); //gehe zu Position ... printf("x und y wurden nicht vertauscht"); //drucke ... } }
-
-
du rufst swap nicht auf, sondern deklarierst es. Wenn du nicht weisst, wie man Funktionen aufruft, solltest du dich damit erstmal beschäftigen, bevor du zur Standardlibrary vordringst.
-
deine Eingaben in ZahlenEingabe laufen ins leere, Zahlenvergleich arbeitet mit initialisierten Variablen. Hast du mal Basic programmiert? Befass dich nochmal mit Funktionen und wie man Werte übergibt.
-
-
template<class T> void swap(T& a, T& b) { T c = a; a = b; b = c; }
-
wie kann denn swap(int x,int y); funzen ???
die funktion vertauscht doch dann nur die Kopien der Argumente, oder sehe ich das falsch ?
Ich bin auch der Meinung, dass die Funktion mit Zeigerübergabe realisiert werden sollte, alsovoid swap(int*x,int*y) { int z=*x; *x=*y; *y=z; } //oder halt als template template <class T> void swap(T*x,T*y) { T z =*x; *x=*y; *y=z; }
Wenn ich da etwas total falsch verstanden habe, klärt mich bitte auf !
Gruß
E-the-Real
-
ethereal schrieb:
wie kann denn swap(int x,int y); funzen ???
die funktion vertauscht doch dann nur die Kopien der Argumente, oder sehe ich das falsch ?int& ist eine Referenz.
Bei einer Referenz wird keine Kopie erzeugt, daher funktioniert swap(int&, int&).swap(int, int) funktioniert tatsächlich nicht.
-
DrZoidberg schrieb:
Ganz einfach:
zahl1^=zahl2; zahl2^=zahl1; zahl1^=zahl2;
Der Trick ist aber wenn ich mich recht entsinne langsamer als die temporäre Variable.
-
Das hängt wahrscheinlich sehr vom verwendeten Compiler und von der CPU ab.
-
Es gibt aber afaik auch einen Opcode der einen Swap macht. Assembler-Freaks, bitte korrigiert mich wenn ich Müll erzähle
.
-
xchg