bei Eingabe der Ganzzahl 1 -> komisches Ergebnis



  • #include <iostream>
    using namespace std;
    
    int main()
    {
    
    	int Zahl1;
    	int Zahl2;
    	int Zahl3;
    	int max;
    	int min;
    
    	cout << "Bitte geben sie drei Ganzahlen ein!" << endl;
    
    	cout << "Eingabe für Zahl1: ";
    	cin >> Zahl1;
    	cout << endl;
    
    	cout << "Eingabe für Zahl2: ";
    	cin >> Zahl2;
    	cout << endl;
    
    	cout << "Eingabe für Zahl3: ";
    	cin >> Zahl3;
    	cout << endl;
    
    	cout << endl;
    
    	if (Zahl1 > Zahl2 && Zahl1 > Zahl3 && Zahl2 > Zahl3)
    	{
    		max = Zahl1;
    		min = Zahl3;
    	}
    
    	if (Zahl2 > Zahl1 && Zahl2 > Zahl3 && Zahl1 > Zahl3)
    	{
    		max = Zahl2;
    		min = Zahl3;
    	}
    
    	if (Zahl3 > Zahl1 && Zahl3 > Zahl2 && Zahl1 > Zahl2)
    	{
    		max = Zahl3;
    		min = Zahl2;
    	}
    
    	cout << "Größte Zahl ist: " << max << " Kleinste Zahl ist: " << min << endl;
    
    	return 0;
    }
    

    wenn ich als erste Zahl die 1 eingebe, bringt der mir bei der letzten Ausgabe über cout:

    Größte Zahl ist: 2293664 Kleinste Zahl ist: 20090000225

    wo is da der denkfehler !?



  • du hast nciht berücksichtigt, wenn zahlen gleich sind. dann wird min/max nicht zugewiesen.



  • Du hast einfach einige Möglichkeiten vergessen. Es müste 6 Kombinationen geben.

    [edit]Natürlich geht das ganze auch wesentlich effizienter.[/edit]



  • if (Zahl1 > Zahl2 && Zahl1 > Zahl3 && Zahl2 > Zahl3)
    	{
    		max = Zahl1;
    		min = Zahl3;
    	}
    
    	if (Zahl1 > Zahl2 && Zahl1 > Zahl3 && Zahl2 < Zahl3)
    	{
    		max = Zahl1;
    		min = Zahl2;
    	}
    
    	if (Zahl2 > Zahl1 && Zahl2 > Zahl3 && Zahl1 > Zahl3)
    	{
    		max = Zahl2;
    		min = Zahl3;
    	}
    
    	if (Zahl2 > Zahl1 && Zahl2 > Zahl3 && Zahl1 < Zahl3)
    	{
    		max = Zahl2;
    		min = Zahl1;
    	}
    
    	if (Zahl3 > Zahl1 && Zahl3 > Zahl2 && Zahl1 > Zahl2)
    	{
    		max = Zahl3;
    		min = Zahl2;
    	}
    
    	if (Zahl3 > Zahl1 && Zahl3 > Zahl2 && Zahl1 < Zahl2)
    	{
    		max = Zahl3;
    		min = Zahl1;
    	}
    

    so jetzt gehts. danke @Entyl_Sa. hät eigentlich selber drauf kommen müssen *imbodenversink*



  • Ich weiß ja nicht ob du mit deiner Methode irgendwas spezielles bezwecken willst, aber jetzt mal ein Vorschlag von mir, der auch das von Frauke2k angesprochene Problem behebt, was bei dem von dir geposteten Code immer noch existiert, selbst wenn das ein Zustand ist der von dir nicht bearbeitet werden muß.

    max = Zahl1;
    if(max<Zahl2) max=Zahl2;
    if(max<Zahl3) max=Zahl3;
    min = Zahl1;
    if(min>Zahl2) min=Zahl2;
    if(min>Zahl3) min=Zahl3;
    

    Sorry wenn ich dir damit irgendwie auf den Schlips getreten bin.

    Gruß
    Entyl Sa



  • bist net 😉
    danke für die kompaktere lösung 🙂



  • Hallo,
    Variablen mit Nummern im Namen sind selten eine gute Idee.
    Wenn du wirklich die Nummern brauchst, verwende ein Array. Damit lässt sich auch gleich viel besser arbeiten.

    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    int main()
    {
    	int zahl[3] = {0};
    
    	// Eingabe der Zahlen
    	// ...
    
    	cout << "Größte Zahl ist: " 
    		 << *max_element(zahl, zahl+3) 
    		 << " Kleinste Zahl ist: " 
    		 << *min_element(zahl, zahl+3) 
    		 << endl;
    
        return 0;
    }
    


  • Zahl1 > Zahl2 && Zahl1 > Zahl3 && Zahl2 > Zahl3

    Wenn Zahl1 größer Zahl2 ist und Zahl2 größer Zahl3, dann ist Zahl1 implizit größer als Zahl3. Ein Mathematiker könnte dir das jetzt sicher irgendwie beweisen.


Anmelden zum Antworten