Wie das kleinste und größte Element eines Vektors ausgeben ?



  • Hallo ich habe eine ziemlich einfache Frage bei der ich aber nicht weiter komme, wie gibt man das kleinste und größte Elemnt eines Vektors aus ?

    Meine Aufgabe ist:
    Lesen Sie eine Folge von double-Werten in einen vector ein. Stellen Sie sich jeden Wert als die Distanz zwischen zwei Orten entlang einer gegebenen Route vor.
    Berechnen Sie die Gesamtdistanz (Summe aller Distanzen) und geben Sie den Wert aus.
    Ermitteln Sie die größte bzw. kleinste Distanz zwischen zwei benachbarten Orten und geben Sie die Werte aus.
    Ermitteln Sie die Durchschnittsdistanz zwischen zwei benachbarten Orten und geben Sie sie aus.

    Da ich nichts im Internet finden konnte und das Buch "Einführung in die Programmierung mit C++ von Bjarne Stroustrup" keine Lösungen beinhaltet dachte ich mir das ich mal hier nachfrage.


  • Mod

    Wie würdest du es denn machen, wenn du statt eines Computerprogramms ein Buch mit einer Zahl auf jeder Seite bekommen hättest, mit der gleichen Aufgabenstellung?



  • Skiller801 schrieb:

    Wie das kleinste und größte Element eines Vektors ausgeben?

    http://www.cplusplus.com/reference/algorithm/min_element/
    http://www.cplusplus.com/reference/algorithm/max_element/



  • Swordfish schrieb:

    Skiller801 schrieb:

    Wie das kleinste und größte Element eines Vektors ausgeben?

    http://www.cplusplus.com/reference/algorithm/min_element/
    http://www.cplusplus.com/reference/algorithm/max_element/

    Ja gibt‘s denn kein minmax_element?




  • Mod

    Swordfish schrieb:

    Skiller801 schrieb:

    Wie das kleinste und größte Element eines Vektors ausgeben?

    http://www.cplusplus.com/reference/algorithm/min_element/
    http://www.cplusplus.com/reference/algorithm/max_element/

    Wenn schon schummeln, anstatt zu lernen, dann richtig:
    http://www.cplusplus.com/reference/algorithm/minmax_element/
    Und da der Threadersteller nun sieht, dass die Standardbibliothek auch beides in einem einzigen Durchgang kann, kann er ja mal überlegen wie das wohl gemacht wurde (ist nicht schwer) und wie man das sogar noch mit den anderen beiden Aufgaben kombinieren kann (ebenfalls ganz einfach). Und dann macht er es besser selber, anstatt die fertigen Algorithmen zu benutzen, denn dann lernt er auch was nützliches dabei, das über das Benutzen von anderer Leute Lösungen hinaus geht.

    Es scheint mir nämlich allgemein sein Hauptproblem zu sein, dass er lieber fertige Lösungen für einfache Probleme bei anderen sucht, anstatt sie selber zu lösen. Wenn man die ganzen einfachen Sachen aber nicht selber kann, dann schafft man auch die schweren Sachen nicht, für die es keine fertigen Lösungen mehr gibt. Die fertigen Lösungen für die kleinen Probleme sind eher dafür da, damit man als erfahrener Programmierer nicht zum 100. Mal ein minmax schreiben muss, wenn man es mal wieder braucht. Man sollte aber stets wissen, was es überhaupt macht.



  • Danke für die Konstruktive Kritik, werde in Zukunft auf jeden fall mehr alleine versuchen.

    Habe es am ende doch noch hinbekommen 🙂

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    int main() { 
    
    	double distance,werte,insgesamt,gross,klein; 
    
    	vector<double> ort; 
    
    	cout << "Wie viele Werte wollen Sie eingeben ? " << endl;
    	cin >> werte;
    	system("cls");
    
    	for(int i=0; i< werte;i++){
    		cin >> distance;
    		ort.push_back(distance);		
    		insgesamt += distance; 
    
    	}
    	klein =ort[0];
    	for(int i=0; i< ort.size();i++){ 
    		if(ort[i] < klein)
    			klein=ort[i];
    	}		
    
    	for(int i=0; i< ort.size();i++){
    		if(ort[i] > gross)
    			gross=ort[i];
    	}
    
    	cout << "Distanz insgesamt: " << insgesamt << endl;
    	cout << "Durchschnitt: " << insgesamt/werte << endl;
    	cout << "Kleinster Wert: " << klein << endl;
    	cout << "Groesster Wert: " << gross << endl;
    }
    

    Oder kann man da noch etwas verbessern ?


  • Mod

    gross wird uninitialisiert benutzt.

    Man könnte/sollte auch noch prüfen, ob es überhaupt ein ort[0] gibt, bevor man darauf zugreift. Das Minimum/Maximum einer leeren Menge ist halt einfach nicht definiert.

    Man könnte alles in einem Rutsch machen, dann spart man sich das oftmalige Durchgehen des vectors. Prinzipiell könnte man auch den ganzen Vector weglassen, aber das ist nicht im Sinne der Aufgabenstellung. Wahrscheinlich ist mit der Aufgabenstellung auch gemeint, die Summe nicht schon während der Eingabe zu berechnen.

    Deine Variablen haben fast alle sehr ungünstige Bezeichner:
    -werte ist keine Sammlung von Werten, sondern eine Anzahl
    -ort ist kein Ort, sondern eine Sammlung von Werten
    -insgesamt, gross, und klein sind nicht einmal Substantive, obwohl es sich um Dinge handelt, nämlich um eine Summe, ein Maximum, und ein Minimum.
    -distance ist Sprachmischmasch, wobei es insgesamt üblicher wäre, alles auf Englisch zu machen.
    Es ist durchaus möglich, ein C++-Programm so zu schreiben, dass es sich annähernd wie ein ganz normaler Text liest, wenn man nur gut Bezeichner wählt. So fallen dann auch viel leichter Logikfehler auf. Passende Bezeichner sind wichtig!


Anmelden zum Antworten