Wieder mal Referenzen
-
hallo!
Folgendes Programm soll Minimum, Maximum und Mittelwert aus 10 Eingaben berechnen. Wir sollen 3 Funktionen (Eingabe, Berechnung, Ausgabe) verwenden.
Und für die Eingabe ein Array. Zum schluss bei der Ausgabe sollen alle werte noch mal ausgegeben werden.Es funktioniert alles, bis auf dass der letzte wert irgend eine hohe zahl ist.
UND: Der Mittelwert wird ohne kommastellen angezeigt.#include <iostream> #include <conio> using namespace std; //--------------------------------------------------------------------------- int eingabe(int iI[9]) { cout << "Geben Sie 10 Zahlen ein" << endl << endl; for (int i=0;i<10;i++) { cout << "Geben Sie Zahl " << i + 1 << " ein: "; cin >> iI[i]; } cout << endl; } int berechnung(int &min, int &max, int iI[9], float &mittel) { int sum,anz; sum = 0; anz = 0; min = iI[0]; max = iI[0]; for (int i=0;i<10;i++) { anz++; if (iI[i] < min) min = iI[i]; if (iI[i] > max) max = iI[i]; sum = sum + iI[i]; } mittel = sum/anz; } int ausgabe(int iMin, int iMax, float fMittel, int iI[9]) { cout << "Die kleinste Zahl ist: " << iMin << endl; cout << "Die groesste Zahl ist: " << iMax << endl; cout << "Der Mittelwert ist: " << fMittel << endl << endl; for (int i=0;i<10;i++) { cout << "Eingabe " << i+1 << " : " << iI[i] << endl; } } //--------------------------------------------------------------------------- int main() { int iEingabe[9], min, max; float mittel; eingabe(iEingabe); berechnung(min, max, iEingabe, mittel); ausgabe(min, max, mittel, iEingabe); getch(); return 0; } //---------------------------------------------------------------------------bitte um hilfe
danke
-
Dein Array iI ist zu klein. Du möchtest 10 Zahlen speichern, hast aber nur 9 Felder angegeben. Richtig wäre "int iEingabe[10]"
Die Kommastellen fehlen, weil du sum/anz als Division ganzer Zahlen rechnest, und erst danach in float konvertiest. Richtig wäre "mittel = (float)sum / anz;"
*edit*
Du brauchst anz gar nicht zu berechnen, weil es ohnehin in jedem Fall 10 ist
-
also, normalerweise startet ein ARRAY bei 0..
d.h. iI[9] ist ein Array von 0 bis 9, und das sind 10 zahlenjetzt funktioniert es aber?!?
muss ich alle arrays als 10 nehmen? oder nur das letzte?vielen dank
-
typ variable[feldzahl];Bei der Deklaration steht in den eckigen Klammern die Anzahl der Felder und das ist eine Anzahl, da beginnt nichts bei 0, also musst du in deinem Fall überall 10 verwenden. Erst wenn du auf Elemente der Variable zugreifst, musst du bei 0 anfangen zu zählen. So hat also ein Array mit 10 Feldern (typ x[10]) die Felder 0 bis 9 (x[0] ... x[9]).
-
Bei der Parameterübergabe solltest du besser noch die Anzahl als Parameter angeben, z.B. (..., int anzahl).
Denn statt 'int array[10]' kann man auch einfach 'int array[]' als Parameter schreiben und ein beliebiges anderes Array übergeben. Dies wird vom Compiler nicht überprüft, denn intern ist ein Array bei der Parameterübergabe einfach ein Zeiger, d.h. 'int *array'.