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



  • @steven-w sagte in max Wert aus einem Array auslesen:

    i< 9

    OT: da sollte wohl n stehen



  • 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.



  • @steven-w sagte in max Wert aus einem Array auslesen:

    #include <cmath>
    

    Wofür denn das?



  • @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 ein std::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 einfach puts("123 ist das Ergebnis"); schreiben. Ich nehme an, dass hier die Aufgabe mit der Idee gestellt wurde, dass man das nn 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, ob n == 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 😉


Log in to reply