Dynamische Arrays?



  • Hallo, ich bin leider noch Anfänger und habe eine Aufgabe gestellt bekommen, bei der man ein dynamisches Array benutzen soll. Und zwar soll man Zahlen eingeben können (soviele man will), und aus diesen wird dann der Durchschnitt berechnet.
    Die Funktion für die Durchschnittsberechnung habe ich schon als Schleife erstellt, aber die Eingabe der beliebig vielen Zahlen stellt mich vor Probleme. Kann mir jemand helfen??? Vielen Dank schonmal!!!

    Nils



  • Zeig doch erstmal was du schon hast...



  • Wird vorher gefragt wieviele Zeichen eingegeben werden sollen?
    Wenn nein, was ist dann die Abbruchbedingung?



  • Hallo

    std::vector könnte was für dich sein. Du kannst vom Benutzer bafragen, wieviele Zahlen er eingeben will und dann dein array so gross machen, wie es der Benutzer will.

    chrische



  • Hi, hier mal mein bisheriger Quellcode:

    Konkret geht es um die Temperaturen der letzten Woche (erster Aufgabenteil).
    Dann werden Höchst-, Niedrigst- und Durchschnitt berechnet...

    Als nächstes soll es jetzt mit einem dynamischen Array so geändert werden, dass man beliebig viele Tage eingeben kann, danach soll der dyn. Speicherplatz wieder freigegeben werden. Mehr steht nicht in der Aufgabe (Abbruchzeichen etc. freigestellt)...

    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #include <string>
    
    using namespace std;
    
    int main(void)
    {
    
    //Variablen
    
    	double temp[7];
    	double gesamt=0;
    	double mean;
    	double hoechst;
    	double mindest;
    	double sem;
    	double e;
    	double sdq;
    	int zaehler=0;
    	int tag;
    
    //Temperatureingabe
    
    	for (tag=1; tag<=7; tag++)
    		{
    			cout << "Temperatur Tag " << tag << " eingeben: ";
    			cin >> temp[zaehler];
    			zaehler++;
    		}
    
    //Höchsttemperatur
    
    	hoechst=temp[0];
    	for (zaehler=1; zaehler<=6; zaehler++)
    	{
    		if (temp[zaehler]>hoechst)
    		{
    			hoechst=temp[zaehler];
    		}
    	}
    
    //Mindesttemperatur
    
    	mindest=temp[0];
    	for (zaehler=1; zaehler<=6; zaehler++)
    	{
    		if (temp[zaehler]<mindest)
    		{
    			mindest=temp[zaehler];
    		}
    	}
    
    //Mittelwert	
    
    	for (zaehler=0; zaehler<=6; zaehler++)
    		{	
    			gesamt+=temp[zaehler];
    		}
    
    	mean=gesamt/(zaehler);
    
    //Standardabweichung
    
    	sdq=0;
    	for (zaehler=0; zaehler<=6; zaehler++)
    		{	
    			e=pow((temp[zaehler]-mean), 2.0);
    			sdq+=e;
    		}
    	sdq/=(zaehler-1);
    	sem=sqrt(sdq);
    
    //Ergebnisausgabe
    
    	cout.precision(2);
    	cout.fill('.');
    	cout << fixed << left;
    	cout << "\n";
    	cout.width(30);
    	cout << "Hoechsttemperatur:";
    	cout << right;
    	cout.width(15);
    	cout << hoechst << endl;
    	cout << left;
    	cout << "\n";
    	cout.width(30);
    	cout << "Mindesttemperatur:";
    	cout << right;
    	cout.width(15);
    	cout<< mindest << endl;
    	cout << left;
    	cout << "\n";
    	cout.width(30);
    	cout << "Durchschnittstemperatur:";
    	cout << right;
    	cout.width(15);
    	cout << mean << endl << endl;
    	cout << left;
    	cout.width(30);
    	cout << "Durchschn. Abw. v. Mittelw.:";
    	cout << right;
    	cout.width(15);
    	cout << sem << endl << endl;
    
    fflush(stdin);
    return 0;
    }
    

    <edit>Bitte Code-Tags verwenden!</edit>



  • Nachtrag

    Ich hatte mir das ursprünglich so gedacht, dass man in einer schleife jeweils gefragt wird: "Temperatur für einen weiteren Tag eingeben (100=Abbruch): " oder so...



  • Du könntest statt des Arrays einen Vektor nehmen und jeweils mit push_back() neue Werte anhängen. Oder du fragst vorher die Anzahl ab, dann kannst du mit new[] genügend Platz bereitstellen.

    (PS: Übrigens kannst du Minimum, Maximum und Summe auch in einer Schleife berechnen ;))



  • Hilft dir dieser Entwurf vllt. weiter?

    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    int main(int argc, char **argv) {
      vector<float> temp;
    
      int i=0;
      while (cin>>i) {
        temp.push_back(i);
        //while(getchar()!='\0');  brauchst du vllt.
      }
    
      sort(temp.begin(), temp.end());
    
      cout<<"Niedrigste Temperatur: "<<temp[0]<<'\n';
      cout<<"Hoechste Temperatur: "<<temp[temp.size()-1]<<'\n';
    
      float sum=0;
      for (vector<float>::iterator it = temp.begin(); it != temp.end(); ++it)
        sum += *it;
    
      sum /= temp.size();
    
      cout<<"Durchschnitt: "<<sum<<'\n';
      return EXIT_SUCCESS;
    };
    


  • Nach deinem Code und WIssenstands vermute ich mal dass du nicht extra in die STL einlernen musst, oder was ähnliches selber implementieren musst.

    Also: Schau mal hier, da wird es erklärt -> http://tutorial.schornboeck.net/dyn_speicher.htm Das heisst du fragst den Benutzer einmal wieviele Werte er eingeben möchte, legst dein Array an, und frägst die Werte ab.

    Gruß



  • eigentlich hatte ich dies gerade schoneinmal geschrieben, aber da es bei mir nicht im Forum erscheint, schreib ich es halt nochmal, ist dann schlimmstenfalls doppelt da....

    Der Link von FireFlow weist direkt auf eine Seite, die genau das beschreibt, was wir gerade im Kurs begonnen haben. Daher denke ich, es wird so gemeint sein, dass vom Benutzer die Menge der gewünschten Tage vorher abgefragt wird. Die Aufgabe ist auch nicht ganz deutlich formuliert...

    Ich werd es jetzt einmal so probieren, wenn es nicht so ist, melde ich mich nochmal hier 😉

    VIELEN DANK nochmal an euch alle für die super-schnellen Antworten & Hilfe!!!

    Nils


Anmelden zum Antworten