Array, Speicherverwaltung, Zeiger und kein Durchblick mehr...
-
@kleine...
ich finde schon du solltest dir den code von caipi zu gemüte führen (ich weiß: schleimer), andernfalls ändere mal deinen rückgabetyp deiner funktionen (wozu 'integer' wenn sie nichts zurückgeben?)...
-
Genau das tue ich gerade... Ich führe mir den Code von Caipi zu Gemühte... und zwischendurch schaue ich, was es an neuen Beiträgen und Hilfestellungen gibt...
Bin aber noch nicht wirklich viel weiter, aber sobald es einen neuen Code von mir gibt, werde ich ihn eurer Kritik und Hilfe aussetzten
Dank Euch!!
-
Hallo an alle
erstmal nur der Ausführlichkeit halber und zum besseren Verständnis, den Code, wie er bisher aussieht und wie weit ich bis heute gekommen bin, danach meine Frage:
#include <iostream> #include <cstring> int fberechnung_groesste(int *tmp, int sizeofArrZahlen) { int max = tmp[0]; for (int i = 1; i < sizeofArrZahlen; i++) { if (tmp[i] > max) { max = tmp[i]; } } return max; } int fberechnung_kleinste(int *tmp, int sizeofArrZahlen) { int min = tmp[0]; for (int i = 1; i < sizeofArrZahlen; i++) { if (tmp[i] < min) { min = tmp[i]; } } return min; } int fberechnung_summe(int *zahlen, int sizeofArrZahlen) { int sum = 0; for (int i = 0; zahlen[i] > 0; i++) { sum = sum + zahlen[i]; } return sum; } void ftausche(int &zahl1, int &zahl2) { int backup = zahl1; zahl1 = zahl2; zahl2 = backup; } int main() { int tmp, mittelw; std::cout << "\nAnzahl der einzugebenden Zahlen: "; int sizeofArrZahlen; std::cin >> sizeofArrZahlen; int *zahlen = new int[sizeofArrZahlen]; for (int i = 0; i < sizeofArrZahlen; ++i) { std::cout << "\nBitte Wert fuer " << i+1 << ". Zahl eingeben: "; std::cin >> tmp; zahlen[i] = tmp; } int gr = fberechnung_groesste(zahlen, sizeofArrZahlen); int kl = fberechnung_kleinste(zahlen, sizeofArrZahlen); int sum = fberechnung_summe(zahlen, sizeofArrZahlen); mittelw = sum / sizeofArrZahlen; std::cout << "\nDie Summe aller Zahlen ist : " << sum; std::cout << "\nDer Mittelwert aller Zahlen ist : " << mittelw; std::cout << "\nDie Groesste Zahl ist : " << gr; std::cout << "\nDie Kleinste Zahl ist : " << kl; std::cout << "\n\n"; std::cout << "\nDie Ergebnisse in sortierter Reihenfolge (groesster Wert zuerst): "; std::cout << "\n\n"; int arrsort[5] = {sum, mittelw, gr, kl}; int max = sizeof(arrsort) / sizeof(int); bool sorted = true; int k; do { sorted = true; for (k = 0; k < max-1; k++) { if (arrsort[k] < arrsort[k+1]) { ftausche(arrsort[k], arrsort[k+1]); sorted = false; } } } while (!sorted); for (k=0; k < max-1; k++) { std::cout << k+1 << ". Wert: " << arrsort[k] << std::endl; } getchar(); delete[] zahlen; return 0; }
Der Mittelwert muß mit 2 Nachkommastellen ausgegeben werden!! Ich weiß nich, ob ich zu blöd bin, ich hab keine Ahnung wie...
Kann mir jemand helfen?????? Bitte, bitte....
Schonmal Danke an alle, die vielleicht Zeit und Lust haben zu helfen...
Eure kleine kylie
-
@all schrieb:
Der Mittelwert muß mit 2 Nachkommastellen ausgegeben werden!! Ich weiß nich, ob ich zu blöd bin, ich hab keine Ahnung wie...
Kann mir jemand helfen?????? Bitte, bitte....
Schonmal Danke an alle, die vielleicht Zeit und Lust haben zu helfen...
Eure kleine kylieUm dies zu bewerkstelligen solltest du statt:
int mittelw;
lieber
double mittelw; // oder float
schreiben
//edit: Habe den Code jetzt kurz überflogen.
Warum liest du die einzelnen Zahlen zuerst in tmp ein? Du kannst doch auch direkt folgendes schreiben:cin >> zahlen[i];
Dein Array 'arrsort' braucht nur Speicher für 4 Elemente zu reservieren. (Und demnach in der letzten for-Schleife auch nicht '< max - 1' sondern einfach nur '< max');
Ansonsten siehts doch schon viel besser aus.
Caipi
-
hm... also in der ausgabe der ergebnisse bekomme ich den mittelwert jetzt nach dem ich es so:
int main() { int tmp; double mittelw; std::cout << "\nAnzahl der einzugebenden Zahlen: "; int sizeofArrZahlen; std::cin >> sizeofArrZahlen; int *zahlen = new int[sizeofArrZahlen]; for (int i = 0; i < sizeofArrZahlen; ++i) { std::cout << "\nBitte Wert fuer " << i+1 << ". Zahl eingeben: "; std::cin >> tmp; zahlen[i] = tmp; } int gr = fberechnung_groesste(zahlen, sizeofArrZahlen); int kl = fberechnung_kleinste(zahlen, sizeofArrZahlen); int sum = fberechnung_summe(zahlen, sizeofArrZahlen); mittelw = sum / (double)sizeofArrZahlen;
abgeändert habe mit nachkommastellen ausgegeben. aber weiter unten werden die ergebnisse im code (siehe oben gesamtcode) ja noch sortiert. und da bekomme ich den wert dann in der ausgabe wieder nur ohne nachkommastellen...
wieso?
danke die kleine kylie
-
Das liegt daran, dass dein Array 'arrsort' vom Typ int ist. Folglich kann es auch nur Elemente vom Typ int beinhalten. (Andere Datentypen werden - sofern möglich - nach int konvertiert).
Caipi
-
und was kann ich da tun? gibt es da 'ne möglichkeit??
-
Genau wie du es bei mittelw gemacht hast. Z.B. statt dem int-Array ein double-Array nehmen.
Selber nachdenken.
Caipi
-
hast ja recht...
trotzdem danke....
so... nu hab ich die nachkommastellen...
void ftausche(double &zahl1, double &zahl2) { double backup = zahl1; zahl1 = zahl2; zahl2 = backup; } int main() { int tmp; double mittelw; std::cout << "\nAnzahl der einzugebenden Zahlen: "; int sizeofArrZahlen; std::cin >> sizeofArrZahlen; int *zahlen = new int[sizeofArrZahlen]; for (int i = 0; i < sizeofArrZahlen; ++i) { std::cout << "\nBitte Wert fuer " << i+1 << ". Zahl eingeben: "; std::cin >> tmp; zahlen[i] = tmp; } int gr = fberechnung_groesste(zahlen, sizeofArrZahlen); int kl = fberechnung_kleinste(zahlen, sizeofArrZahlen); int sum = fberechnung_summe(zahlen, sizeofArrZahlen); mittelw = sum / (double)sizeofArrZahlen; std::cout << "\nDie Summe aller Zahlen ist : " << sum; double summe = sum; std::cout << "\nDer Mittelwert aller Zahlen ist : " << mittelw; std::cout << "\nDie Groesste Zahl ist : " << gr; double groesste = gr; std::cout << "\nDie Kleinste Zahl ist : " << kl; double kleinste = kl; std::cout << "\n\n"; std::cout << "\nDie Ergebnisse in sortierter Reihenfolge (groesster Wert zuerst): "; std::cout << "\n\n"; double arrsort[5] = {summe, mittelw, groesste, kleinste}; double max = sizeof(arrsort) / sizeof(double); bool sorted = true; int k;
aber trotz viel nachdenken UND auch probieren... ich hätte gerne nur 2 nachkommastellen... hab auch in meinen büchern nix gefunden...
-
kleine kylie schrieb:
aber trotz viel nachdenken UND auch probieren... ich hätte gerne nur 2 nachkommastellen... hab auch in meinen büchern nix gefunden...
Schau dich mal in <iomanip> um
-
kleine kylie schrieb:
..
Auszug aus der Aufgabenstellung:
...
Um die Daten zwischenzuspeichern, speichern Sie die eingegebenen Daten in einer globalen Array-Variable.ist das bedingung? es geht auch ohne array oder dergleichen.
-
net schrieb:
kleine kylie schrieb:
..
Auszug aus der Aufgabenstellung:
...
Um die Daten zwischenzuspeichern, speichern Sie die eingegebenen Daten in einer globalen Array-Variable.ist das bedingung? es geht auch ohne array oder dergleichen.
jepp... is bedingung...
lg
kleine kylie
-
finix schrieb:
kleine kylie schrieb:
aber trotz viel nachdenken UND auch probieren... ich hätte gerne nur 2 nachkommastellen... hab auch in meinen büchern nix gefunden...
Schau dich mal in <iomanip> um
hm... hab ich zwar in meinem buch was gefunden, aber gaaanz weit hinten... so weit bin ich noch gar nicht
, um genau zu sein, noch lange nicht, und habe da auch nur die hälfte verstanden....
anders geht es nicht?? die idee mit nur 2 stellen kam von mir, war nicht bedingung vom lehrer. kann also sein, dass er es nicht vorraussetzt, weil ich es vielleicht noch nich können kann, weil wir noch nicht so weit sind...
aber wenn es nene anderen weg gibt, würde ich den gerne probieren... kommt bestimmt gut
-
Nichts dramatisches: setprecision sollte dir weiter helfen...
-
hi!
@enno-tyrant: hast du vielleicht noch ein quicksort zur verfügung?;-)
welche sortieralgorithmen sind so in der STL implementiert??
cu