Maximalen Eintrag eines Arrays finden
-
Schreiben Sie eine Funktion
double maximum(double v[],int n), der man ein Feld von n reellen Zahlen übergeben kann, und die dann den größten Wert zurückgibt.
Hey! Ich habe das so programmiert, aber es kommt noch eine Fehlermeldung (s.u.):
#include <iostream> using namespace std; double maximum(double v[],int n) { double Maximum = v[0]; for(int i=1; i<n; i++) { if(Maximum < v[i]) { Maximum=v[i]; } } return Maximum; } int main() { double feld[5]={ 1,5,3,2,8 }; double k = maximum(feld[],5); cout << "Der größte Eintrag ist " << k << "." << endl; }Als Fehlermeldung erscheint:
Maximum.cpp: In function 'int main()':
Maximum.cpp.20: error: expected primary-expression before ']' tokenWas habe ich falsch gemacht?
-
Bei der Übergabe eines Arrays kannst Du [] weglassen, also einfach nur feld statt feld[] in Zeile 20. Anders gesagt: [] ist nicht Teil des Namens.
-
Dankeschön, jetzt wird tatsächlich 8 als größter Eintrag des Arrays ausgegeben.
Das sind so die Tücken, die man als Anfänger echt nicht kennt.
-
franziska23 schrieb:
double Maximum = v[0];Wenn das Array leer ist, ist diese Zeile ein unerlaubter Zugriff auf Speicher.
-
Guckst du
std::max_element. Liefert ´nen Iterator zurück, hat also auch keine Probleme mit leeren Eingabemengen.
-
DocShoe schrieb:
Guckst du
std::max_element. Liefert ´nen Iterator zurück, hat also auch keine Probleme mit leeren Eingabemengen.Ich tippe mal, dass das nicht verwendet werden darf. Die Aufgabenstellung "Schreiben Sie..." klingt doch sehr nach Schule etc. Da soll das vermutlich manuell gemacht werden.
Dennoch sicherlich gut, das zu erwähnen.
-
DocShoe schrieb:
Guckst du
std::max_element. Liefert ´nen Iterator zurück, hat also auch keine Probleme mit leeren Eingabemengen.Wobei man aber trotzdem immer noch prüfen muss, ob das Ergebnis ein gültiger Iterator ist, bevor man fröhlich das vermeintliche Ergebnis ausgibt.
(Diesen Fehler habe ich einfach zu häufig selber gemacht.
)