Hilfe bei kleinem Programm mit Array
-
Hallo,bekomme es bei diesem Programm nicht hin die durchschnittliche Abweichung zu berechnen,es berechnet nur den Abstand des letzten Wertes zum Durchschnittswert,was mache ich falsch?
#include <iostream> using namespace std; int main() { double durchschnitt, gesamt, max, min,abweichung; double *feld = new double[7]; if (feld == NULL) { cout << "Error: kein Speicher verfuegbar!" << endl; return 1; } for(int k = 0; k !=7; k++) { cout << "Temperatur Tag " <<k+1<< ": "; cin >> feld[k]; } for(int k=0;k!=7;k++) { durchschnitt = (feld[0] + feld[1] + feld[2] + feld[3] + feld[4] + feld[5] + feld[6]) / 7; } max = feld[0]; min = feld[0]; for(int i = 0; i != 7; i++) { if(feld[i] < min) min = feld[i]; if(feld[i] > max) max = feld[i]; } for (int k=0;k!=7;++k) { if(feld[k] - durchschnitt < 0) abweichung = feld[k]+ durchschnitt; if(feld[k] - durchschnitt >= 0) abweichung = feld[k] - durchschnitt; } cout << "Abweichung: " << abweichung << endl; cout << "Durchschnittstemperatur: " << durchschnitt << endl; cout << "Maximaltemperatur: " << max << endl; cout << "Minimaltemperatur: " << min << endl; delete[] feld; fflush(stdin); getchar(); return 0; }Außerdem müsste ich wissen wie ich es bei dem Array hinbekomme dass ich die Länge nicht vorher festlege sondern diesen vom Benutzer festgelegt wird,indem ich ihn in der ersten Zeile befrage.
Mit dem Maximum und Minimum ist das ja kein Problem,aber wie bekomme ich das mit der Summe bei dem Durchschnitt hin und dementsprechend dann auch mit der Abweichung.Vielen Dank schon mal
-
Benutze std::vector anstelle des array's. Das macht vieles einfacher...
Simon
Edit:
BTW:fflush(stdin);sollst Du nicht tun...
-
Genau die gleiche Aufgabe wurde hier doch vor kurzem scho ma gemacht und ich glaub Dravere hatte auch gezeigt, wie man es mit C++ machen würde - und ich glaube, der andere Poster hatte genau die selben Fehler, wie der hier...
Weiß aber gerade nicht mehr, nach was ich suchen sollte, sonst hätt ich ma nen Link gepostet ^^bb
-
ToniKukoc schrieb:
Hallo,bekomme es bei diesem Programm nicht hin die durchschnittliche Abweichung zu berechnen,es berechnet nur den Abstand des letzten Wertes zum Durchschnittswert,was mache ich falsch?
...
Außerdem müsste ich wissen wie ich es bei dem Array hinbekomme dass ich die Länge nicht vorher festlege sondern diesen vom Benutzer festgelegt wird,indem ich ihn in der ersten Zeile befrage.
Mit dem Maximum und Minimum ist das ja kein Problem,aber wie bekomme ich das mit der Summe bei dem Durchschnitt hin und dementsprechend dann auch mit der Abweichung.#include <iostream> using namespace std; int main() { double durchschnitt = 0, max, min,abweichung; int feldanzahl; cout << "Geben Sie die Anzahl der Felder ein:" << endl ; cin >> feldanzahl; double *feld = new double[feldanzahl]; if (feld == NULL) { cout << "Error: kein Speicher verfuegbar!" << endl; return 1; } for(int k = 0; k != feldanzahl; k++) { cout << "Temperatur Tag " << k+1<< ": "; cin >> feld[k]; if (k == 0) { max = min = feld[0]; } else if (feld[k] > max) { max = feld[k] ; } else if (feld[k] < min) { min = feld[k] ; } ; durchschnitt += feld[k]; } durchschnitt /= (double)feldanzahl; //for(int k=0;k!=7;k++) //{ //durchschnitt = (feld[0] + feld[1] + feld[2] + feld[3] + feld[4] + feld[5] + feld[6]) / 7; //} /*max = feld[0]; min = feld[0]; for(int i = 0; i != 7; i++) { if(feld[i] < min) min = feld[i]; if(feld[i] > max) max = feld[i]; } */ for (int k=0;k!=feldanzahl;++k) { abweichung = durchschnitt-feld[k]; cout << "Abweichung Tag "<< k+1 << ": " << abweichung << endl ; } cout << endl << "Durchschnittstemperatur: " << durchschnitt << endl; cout << "Maximaltemperatur: " << max << endl; cout << "Minimaltemperatur: " << min << endl; delete[] feld; /* fflush(stdin); */ getchar(); return 0; }
-
Viel hübscher ist es jz auch nicht...
Und richtiger erst recht nicht (new gibt nie 0/NULL/nullptr zurück)...
naja - offensichtlich hat auch niemand anders ahnung, welcher thread das war, den ich meinte... oder ihr seid alle faul! ;o)
bb
-
unskilled schrieb:
Und richtiger erst recht nicht (new gibt nie 0/NULL/nullptr zurück)...
nie? nothrow...
simon
-
theta schrieb:
unskilled schrieb:
Und richtiger erst recht nicht (new gibt nie 0/NULL/nullptr zurück)...
nie? nothrow...
simonsiehst du irgendwo ein nothrow in dem code-bsp? ich nich...
-
wie verhaelt sich denn dein compiler, wenn Du die exceptions abgeschalten hasst ?
ne exception wirst da nie bekommen ^^was sagt denn der C++ Standard, muss new ne exception werfen wenn es den speicher ned kriegen kann ???
zumindest bei mir hier beim MS compiler laeuft der mit abgeschaltenen exceptions durch und steigt ned mit nem Terminate aus ....
die einzige chance ist eigentlich den rueckgabewert zu checken, und da iss definiert das der NULL sein muss, wenn das new ned erfolgreich war !Ciao ...
-
Der Standard sagt eben, dass new ein fertig konstruiertes Objekt zurückgibt oder eine Exception wirft...
Wenn man dieses Verhalten nicht möchte, dann muss man nothrow verwenden - allerdings kann dieses new imho dann trotzdem noch nen bad_alloc werfen - wenn im CTor des Objekts ein new fehlschlägt...bb
-
Danke für die Antworten
aberWollte eigentlich nur wissen wie ich das hier
for(int k=0;k!=7;k++) { durchschnitt = (feld[0] + feld[1] + feld[2] + feld[3] + feld[4] + feld[5] + feld[6]) / 7; }und das was ich noch neu als Abweichung geschrieben habe:
f(feld[0] - durchschnitt < 0) abweichung0 = feld[0]+ durchschnitt; if(feld[0] - durchschnitt >= 0) abweichung0 = feld[0] - durchschnitt; if(feld[1] - durchschnitt < 0) abweichung1 = feld[1]+ durchschnitt; if(feld[1] - durchschnitt >= 0) abweichung1 = feld[1] - durchschnitt; if(feld[2] - durchschnitt < 0) abweichung2 = feld[2]+ durchschnitt; if(feld[2] - durchschnitt >= 0) abweichung2 = feld[2] - durchschnitt; if(feld[3] - durchschnitt < 0) abweichung3 = feld[3]+ durchschnitt; if(feld[3] - durchschnitt >= 0) abweichung3 = feld[3] - durchschnitt; if(feld[4] - durchschnitt < 0) abweichung4 = feld[4]+ durchschnitt; if(feld[4] - durchschnitt >= 0) abweichung4 = feld[4] - durchschnitt; if(feld[5] - durchschnitt < 0) abweichung5 = feld[5]+ durchschnitt; if(feld[5] - durchschnitt >= 0) abweichung5 = feld[5] - durchschnitt; if(feld[6] - durchschnitt < 0) abweichung6 = feld[6]+ durchschnitt; if(feld[6] - durchschnitt >= 0) abweichung6 = feld[6] - durchschnitt; abweichung = abweichung0+abweichung1+abweichung2+abweichung3+abweichung4+abweichung5+abweichung6; durchabweichung=abweichung/7;so hinbekomme dass ich nicht die 7 vorher festgelegt habe,sondern der Benutzer es bestimmt.Das soll mit einem Array geschehen,nicht mit Vektoren.
-
ToniKukoc schrieb:
Danke für die Antworten
aberWollte eigentlich nur wissen wie ich das hier
for(int k=0;k!=7;k++) { durchschnitt = (feld[0] + feld[1] + feld[2] + feld[3] + feld[4] + feld[5] + feld[6]) / 7; }Aehhh ... Was tuts Du da eigentlich? Du berechnest siebenmal die Variable durchschnitt - Der Loop-Zaehler k wird kein einziges Mal verwendet.
Ich vermute mal, Du meinst soetwas:
for(int k=0;k!=7;k++) durchschnitt += feld[k]; durchschnitt /= 7;ToniKukoc schrieb:
und das was ich noch neu als Abweichung geschrieben habe:
f(feld[0] - durchschnitt < 0) abweichung0 = feld[0]+ durchschnitt; if(feld[0] - durchschnitt >= 0) abweichung0 = feld[0] - durchschnitt; // etc.Auch hier - wohl eher soetwas
for(int k=0;k!=7;k++) abweichung = fabs (feld[0] - durchschnitt); abweichung /= 7;ToniKukoc schrieb:
so hinbekomme dass ich nicht die 7 vorher festgelegt habe,sondern der Benutzer es bestimmt.
Niemand hindert Dich die "7" durch eine Variable zu ersetzen und diese einzulesen.
-
RHBaum schrieb:
zumindest bei mir hier beim MS compiler laeuft der mit abgeschaltenen exceptions durch und steigt ned mit nem Terminate aus ....
die einzige chance ist eigentlich den rueckgabewert zu checken, und da iss definiert das der NULL sein muss, wenn das new ned erfolgreich war !Wieso sollte das definiert sein, nur weil du im Compiler die Exceptions deaktiviert hast? Laut C++-Standard gibt
newnur einen Nullzeiger zurück, wenn die überladene Version mitstd::nothrowaufgerufen wird. Andernfalls wird wie gesagt eine Exception vom Typstd::bad_allocgeworfen. Welches undefinierte Verhalten bei abgeschalteten Exceptions auftritt, kann ich dir jedoch auch nicht sagen.
-
Nexus schrieb:
Welches undefinierte Verhalten bei abgeschalteten Exceptions auftritt, kann ich dir jedoch auch nicht sagen.
