3 Zahlen nach Größe Sortieren



  • Hallo ich bin ganz neu in der Community.
    Ich bin gerade dabei mir die C++ Programmiersprache beizubringen, also ein kompletter Neuling hier. Ich habe ne Aufgabe im Buch die will, dass ich 3 Zahlen nach Größe Sortieren und anschließend die Differenz zwischen der Größten und Kleinsten zahl berechne. Ich habe bisher das hier:

    int a, b, c;
    int zahlen[3] = { a,b,c };
    cout << "Geben sie ihre Zahlen ein" << endl;
    cout << "Erste Zahl: " << endl;
    cin >> a;
    cout << "Zweite Zahl: " << endl;
    cin >> b;
    cout << "Dritte Zahl: " << endl;
    cin >> c;
    
    int zahlenliste[3] = { a,b,c };
    cout << "Unsortiert:\n";
    for (int i = 0; i < 3; ++i)
    {
        cout << zahlenliste[i] << " ";
    }
    cout << endl;
    
    
    
    for (int i = 0; i < 3 - 1; ++i)
    {
        int posMin = i;
    
        for (int j = i; j < 3; ++j)
        {
            
            if (zahlenliste[j] < zahlenliste[posMin])
            {
                posMin = j;
            }
        }
    
        if (i != posMin)
        {
            int d = zahlenliste[i];
            zahlenliste[i] = zahlenliste[posMin];
            zahlenliste[posMin] = d;
        }
    }
    

    return 0;
    }

    wie kriege ich es jetzt hin dass er die sortierten Zahlen ausgibt? Nicht haten wenn ich einen Anfängerfehler gemacht habe. Schließlich BIN ich noch ein Anfänger.



  • @PeterKat sagte in 3 Zahlen nach Größe Sortieren:

    wie kriege ich es jetzt hin dass er die sortierten Zahlen ausgibt?

    Naja der erste Schritt wäre die Zahlen zu sortieren.

    Wenn du das programmieren willst, dann solltest du dir erstmal überlegen wie du es selbst machen würdest. Also überleg dir wie man 3 Zahlen sortieren kann. Beschreib es in Worten, Schritt für Schritt.

    Und dann übersetze das was du geschrieben hast in C++.

    Wenn du dabei Probleme hast, poste das Ergebnis dieses Prozesses so weit wie du noch gekommen bist und beschreibe was dir Probleme macht beim nächsten Schritt.



  • @PeterKat sagte in 3 Zahlen nach Größe Sortieren:

    int a, b, c;
    int zahlen[3] = { a,b,c };

    Wozu soll das gut sein?



  • @PeterKat sagte in 3 Zahlen nach Größe Sortieren:

    wie kriege ich es jetzt hin dass er die sortierten Zahlen ausgibt?

    Genauso wie du die vorher unsortierten Zahlen des Arrays zahlenliste ausgegeben hast. 😉

    PS: @hustbaer: Das Sortieren hat @PeterKat ja schon...



  • Ich glaub' Du denkst viel zu kompliziert. Wie sortierst denn zwei Zahlen?

    wenn a > b, tauschen

    Drei Zahlen:

    wenn a > c, tauschen
    wenn a > b, tauschen
    wenn b > c, tauschen



  • @Th69 sagte in 3 Zahlen nach Größe Sortieren:

    PS: @hustbaer: Das Sortieren hat @PeterKat ja schon...

    Oops! Ich hab übersehen dass es da was zu scrollen gibt!

    @PeterKat Sorry, mein Fehler!



  • Für den Einstieg in C++ würde ich Dir empfehlen, direkt auf std::vector der Standardbibliothek zurückzugreifen, statt auf die statischen C-style Arrays; und Dich mit dem Gebrauch dieses Containers vertraut zu machen. Zwei der m.E.n. wichtigsten Vorteiler von std::vector gegenüber den Arrays sind, dass sie sich dynamisch in ihrer Größe anpassen lassen und sie direkt mit den Algorithmen der Standardbibliothek zusammenspielen.

    Als zweites würde ich auch für so etwas wie das Sortieren direkt auf den angebotenen Sortieralgorithmus std::sort der Standardbibliothek setzen. Auch wenn das hier mit drei Zahlen ein triviales Beispiel ist, so halte ich es persönlich für zielführender, zuerst die vorhandenen Standardverfahren kennenzulernen, statt alles nachzuprogrammieren.

    In untenstehendem Code findest Du einen Vorschlag. Für die Nutzung von std::vector musst Du den Header <vector> einbinden. Für den Standardsortieralgorithmus std::sort den Header <algorithm>.

    Du siehst beim Aufruf von sort, dass man diesem hier nur den Beginn und das Ende des Vektors übergeben muss, um diesen von Kleiner nach Größer sortieren zu lassen. Um die Differenz zu ermitteln, kann man dann einfach das letzte (größte) und erste (kleinste) Element aus dem sortierten Vektor voneinander subtrahieren.

    Ein Container wie std::vector erlaubt auch noch den sehr eleganten Zugriff auf seine Elemente mittels einer sog. "range-based for loop", die sich sehr intuitiv lesen lässt.

    Ich habe mal auf sonstige Optimierungen (insbesondere Referenzen) verzichtet, um nicht zu viele unbekannte Konzepte jetzt zu Beginn einzubringen. Darauf wirst Du dann im Laufe Deiner Lernphase stoßen. Nur die Eingabe der Zahlen habe ich mal in eine extra Funktion ausgelagert, um das Verfahren damit zu illustrieren.

    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    std::vector<int> read_numbers(int count)
    {
    	// create temporary vector to store input data
    	std::vector<int> vec;
    
    	// store input into newly created vector
    	int number{ 0 };
    	for (int i{ 0 }; i < count; ++i) {
    		std::cout << (i + 1) << ". number: ";
    		std::cin >> number;
    		vec.push_back(number);
    	}
    
    	// return copy of temporary vector
    	return vec;
    }
    
    int main()
    {
    	int count{ 3 };
    	std::vector<int> numbers;
    
    	// read numbers from command line and store these in vector numbers
    	numbers = read_numbers(count);
    
    	// use standard lib's sort algorithm to sort the vector
    	std::sort(numbers.begin(), numbers.end());
    
    	// calculate the difference between largest and smallest number in vector
    	int difference = numbers.back() - numbers.front();
    
    	// output the sorted vector
    	for (int x : numbers) {
    		std::cout << x << ' ';
    	}
    	std::cout << "\n";
    
    	// output difference
    	std::cout << "difference between largest and smallest number is " << difference;
    
    	return 0;
    }
    


  • @taocp sagte in 3 Zahlen nach Größe Sortieren:

    Auch wenn das hier mit drei Zahlen ein triviales Beispiel ist,

    Da es so trivial ist, ist es ein gutes Beispiel dafür eigene Gedankengänge in Code zu giessen.

    Irgendwann muss man damit anfangen - je früher, desto besser.
    Immer nur fertige/fremde Sachen zusammen klickern bringt einen nicht weiter.



  • @taocp Das "Sortiere mal drei Zahlen"-Problem ist in der Regel nur eine Denksportaufgabe und nix wofür ma vectoren oder std::sort() braucht.



  • Zum Sortieren gibt es Algorithmen, die einfachsten heißen bubble-sort, insertion-sort und quick-sort. Zu deren Funktionsweise findest du im Netz genug Material, auch wie man sie Umsetzt. Doch wenn du eine Programmiersprache lernen willst solltest du die Algorithmen selbstständig umsetzten können wollen. Das geht mit Schleifen und Abbruchbedingungen die auf Arrays (den zu sortierenden Zahlen) operieren.



  • @PeterKat Dein Code ist ein Insertion-Sort. Dazu habe ich folgende Implementation entwickelt
    array sind die zu sortierenden Zahlen, size die Länge des Arrays

    void msort(int *array, int size){
    	int i;
    	int j;
    	int tmp;
    	for(i=0; i<size - 1; i++){
    		j = i + 1;
    		tmp = array[j];
    		while(j>0 && array[j - 1]>tmp){
    			array[j] = array[j - 1];
    			--j;
    		}
    		array[j] = tmp;
    	}
    }
    


  • @EL-europ sagte in 3 Zahlen nach Größe Sortieren:

    Das geht mit Schleifen und Abbruchbedingungen die auf Arrays (den zu sortierenden Zahlen) operieren.

    das Selbige für Dich:

    @Swordfish sagte in 3 Zahlen nach Größe Sortieren:

    Das "Sortiere mal drei Zahlen"-Problem ist in der Regel nur eine Denksportaufgabe und nix wofür ma vectoren oder std::sort() braucht.



  • @Swordfish
    Was ist auch für mich 🤔



  • @EL-europ sagte in 3 Zahlen nach Größe Sortieren:

    @Swordfish
    Was ist auch für mich 🤔

    Was nach dem Doppelpunkt folgt.



  • Vielen Dank ich hab es jetzt


Anmelden zum Antworten