wie kann man in eine variable erste eingegebene Zahl speichern?



  • Mist. Hab mir kurz seine Frage durchgelesen und schon was mit vector vorbereitet. Jetzt merk ich, dass er das aber wohl doch nicht brauchen wird. Aber ich hab da jetzt so viel getippt, ich poste das trotzdem mal. Vielleicht verbessert das ja sein Verständnis ein wenig..

    #include <iostream> //cout, cin
    #include <vector> //vector
    #include <algorithm> //sort
    
    int main()
    { //naechte Zeile: vgl http://www.willemer.de/informatik/cpp/cppnames.htm
        using namespace std; //vector, cout, cin und sort liegen im namensraum std, diesen Namensraum machen wir hier bekannt
        vector<int> zahlen; //vector repraesentiert ein dynamisches Array, in diesem Fall von ganzen Zahlen (int)
        cout << "Gebe beliebig viele Zahlen ein (mit 0 wird die Eingabe beendet):\n";
        for(int zahl; ; zahlen.push_back(zahl)) //for-schleife: for(Initialisierung; Test (hier leer, da innerhalb der Schleife
        {                               //getestet wird); Aktion (hier das Hinzufuegen einer weiteren Zahl zum vector)
            cin >> zahl;
            if(!cin.good() || zahl == 0) //cin.good() ist false, wenn cin im Fehlerstatus ist (zb. durch die Eingabe von etwas,
                break;                //das nicht zum Datentyp passt, der erwartet wurde, also Buchstabe/sonst was statt Zahl)
        } //das break bricht die Schleifenausfuehrung ab
        if(zahlen.empty()) // http://www.cplusplus.com/reference/stl/vector/empty/
        {
            cout << "Keine Zahlen zu verarbeiten.\n";
            cin.get(); //liest ein einzelnes Zeichen ein. Verhindert das abrupte schliessen der Konsole
            return 0; //Verlassen der main-Funktion
        }
        sort(zahlen.begin(), zahlen.end()); //sortiert die Zahlen, die im vector drin sind, von Kleinstes bis Groesstes
        cout << "Kleinste Eingabe: " << zahlen[0] //liefert das erste Element (man faengt bei 0 an zu Zaehlen) zurueck
             << "\nMittlere: " << zahlen[zahlen.size()/2] //zahlen.size() liefert die Anzahl der Elemente des vectors uzurueck
             << "\nGroesste: " << zahlen[zahlen.size()-1]; //bei einem sortierten Array ist das erste Element das Kleinste, die Mitte
        cin.get();                                     //das mittelgrosse und das letzte das groesste
    }
    


  • also in while schleige habe ich if(zahl !=0) gegeben und habe summe der zahle und anzahl der zahle richtig gezählt. Vieleicht wird wegen min und max auch in meinem koft was erleuchtert

    respekt zu euch allen. Es ist echt harte arbeit programmieren zu lernen



  • ist der code für max und avg berechnung richtig?ausgabe wird gewünschte geliefert, aber ob man trotzdem anderes schreiben sollte?

    könnt ihr einen Tipp wegen min geben?

    #include<iostream>
    using namespace std;
    
    int main(){
    
    	int max = 0, zahl = 1 , anzahl = 0, sum = 0;
    	double avg;
    
    	while(zahl != 0){
    
    		cin >> zahl;
    
    		if(zahl !=0){
    			++anzahl;
    			sum +=zahl;
    
    			if(zahl > max){
    				max = zahl;
    			} 	
    
    		}
    
    	}
    
    	avg = sum/anzahl;
    
    	cout << " mittelwert ist " << avg <<"\n " <<"maximum ist " << max <<"\n " ;
    	return 0;
    
    }
    


  • Mach doch einfach analog zu der einen if-Abfrage eine andere, die dasselbe für min macht. Also statt max min und statt > <.
    Und ich geh mal davon aus, dass du das hier einfach ignoriert hast

    Incocnito schrieb:

    Mist. Hab mir kurz seine Frage durchgelesen und schon was mit vector vorbereitet. Jetzt merk ich, dass er das aber wohl doch nicht brauchen wird. Aber ich hab da jetzt so viel getippt, ich poste das trotzdem mal. Vielleicht verbessert das ja sein Verständnis ein wenig..

    #include <iostream> //cout, cin
    #include <vector> //vector
    #include <algorithm> //sort
    
    int main()
    { //naechte Zeile: vgl http://www.willemer.de/informatik/cpp/cppnames.htm
        using namespace std; //vector, cout, cin und sort liegen im namensraum std, diesen Namensraum machen wir hier bekannt
        vector<int> zahlen; //vector repraesentiert ein dynamisches Array, in diesem Fall von ganzen Zahlen (int)
        cout << "Gebe beliebig viele Zahlen ein (mit 0 wird die Eingabe beendet):\n";
        for(int zahl; ; zahlen.push_back(zahl)) //for-schleife: for(Initialisierung; Test (hier leer, da innerhalb der Schleife
        {                               //getestet wird); Aktion (hier das Hinzufuegen einer weiteren Zahl zum vector)
            cin >> zahl;
            if(!cin.good() || zahl == 0) //cin.good() ist false, wenn cin im Fehlerstatus ist (zb. durch die Eingabe von etwas,
                break;                //das nicht zum Datentyp passt, der erwartet wurde, also Buchstabe/sonst was statt Zahl)
        } //das break bricht die Schleifenausfuehrung ab
        if(zahlen.empty()) // http://www.cplusplus.com/reference/stl/vector/empty/
        {
            cout << "Keine Zahlen zu verarbeiten.\n";
            cin.get(); //liest ein einzelnes Zeichen ein. Verhindert das abrupte schliessen der Konsole
            return 0; //Verlassen der main-Funktion
        }
        sort(zahlen.begin(), zahlen.end()); //sortiert die Zahlen, die im vector drin sind, von Kleinstes bis Groesstes
        cout << "Kleinste Eingabe: " << zahlen[0] //liefert das erste Element (man faengt bei 0 an zu Zaehlen) zurueck
             << "\nMittlere: " << zahlen[zahlen.size()/2] //zahlen.size() liefert die Anzahl der Elemente des vectors uzurueck
             << "\nGroesste: " << zahlen[zahlen.size()-1]; //bei einem sortierten Array ist das erste Element das Kleinste, die Mitte
        cin.get();                                     //das mittelgrosse und das letzte das groesste
    }
    


  • so wie du gesagt hast, habe ich schon gemacht, aber liefert min als 0

    ja das war echt nett mit dem tipp aber ich muss ohne vectoren und arrays machen



  • Ah okay.

    Zu min: Logisch, wenn du min mit 0 initialisierst und dann keine Zahl kleiner als 0 eingibst, bleibt min halt 0. Du musst min mit einem möglichst großen Wert initialisieren, am besten mit dem großtmöglichen. Wie das geht einfach mal googlen, ist nicht schwer und wurde hier auch schon erwähnt.



  • Icognito, findest du es nicht ziemlich ineffizient, das gesamte Array zu sortieren wenn nur zwei Werte relevant sind!?



  • danke , danke, danke
    es hat geklappt
    mit min = 2147483647;



  • Sone schrieb:

    Incocnito, findest du es nicht ziemlich ineffizient, das gesamte Array zu sortieren wenn nur zwei Werte relevant sind!?
    Außerdem wird bei dir in Z. 24 so gut wie nie der Durchschnitt geliefert (nur bei Sonderfällen wie 1, 2, 3 usw.).

    Erstmal bin ich am Anfang davon ausgegangen, dass min, max und mid herausgefunden werden sollen, also der kleinste, der groesste und der Wert, der halt ungefähr genau so viele Größere wie Kleinere Werte aus der Eingabe hat (geht bei geraden Eingaben natürlich schlecht).

    Und um Effizienz brauchen wir uns bei den paar Werten, die da eingeben werden auch keine Sorge machen; selbst bei 10.000 Eingaben bräuchte sort auch auf richtig lahmen PC's nur nen Bruchteil einer Sekunde (außerdem fällt mir auf die Schnelle auch nichts ein, wie man sonst den mittleren Wert herausfinden könnte..).



  • Ja, ich hab zu spät gemerkt dass du ja gar nicht den Durschnitt wolltest *facepalm * 🙂 😃


Anmelden zum Antworten