max Wert aus einem Array auslesen
-
Hallo Zusammen, ich möchte aus einem Array den max. Wert ausgeben. Leider spuckt mein Code mir immer nur den letzten Wert aus. Kann mir jemand sagen, wo mein Fehler liegt?
Danke im Vorraus#include <iostream>
#include <cmath>
using namespace std;//Funktion für Array max
int max(int x[], int n)
{int max = x[0];
for (int i= 1; i< 9; i++)
{
if(x[i] > max)
{
max =x[i];
}
}}
int main(){
int v[] = {12, 123, 51, 72, 4, 8, 19, 44, 105};
cout << "Das maximale Feldelement ist " << max(v,9) << endl;
}
-
Dein Funktion hat kein return
-
-
super danke für die schnelle Hilfe, Funktioniert.
-
Es gibt die Funktion
max_element
in der STL, die genau das macht, was du möchtest.
-
@steven-w sagte in max Wert aus einem Array auslesen:
Hallo Zusammen, ich möchte aus einem Array den max. Wert ausgeben. Leider spuckt mein Code mir immer nur den letzten Wert aus. Kann mir jemand sagen, wo mein Fehler liegt?
Lösung wurde ja bereits gegeben. ABER: Dein Code ist im Wesentlichen C und nicht C++ (bis auf die #includes und das cout).
In C++ sähe das eher so aus:
#include <iostream> #include <algorithm> int main() { int v[] = {12, 123, 51, 72, 4, 8, 19, 44, 105}; auto max = *std::max_element(std::begin(v), std::end(v)); std::cout << "Das maximale Feldelement ist " << max << '\n'; }
Also: normalerweise musst du das nicht selbst neu schreiben.
Eine andere Frage noch: was soll passieren, wenn das Array leer ist? Aktuell kann weder dein noch mein Programm damit umgehen.
-
@steven-w Schreibe bitte in eine Zeile vor Deinem Code
```
und in eine Zeile nach Deinem Code```
. Alternativ markiere Deinen Code und klicke auf das</>
in der Symbolleiste über dem Eingabefeld.
Du kannst Deine Beiträge auch im Nachhinein bearbeiten. Den Menüpunkt "Bearbeiten" findest Du in dem Drei-Punkte-Menü rechts unter Deinen Beiträgen.
Danke.
-
-
@wob sagte in max Wert aus einem Array auslesen:
Eine andere Frage noch: was soll passieren, wenn das Array leer ist?
Ein leeres Array (
int v[] = {};
) ist in C++ nicht erlaubt.
-
@manni66 sagte in max Wert aus einem Array auslesen:
@wob sagte in max Wert aus einem Array auslesen:
Eine andere Frage noch: was soll passieren, wenn das Array leer ist?
Ein leeres Array (
int v[] = {};
) ist in C++ nicht erlaubt.Gut, stimmt, aber häufig wäre die Eingabe auch ein
std::vector
oder einstd::array
- und in beiden Fällen wäre die Größe 0 dann möglich und man müsste sich überlegen, was dann passieren soll. Hier im Beispiel könnte man auch einfachputs("123 ist das Ergebnis");
schreiben. Ich nehme an, dass hier die Aufgabe mit der Idee gestellt wurde, dass man das bzw die Zahlen für das Array und die Länge irgendwann mal frei eingeben können soll (vielleicht mit einer Folgeaufgabe) - und dann wird eben doch relevant, obn == 0
sein darf. => Lieber schon gleich daran denken!
-
Aber das hast du doch mit
std::max_element
schon erschlagen, du musst halt den Rückgabewert überprüfen#include <vector> #include <algorithm> int main() { std::vector<int> v; auto r = std::max_element( std::begin( v ), std::end( v ) ); if( r != std::end( v ) ) { std::cout << "Das Maximum ist " << *r << std::endl; } else { std::cout << "Das Maximum kann nicht bestimmt werden, die Eingabemenge ist leer." << endl; } }
-
@DocShoe sagte in max Wert aus einem Array auslesen:
Aber das hast du doch mit std::max_element schon erschlagen
Nein, eben nicht. Weil ich direkt mit * darauf zugreife und nicht auf
!= end(v)
checke., du musst halt den Rückgabewert überprüfen
Das ist doch aber genau der Punkt, den ich in meinem Programm eben noch nicht erledigt hatte. Darum ging es mir doch. Du kannst im Code des Thread-Erstellers auch genauso einfach ein
if (n == 0)
einbauen. Das war auch nicht drin.Es ist überhaupt nicht klar, dass eine Ausgabe von "Das Maximum kann nicht bestimmt werden, die Eingabemenge ist leer." das gewünschte Verhalten ist. Vielleicht ist stattdessen auch 0 gewünscht oder es muss eine Eingabe wiederholt werden. Mein Ziel war, dass sich bitte @steven-w darüber Gedanken machen soll, nicht du.
-
@wob sagte in max Wert aus einem Array auslesen:
Mein Ziel war, dass sich bitte @steven-w darüber Gedanken machen soll, nicht du.
Zu spät