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 ...
    }
    }
    


    1. 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.

    2. 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, also

    void 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


Anmelden zum Antworten