Einfache Klasse / set, get



  • Hallo,

    Ich bin komplett neu in C++ und habe gerade mit meinem Winf Studium begonnen und versuche es mir gerade selbst beizubringen, da wir keine Grundlagen erklärt bekommen.
    Nun sollte ich zunächst eine einfache main Funktion schreiben, welche einen Wert für den Benzinpreis eingeben lässt und ihn dann wieder ausgibt:

    #include <iostream>
    using namespace std;

    int main ()
    {
    cout << "Bitte den Benzinpreis eingeben.\n";
    int Benzinpreis;
    cin >> Benzinpreis;
    cout << "Der Benzinpreis betraegt: " << Benzinpreis << " Euro.";

    cin.sync();
    cin.get();
    return 0;
    }

    Als nächstes soll ich nun aber eine einfache Klasse und geeignete Set- und Get-Methoden. Nach jeder Frage soll abgefragt werden ,ob ein
    weiterer Wert eingelesen werden soll. Nach dem letzten Wert sollen die Werte für den Durchschnitt, das Minimum und das Maximum am Bildschirm ausgegeben werden.

    Ich will hier auf keine Fall eine Lösung von euch, sondern lediglich wissen, ob Ihr ein gutes Tutorial oder eine Hilfestellung zu dem Problem kennt. Ich bin wie gesagt komplett ohne Vorwissen und es fällt mir schwer ein gutes Tutorial zu besagtem Problem zu finden.

    Vielen Dank schonmal 🙂



  • Hi,

    hier mal ein paar Dinge, mit denen du die Aufgabe lösen kannst und dabei C++ Dinge kennenlernst:

    http://www.cplusplus.com/reference/vector/vector/

    http://www.cplusplus.com/reference/algorithm/min/

    http://www.cplusplus.com/reference/algorithm/max/

    http://www.cplusplus.com/reference/numeric/accumulate/

    Poste deine Lösung dann hier.



  • Wo hakt es denn?



  • Ich schau mir die Links mal an, wenn ich nach Hause komme, danke.

    @krümelkacker: Das Programm immer wieder zu wiederholen und zum Schluss Durchschnitt,Minimum und Maximum auszugeben.

    EDIT:
    Soweit bin ich:

    #include <iostream>
    using namespace std;

    int main (void)
    {
    int eingabe = -1;
    while(eingabe != 0) {

    cout << "Bitte den Benzinpreis eingeben.\n";
    float Benzinpreis;
    cin >> Benzinpreis;
    cout<<endl;
    cout << "Der Benzinpreis betraegt: " << Benzinpreis << " Euro.\n";
    cout<<endl;
    cout << "Soll ein weiterer Preis eingegeben werden?\n";
    cin >> eingabe;
    cout<<endl;

    }

    system("pause");
    return 0;
    }

    Ich weiß nicht wie ich die Schleife so machen kann das er bei ja wiederholen und bei nein Durchschnitt, Min, Max ausspucken soll.
    Bis jetzt hab ich versucht int ja, nein; und while eingabe = ja zu machen aber dann startet er garnicht erst 😕

    Irgendwo muss ich dann auchnoch class, set und get unterbringen. Häng grade ziemlich fest, so ganz ohne Vorwissen.



  • Hi,
    ich geb dir mal nochmal ne Hilfestellung:

    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    #include <numeric>
    using namespace std;
    
    int main (void)
    {
    	vector<int> Benzinpreise;
    	string eingabe = "ja";
    
    	while( eingabe != "nein" )
    	{
    		cout << "Bitte den Benzinpreis eingeben.\n"; 
    		int Benzinpreis; // Uh böser Fehler. Erst hast du es doch richtig gemacht. Natürlich werden Centbeträge eingegeben.
    		cin >> Benzinpreis;
    		// Hier machst du nun ein push_back: http://www.cplusplus.com/reference/vector/vector/
    
    		cout << "Soll ein weiterer Preis eingegeben werden?\n";
    		cin >> eingabe;
    		cout << '\n';
    	}
    
    	const int min = 123; // Hier holst du dir den kleinsten Wert: http://www.cplusplus.com/reference/algorithm/min/
    	cout << "Der niedrigste Benzinpreis: " << min;
    
    	const int max = 456; // Hier holst du dir den höcshten Wert: http://www.cplusplus.com/reference/algorithm/max/
    	cout << "Der niedrigste Benzinpreis: " << max;
    
    	const int durchschnitt = 789; // Hier berechnst du dir deinen Durchschnitt: http://www.cplusplus.com/reference/numeric/accumulate/ + http://www.cplusplus.com/reference/vector/vector/
    	cout << "Der Durchschnittspreis: " << durchschnitt;
    
    	cin.ignore( 999, '\n' ); // system("pause") solltest du nicht verwenden. Ist elend lahm und plattformabhängig.
    	cin.get();
    	// return 0; // return 0 wird in der main automatisch gemacht. musst du nicht extra hincshreiben.
    }
    


  • Hey,
    deine Hilfestellung hat mir schon sehr weiter geholfen, vielen Dank!!
    Bin allerdings noch unschlüssig an welcher Stelle ich nun die Set, Get und Klasse verwenden soll.

    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    #include <numeric>
    using namespace std;
    
    int main (void)
    
    {
    	vector<float> Benzinpreise; 
    	string eingabe = "j";
    
    	while ( eingabe != "n" )
    	{
    		cout << "Bitte den Benzinpreis eingeben.\n";
    		float Benzinpreis; 
    		cin >> Benzinpreis;
    		Benzinpreise.push_back(Benzinpreis); // Hier bin ich mir nicht wirklich sicher, da ich die Ausgabe unten noch nicht hinbekommen habe.
    		cout << endl;
    		cout << "Der Benzinpreis betraegt: " << Benzinpreis << " Euro.\n";
    		cout << endl;
    		cout << "Soll ein weiterer Preis eingegeben werden?\n" 
    			    "(j)a / (n)ein\n";
    		cin >> eingabe;
    		cout << endl;
    	}
    
    	const float min = 1; // fehlt noch
    	cout << "Der niedrigste Benzinpreis betraegt: " << min << " Euro.";
    	cout << endl;
    	cout << endl;
    
    	const float max = 2; // fehlt noch
    	cout << "Der hoechste Benzinpreis betraegt: " << max << " Euro."; 
    	cout << endl;
    	cout << endl; 
    
    	const float durchschnitt = 3; // fehlt noch
    	cout << "Der durchschnittliche Benzinpreis betraegt: " << durchschnitt << " Euro.";
    	cout << endl;
    	cout << endl;
    
    	cin.ignore( 999, '\n' ); 
    	cin.get();
    }
    


  • Obere Part stimmt mal 😃



  • denke dass du hier kein set/get/class brauchst, die aufgabe ist trivial.



  • Ich komm einfach nicht weiter ... 😞



  • Gallows schrieb:

    Ich komm einfach nicht weiter ... 😞

    Wenn ich das richtig sehe, musst du nur noch min max und Durchschnitt berechnen. Für min und Max gibt es fertige Algorithmen. "out" hat dir da schon die richtigen Links genannt. Durchschnitt ist mithilfe von accumulate auch sehr einfach. Du weißt doch prinzipiell wie man einen durchschnitt berechnet oder?



  • Also, ich habe jetzt alles neu gemacht und wie in der Aufgabenstellung gefordert set,get und class verwendet.
    Nun habe ich immernoch das Problem mit max etc. könnt Ihr mir helfen?

    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    #include <numeric>
    
    using namespace std;
    
    class Benzindaten
    {
    private:
    
    	float Maximum;
    	float Minimum;
    	float Durchschnitt;
    
    public:
    	void setMaximum(float);
    	void setMinimum(float);
    	void setDurchschnitt(float);
    	float getMaximum();
    	float getMinimum();
    	float getDurchschnitt();
    };
    
    void Benzindaten::setMaximum(float max)
    {
    	Maximum = max;
    }
    
    float Benzindaten::getMaximum()
    {
    	return Maximum;
    }
    
    void Benzindaten::setMinimum(float min)
    {
    	Minimum = min;
    }
    
    float Benzindaten::getMinimum()
    {
    	return Minimum;
    }
    
    void Benzindaten::setDurchschnitt(float durchs)
    {
    	Durchschnitt = durchs;
    }
    
    float Benzindaten::getDurchschnitt()
    {
    	return Durchschnitt;
    }
    
    int main(void)
    {
    
    	vector<float>Benzindaten;
    	string Antwort = "j";
    
    	while ( Antwort != "n" )
    
    	{
    
    		cout << "Benzinpreis eingeben: \n";
    		float Einzelpreis;
    		cin >> Einzelpreis;
    		Benzindaten.push_back(Einzelpreis);
    		cout << "Der Benzinpreis betraegt: " << Einzelpreis << " Euro.\n";
    		cout << endl;
    		cout << "Soll ein weiterer Preis eingegeben werden?\n"
    				"(j)a / (n)ein\n";
    		cin >> Antwort;
    		cout << endl;
    	}
    
    		system("pause");
    		return 0;
    }
    


  • dann wäre es doch einfacher wenn du in "class Benzindaten" einen vektor hältst, eine methode machst bei der man hinten anfügen kann (äquivalent zu push_back()) und je eine member-funktion pro abzurufenden wert (min, max, durchschnitt), deren wert du innerhalb der member-funktion berechnest (mit den vorprogrammierten funktionen aus der standard-bibliothek).



  • Ich versteh grade nichts mehr.. Sitz schon jeden Tag paar Stunden deswegen am Laptop und komme nicht weiter. Hab wirklich noch kein Vorwissen und von uns scheint das keiner so recht fertig zu bringen.



  • Gallows schrieb:

    von uns scheint das keiner so recht fertig zu bringen.

    hä lol, ich glaube jeder hier würde das in 5 minuten hintippen können. es geht aber darum dir etwas beizubringen, nicht darum die fertige lösung hinzuschreiben.

    und klar hast du vorwissen, in deinem eröffnungspost steht ja schon dass du etwas selbst geschrieben hast. hast du doch, oder?



  • Ich bin komplett neu in C++ und habe gerade mit meinem Winf Studium begonnen und versuche es mir gerade selbst beizubringen, da wir keine Grundlagen erklärt bekommen.

    Soviel zum Eröffnungspost.

    Das ist mir klar das hier jeder sowas in 5 Minuten hinbekommt. Eine fertige Lösung wollte ich auch niemals, wie dem Post zu entnehmen ist.

    Ich suche schon die ganze Zeit nach Lösungen für das Problem und probiere herum. Aber ohne Grundlagen ist es wirklich schwer direkt soetwas zu programmieren (vielleicht für fortgeschrittene nicht mehr nachvollziehbar).



  • Du hast es ja anscheinen geschafft die Werte in eine Vector einzulesen. Wie man das Maximum und Minimum berechtet wurde dir auch gesagt. Woran scheitert es denn noch konkret?



  • template <class T> const T& min (const T& a, const T& b) {
    return !(b<a)?a:b; // or: return !comp(b,a)?a:b; for version (2)
    }

    Meine class ist ja Benzindaten, aber in dem Beispiel sind es 2 Werte und bei mir sind es x-Werte, x=Anzahl der Angaben im Programm:

    template <class Benzindaten> const Benzindaten& min (const Benzindaten& ????)

    Ich weiß nicht wie ich es schreiben soll, weil bei dem Programm so lange Benzindaten eingelesen werden, bis der user "n" eingibt und dann sollen ja die Werte für den kleinsten/größten/durchschnitts eingegebenen Benzinpreis ausgegeben werden.



  • Ups da hast du natürlich recht, da hat dir jemand mist erzählt. Du brauchst den Algorithmus mit dem du das kleinste und größte Element aus dem vector bekommst also:
    http://www.cplusplus.com/reference/algorithm/minmax_element/

    Den durchschnitt kannst du aber wie gesagt mit accumulate machen, also erst werte aufsummieren und dann durch die Anzahl teilen.



  • Hallo Leute,

    die selbe Aufgabenstellung habe ich auch bekommen jedoch habe ich genauso wenig Vorwissen wie der Threadersteller. Ich hab mir nun sein Programm angeschaut und verstehe soweit die Logik. Die Aufgabe die mir gestellt wurde ist jedoch ohne get/Set/Klassen. Ab dem Punkt ;

    const float min = 1;
    cout << "Der niedrigste Benzinpreis betraegt: " << min << " Euro.";
    cout << endl;
    cout << endl;

    komme ich nicht weiter. Was muss ich den machen um damit er mir im Vektor das Minimum findet und ausgibt? Habe mir bereits die ganzen Seiten angeguckt aber komme trotzdessen nicht weiter. Ein Beispiel würde es mir einfacher machen

    Vielen Dank



  • @Gallows
    Minimum, Maximum und Durchschnitt, das kannst du alles berechnen während die Daten eingegeben werden.
    In Pseudecode:

    so lange wir preise einlesen wollen:
    
        setze preis = benutzereingabe
    
        wenn "preis" kleiner "min_preis" ist, oder wenn es der erste eingegebene preis war, dann:
            setze min_preis = preis
    
        wenn "preis" grösser "max_preis" ist, oder wenn es der erste eingegebene preis war, dann:
            setze max_preis = preis
    
        setze summe = summe + preis
        setze anzahl = anzahl + 1
    
    gib aus "min =" min_preis
    gib aus "max =" max_preis
    gib aus "avg =" (summe / anzahl)
    

    Kein Grund std::vector etc. zu verwenden.
    Nicht dass std::vector etc. schlecht wären, aber wenn ihr das noch nicht durch habt, dann wäre es wohl etwas viel auf einmal.

    Das nach C++ zu übersetzen lass ich euch mal als Übung.


Log in to reply