home | ### 10. Abend Übung
### Übungsaufgabe 1
| Schreibe eine Funktion mit dem Namen "SwapLongs". Diese Funktion soll zwei ihr übergebene Parameter vom Datentyp long tauschen ( = swap) , so dass folgendes Programm die gewünschte Ausgabe erzeugt. Überlege Dir auch was die Funktion für einen Rückgabewert haben muss.
    int main()
    {
        long a = 10;
        long b = 20;

        cout << a << endl;
        cout << b << endl;

        SwapLongs(a, b);

        cout << a << endl;
        cout << b << endl;

        return 0;
    }

    gewünschte Ausgabe :
    10
    20
    20
    10
### Lösung 1
    #include <iostream>

    using namespace std;

    // SwapLongs mit Referenzen

    void SwapLongs(long& x, long& y)
    {
        long temp = x;
        x = y;
        y = temp;
    }

    int main()
    {
        long a = 10;
        long b = 20;

        cout << a << endl;
        cout << b << endl;

        SwapLongs(a, b);

        cout << a << endl;
        cout << b << endl;

        return 0;
    }
### Übungsaufgabe 2
| Schreibe nun eine zweite Funktion "SwapLongs". Diesmal soll die Funktion aber mit Zeigern funktionieren ! Schreibe also die Funktion mit long* als Übergabeparameter. Schreibe auch gleich das main aus der Übung von vorhin so um, dass das Beispiel kompiliert und das richtige ausgibt !
### Lösung
    #include <iostream>

    using namespace std;

    // SwapLongs mit Zeigern

    void SwapLongs(long* px, long* py)
    {
        long temp = *px;
        *px = *py;
        *py = temp;
    }

    int main()
    {
        long a = 10;
        long b = 20;

        cout << a << endl;
        cout << b << endl;

        // Hier mit address of operator &
        SwapLongs(&a, &b);

        cout << a << endl;
        cout << b << endl;

        return 0;
    }
### Übungsaufgabe 3
| Schreibe mit Hilfe der SwapLong-Funktion eine Funktion, die vier long Parameter sortiert, s dass folgendes main die gewünschte Ausgabe erzeugt. Verwende hierfür den Tauschsort-Algorithmus. Hierbei werden in einer Schleife die beiden benachbarten Zahlen getauscht, falls die zweite kleiner als die erste ist. Die Schleife wird dann abgebrochen, wenn die Bedingung nicht mehr eintrifft und keine Zahlen mehr getauscht wurden. Sie kann auch maximal so häufig abgearbeitet werden wie es Elemente zu sortieren hat.
    int main()
    {
        long r = 63;
        long s = 20;
        long t = 11;
        long u = 6;

        cout << r << endl;
        cout << s << endl;
        cout << t << endl;
        cout << u << endl;

        Sort4Longs(r, s, t, u);

        cout << r << endl;
        cout << s << endl;
        cout << t << endl;
        cout << u << endl;

        return 0;
    }

    Ausgabe :
    63
    20
    11
    6
    6
    11
    20
    63
### Lösung
    #include <iostream>

    using namespace std;

    void SwapLongs(long& x, long& y)
    {
        long temp = x;
        x = y;
        y = temp;
    }

    void Sort4Longs(long& a, long& b, long& c, long& d)
    {
        for(long i = 0; i < 4; ++i)
        {
            if(b < a) // ist b kleiner als a
            {
                SwapLongs(a, b);
            }
            if(c < b)
            {
                SwapLongs(b, c);
            }
            if(d < c)
            {
                SwapLongs(c, d);
            }
        }
    }

    int main()
    {
        long r = 63;
        long s = 20;
        long t = 11;
        long u = 6;

        cout << r << endl;
        cout << s << endl;
        cout << t << endl;
        cout << u << endl;

        Sort4Longs(r, s, t, u);

        cout << r << endl;
        cout << s << endl;
        cout << t << endl;
        cout << u << endl;

        return 0;
    }