Sortieralgorithmus mit 3 Variablen



  • Hallo ich bin noch am Anfang und am C++ lernen und ich habe gerade ein Problem mit einem Sortier Algorithmus, das Programm läuft ohne Fehler, allerdings werden egal was ich eingebe die 3 Zahlen nicht richtig sortiert. Ich sehe vor lauter Bäumen den Wald (Fehler nicht). Meine Bedingungen müssten eigentlich funktionieren. Vielleicht sieht ja jemand wo mein Fehler liegt. 😕

    Schon mal vielen Dank

    // Sortieralgorithmus.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
    //
    
    #include "stdafx.h"
    #include <conio.h>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    	double zahl1;
    	double zahl2;
    	double zahl3;
    
    	double groesste;
    	double mittlere;
    	double kleinste;
    
    	cout << "Geben sie ihre 3 unterschiedlich grossen Zahlen zum Sortieren ein!\n";
    
    	cin >> zahl1 >> zahl2 >> zahl3;
    
    	//Größte Zahl finden
    
    	if (zahl1 > zahl2 &&  zahl1 > zahl3)
    	{
    		groesste = zahl1;
    	}
    	if (zahl2 > zahl1 && zahl2 > zahl3)
    	{
    		groesste = zahl2;
    	}
    	else
    	{
    		groesste = zahl3;
    	}
    
    	//mittlere Zahl finden
    
    	if (zahl1 > zahl2 && zahl1 < zahl3)
    	{
    		mittlere = zahl1;
    	}
    	if (zahl2 > zahl1 && zahl2 < zahl3)
    	{
    		mittlere = zahl2;
    	}
    	if (zahl1 < zahl2 && zahl1 > zahl3)
    	{
    		mittlere = zahl1;
    	}
    	if (zahl2 < zahl1 && zahl2 > zahl3)
    	{
    		mittlere = zahl2;
    	}
    	else
    	{
    		mittlere = zahl3;
    	}
    
    	//Kleinste Zahl finden
    
    	if (zahl1 < zahl2 && zahl1 < zahl3)
    	{
    		kleinste = zahl1;
    	}
    	if (zahl2 < zahl1 && zahl2 < zahl3)
    	{
    		kleinste = zahl2;
    	}
    	else
    	{
    		kleinste = zahl3;
    	}
    
    	if (zahl1 == zahl2 || zahl1 == zahl3 || zahl2 == zahl3)
    	{
    	cout << "Mindestens zwei Zahlen sind gleich!";
    	}
    	else
    	{ 
    		cout << "Die groesste Zahl ist\t" << groesste << "\n" << "die mittlere ist\t" << mittlere << "\n" << "die kleinste ist\t" << kleinste;
    	}
    
    	_getch();
    
    	return 0;
    }
    


  • Deine if-else Anweisungen sind falsch, du benötigst "if-else if-else".

    Am besten du benutzt mal den Debugger und gehst Schritt für Schritt durch dein Programm.





  • if(zahl1>zahl2)
    	std::swap(zahl1, zahl2);
    if(zahl1>zahl3)
    	std::swap(zahl1, zahl3);
    if(zahl2>zahl3)
    	std::swap(zahl2, zahl3);
    

    😃



  • swapper_ schrieb:

    if(zahl1>zahl2)
    	std::swap(zahl1, zahl2);
    if(zahl1>zahl3)
    	std::swap(zahl1, zahl3);
    if(zahl2>zahl3)
    	std::swap(zahl2, zahl3);
    

    Wie immer an dieser Stelle der Hinweis auf: https://en.wikipedia.org/wiki/Sorting_network, bzw. z.B. hier: http://www.iti.fh-flensburg.de/lang/algorithmen/sortieren/networks/optimal/optimal-sorting-networks.htm



  • Hey 🙂

    Danke für die Hilfe die Links sehe ich mir noch an, weil ich gemerkt habe das es wahrscheinlich eine viele einfachere Lösung gibt als so viele If-Anweisungen zu machen. Meine habe ich jetzt zum laufen bekommen, indem ich die fehlerhaften else Anweisungen entfernt habe und eine eigene if gemacht habe.
    Das mit dem swap muss ich mir mal ansehen.

    Hier noch mein funktionierender Code:

    // Sortieralgorithmus.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
    //
    
    #include "stdafx.h"
    #include <conio.h>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    	double zahl1;
    	double zahl2;
    	double zahl3;
    
    	double groesste;
    	double mittlere;
    	double kleinste;
    
    	cout << "Geben sie ihre 3 unterschiedlich grossen Zahlen zum Sortieren ein!\n";
    
    	cin >> zahl1 >> zahl2 >> zahl3;
    
    	//Größte Zahl finden
    
    	if (zahl1 > zahl2 &&  zahl1 > zahl3)
    	{
    		groesste = zahl1;
    	}
    	if (zahl2 > zahl1 && zahl2 > zahl3)
    	{
    		groesste = zahl2;
    	}
    	if (zahl3 > zahl1 && zahl3 > zahl2)
    	{
    		groesste = zahl3;
    	}
    
    	//mittlere Zahl finden
    
    	if (zahl1 > zahl2 && zahl1 < zahl3)
    	{
    		mittlere = zahl1;
    	}
    	if (zahl2 > zahl1 && zahl2 < zahl3)
    	{
    		mittlere = zahl2;
    	}
    	if (zahl1 < zahl2 && zahl1 > zahl3)
    	{
    		mittlere = zahl1;
    	}
    	if (zahl2 < zahl1 && zahl2 > zahl3)
    	{
    		mittlere = zahl2;
    	}
    	if (zahl3 > zahl1 && zahl3 < zahl2)
    	{
    		mittlere = zahl3;
    	}
    	if (zahl3 < zahl1 && zahl3 > zahl2)
    	{
    		mittlere = zahl3;
    	}
    
    	//Kleinste Zahl finden
    
    	if (zahl1 < zahl2 && zahl1 < zahl3)
    	{
    		kleinste = zahl1;
    	}
    	if (zahl2 < zahl1 && zahl2 < zahl3)
    	{
    		kleinste = zahl2;
    	}
    	if (zahl3 < zahl1 && zahl3 < zahl2)
    	{
    		kleinste = zahl3;
    	}
    
    	if (zahl1 == zahl2 || zahl1 == zahl3 || zahl2 == zahl3)
    	{
    	cout << "Mindestens zwei Zahlen sind gleich!";
    	}
    	else
    	{ 
    		cout << "Die groesste Zahl ist\t" << groesste << "\n" << "die mittlere Zahl ist\t" << mittlere << "\n" << "die kleinste Zahl ist\t" << kleinste;
    	}
    
    	_getch();
    
    	return 0;
    }
    

  • Mod

    Und jetzt guck dir dringend noch die beiden Vorschläge an, die mit 3 Abfragen auskommen und versuch nachzuvollziehen, warum die damit auskommen.



  • Und nun ueberlege auch mal, was du bei einer Eingabe von 10 Zahlen machen wuerdest. Oder gar bei 100 eingegebenen Zahlen... Oder bei einer vorher vom Benutzer eingegebenen Anzahl!

    Wenn du das so wie bislang weitermachst, wirst du da ganz schnell Probleme bekommen!

    Aber das sind sicher alles schoene Uebungsaufgaben!


Log in to reply