Mit negativen Zahlen rechnen
-
Hallo an Alle
das Programm um das es geht, sieht folgendermaßen aus:
#include <iostream> #include <cstring> #include <cstdio> int fberechnung_groesste(int *tmp, int sizeofArrZahlen); int fberechnung_kleinste(int *tmp, int sizeofArrZahlen); int fberechnung_summe(int *zahlen, int sizeofArrZahlen); //=============================================================================================== // MAIN // // Das Programm liest eine gewünschte Menge Zahlen ein und gibt sie in sortierter // Reihenfolgen (groesste Zahl zuerst) wieder aus. // // Anschließend werden folgende Werte ermittelt und ausgegeben: // // - die grosste Zahl // - die kleinste Zahl // - die Summe aller Zahlen // und - den Mittelwert aller Zahlen //=============================================================================================== int main() { std::cout << "\nBitte die Anzahl der gewuenschten Zahlen eingeben: "; int sizeofArrZahlen; std::cin >> sizeofArrZahlen; int *zahlen = new int[sizeofArrZahlen]; int tmp; for (int i=0; i<sizeofArrZahlen; ++i) { std::cout << "\n\tBitte die " << i+1 << ". Zahl eingeben: "; std::cin >> tmp; zahlen[i] = tmp; } std::cout << "\n\n-------------------------------------------------------------------------"; bool sorted = true; int max = sizeof(zahlen) / sizeof(zahlen[0]); do { sorted = true; for (i=0; i<sizeofArrZahlen; i++) { if (zahlen[i] < zahlen[i+1]) { tmp = zahlen[i]; zahlen[i] = zahlen[i+1]; zahlen[i+1] = tmp; sorted = false; } } } while (!sorted); std::cout << "\nDie eingegebenen Werte in sortierter Reihenfolge" << "\n(groesster Wert zuerst): " << "\n\n"; for(i=0; i<sizeofArrZahlen; i++) { std::cout << i+1 << ". Wert: " << zahlen[i] << std::endl; } int gr = fberechnung_groesste(zahlen, sizeofArrZahlen); int kl = fberechnung_kleinste(zahlen, sizeofArrZahlen); int sum = fberechnung_summe(zahlen, sizeofArrZahlen); double mittelw; mittelw = (double)sum / (double)sizeofArrZahlen; std::cout << "\n\n-------------------------------------------------------------------------"; 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"; getchar(); delete[] zahlen; return 0; } //=============================================================================================== //=============================================================================================== // FUNKTION 1 // // Ermitteln der groessten Zahl //=============================================================================================== 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; } //=============================================================================================== //=============================================================================================== // FUNKTION 2 // // Ermitteln der kleinsten Zahl //=============================================================================================== 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; } //=============================================================================================== //=============================================================================================== // FUNKTION 3 // // Ermitteln der Summe //=============================================================================================== int fberechnung_summe(int *zahlen, int sizeofArrZahlen) { int sum = 0; for (int i=0; zahlen[i]>0; i++) { sum = sum + zahlen[i]; } return sum; } //===============================================================================================
Das Problem liegt nun darin, dass ich es einfach nicht hinbekomme, dass es mir ein ordentliches Ergebnis ausspuckt, sobald eine der oben eingegebenen Zahlen negativ ist!!
Die Sortierung ist immer richtig, und bei positiven Zahlen auch alle Berechnungen. Aber ich scheiter, sobald es sich um negative Zahlen handelt...
Kann mir bitte einer helfen.....
-
Dein erster Fehler liegt in deiner Sortierroutine:
do { sorted = true; for (i=0; i<sizeofArrZahlen - 1; i++) // Es muss sizeofArrZahlen - 1 heißen. Ansonsten ließt du nämlich über die Grenzen des Arrays hinaus. { if (zahlen[i] < zahlen[i+1]) { tmp = zahlen[i]; zahlen[i] = zahlen[i+1]; zahlen[i+1] = tmp; sorted = false; } } } while (!sorted);
//Edit: Und just by the way: Diese Sortierroutine prüft teilweise bereits gep rüfte Werte.
Zweiter Fehler ist in der Funktion fberechnung_summe():
int fberechnung_summe(int *zahlen, int sizeofArrZahlen) { int sum = 0; for (int i=0; i < sizeofArrZahlen; i++) // Warum denn zahlen[i] > 0?; => (Habe ich schon eingefügt) { sum = sum + zahlen[i]; } return sum; }
Caipi
-
Also Caipi... ich muß dir echt 1000 Dank aussprechen!!!!
Klappt super und auch alles andere, was du mir bisher als Hilfeststellungen geschrieben hast, bin ich klasse mit zurecht gekommen!!!!!
DANKE
die kleine kylie
Und eben habe ich die positive Nachricht bekommen, dass die Aufgabe vom Lehrer als richtig anerkannt wurde!! Wurde auch Zeit, da Morgen Abgabeschluß ist
Jetzt kann ich weiter machen... Auf zur nächsten Herausforderung und der nächsten Lektion... Bin schon gespannt, was kommt... Wir hören sicher wieder voneinander
Denn hier im Forum ist man echt super aufgehoben so als Neuling... Vielen Dank nochmal!!!