[gelöst] 3 ints sortieren ohne Werkzeug



  • Ich tippe auf das hier: Einführung in die Programmierung mit C++ | ISBN: 3868940057
    Stroustrup wurde schon genannt, std_lib_facilities.h haben wir hier auch schonmal diskutiert.

    Ich kann mir nicht vorstellen, dass die Lösung so aussehen soll wie von SeppJ. Stroustrup ist sehr pragmatisch und darauf bedacht, guten Stil zu lehren; intellektuelle Kunststückchen verlangt er sicher nicht.



  • @knivil - Stimmt, auch dir vielen Dank. Wie abs() zu implementieren wäre, hätte ich allerdings nicht gewusst - Mathe ist schon verdammt lange her. Grins.

    @Bashar - genau das, ja. Wie gesagt, ich bin nicht sicher, ob Stroustrup das auch wirklich so gemeint hat. Tatsache ist aber, dass alles, was ich jetzt mal ausgeschlossen habe, vor dieser Aufgabe im Buch wirklich nicht besprochen und auch nicht angewendet wird. Man sollte aber vielleicht noch erwähnen, dass jedes Kapitel einen dreiteiligen Übungsteil hat. Im ersten Teil wird einfach nur angewendet, was besprochen wurde. Im zweiten Teil gibt es Wiederholungsfragen zum Inhalt des Kapitels. Und im dritten Teil gibt es *wirkliche* Aufgaben, bei denen eigenes Rätseln und Nachdenken gefordert ist. Kleine Puzzles eben. Und die Aufgabe stammt aus diesem dritten Teil. Stroustrup selbst sagt, dass die Aufgaben des dritten Teils Rätsel sind, die man für das Verständnis des Buches nicht bearbeiten *muss*. Obligatorisch sind nur die ersten beiden Übungsteile. Kann also gut sein, dass er vielleicht gerade doch auf solche "intellektuellen Kunststücke" aus ist. Vielleicht kann ich in ein paar Kapiteln mehr dazu sagen, wenn ich die anderen Aufgaben gesehen habe.



  • Vielleicht gibt es zu den aufgaben auch Loesungen des Autors.



  • knivil schrieb:

    Vielleicht gibt es zu den aufgaben auch Loesungen des Autors.

    http://www.stroustrup.com/Programming/Solutions/Ch3.html



  • Hm. Er benutzt logische Operatoren in seiner Lösung. Da muss ich nachher die ersten drei Kapitel nochmal durchblättern, ob ich das irgendwo übersehen habe. Falls nicht, schreibe ich ihm. 🙂



  • Hab das Buch nicht, aber nach dem Link von oben ist Kapitel 3.4 'Operationen und Operatoren'. Da wird das wohl drin stehen.
    Insgesamt einer der überflüssigsten Threads, die ich hier je gesehen habe 😉



  • Nein, steht da nicht drin. Das Buch ist auch nicht nach diesem Schema F aufgebaut, weil keine strukturierte Sprachbeschreibung, sondern didaktisches Lehrbuch.

    Und den Thread musst du ja nicht lesen oder beantworten. 🙂 Für mich war er nicht überflüssig - ich hab' was gelernt dabei.



  • dennis.cpp schrieb:

    Für mich war er nicht überflüssig - ich hab' was gelernt dabei.

    Okay, sry, dann will ch nichts gesagt haben.
    Du hast übrigens Recht: Laut Index kommt '&&' erst auf Seite 1053. Gewöhnungsbedürftiges Buch.



  • Ja, ist es tatsächlich. Und obwohl es mir bis jetzt echt gut gefällt, bin ich noch nicht sicher, ob es mir im Endeffekt mehr bringt als die beiden bisherigen Anläufe. Wenn's nicht vom "Meister" selbst wäre, wäre ich noch skeptischer... 🙂



  • Warum alle so kompliziert?

    Unrolled Bubble-Sort:

    #include <iostream>
    
    void sort3(int a, int b, int c)
    {
    	// tausche a, b wenn nötig
    	int a2 = a;
    	int b2 = b;
    
    	if (a > b)
    		a2 = b;
    	if (a > b)
    		b2 = a;
    
    	// tausche b, c wenn nötig
    	int b3 = b2;
    	int c2 = c;
    
    	if (b2 > c)
    		b3 = c;
    	if (b2 > c)
    		c2 = b2;
    
    	// tausche a, b wenn nötig
    	int a3 = a2;
    	int b4 = b3;
    
    	if (a2 > b3)
    		a3 = b3;
    	if (a2 > b3)
    		b4 = a2;
    
    	// haben fertig
    	std::cout << a3 << "," << b4 << "," << c2 << "\n";
    }
    
    int main()
    {
    	sort3(1, 2, 3);
    	sort3(1, 3, 2);
    
    	sort3(2, 1, 3);
    	sort3(2, 3, 1);
    
    	sort3(3, 1, 2);
    	sort3(3, 2, 1);
    	return 0;
    }
    


  • hustbaer schrieb:

    Warum alle so kompliziert?

    void sort3(int a, int b, int c)
    {
        // tausche a, b wenn nötig
        int a2 = a;
        int b2 = b;
    
        if (a > b)
            a2 = b;
        if (a > b)
            b2 = a;
    
    	if (c > b2)
    		cout << a2 << "," << b2 << "," << c << "\n";
    	if (c < a2)
    		cout << c << "," << a2 << "," << b2 << "\n";
    	else
    		cout << a2 << "," << c << "," << b2 << "\n";
    }
    
    int main()
    {
        sort3(1, 2, 3);
        sort3(1, 3, 2);
    
        sort3(2, 1, 3);
        sort3(2, 3, 1);
    
        sort3(3, 1, 2);
        sort3(3, 2, 1);
        return 0;
    }
    


  • Murks, sorry!!!


Anmelden zum Antworten